Условно заданный контент публикации в wp вставить запись
Можно ли условно задать значение post_content в wp_insert_post? Я использую foreach для добавления нескольких страниц одновременно:
foreach ($create_pages as $new_page) {
$add_pages = array(
'post_title' => $new_page,
'post_content' => '', // lets say, if the page_title is 'Home', set the post_content to 'Default home page content'
'post_status' => 'publish',
'post_type' => 'page'
);
$page_id = wp_insert_post($add_pages);
}
Можно ли также установить содержимое по умолчанию для всех страниц внутри файла php?
3 answers
Я не могу не думать, что мне чего-то не хватает, но, похоже, очевидный ответ заключается в том, чтобы изменить ваш массив $create_pages
:
$create_pages = array(
'one' => 'content for one',
'two' => 'content for two',
'three' => 'content for three'
);
foreach ($create_pages as $title => $content) {
$add_pages = array(
'post_title' => $title,
'post_content' => $content, // lets say, if the page_title is 'Home', set the post_content to 'Default home page content'
'post_status' => 'publish',
'post_type' => 'page'
);
var_dump($add_pages); // debugging
// $page_id = wp_insert_post($add_pages);
}
Можно использовать второй массив содержимого публикации и сопоставить его с заголовками, но, основываясь на вашем описании проблемы, я не понимаю, зачем вам нужна такая сложность.
Другим вариантом было бы использовать вложенные массивы, что-то вроде этого:
$create_pages = array(
array (
'title' => 'one',
'content' => 'content for one'
),
array (
'title' => 'two',
'content' => 'content for two'
),
array (
'title' => 'three',
'content' => 'content for three'
),
);
foreach ($create_pages as $page) {
$add_pages = array(
'post_title' => $page['title'],
'post_content' => $page['content'], // lets say, if the page_title is 'Home', set the post_content to 'Default home page content'
'post_status' => 'publish',
'post_type' => 'page'
);
var_dump($add_pages);
// $page_id = wp_insert_post($add_pages);
}
Я совершенно уверен, что любая из версий должна работать нормально (см. это и это), хотя последнее, вероятно, будет более читабельным, если у вас длинные заголовки.
Если этот массив слишком велик, вы можете поместить его в другой файл и include
его.
Да, вы могли бы попробовать это -
foreach( $create_pages as $new_page ){
$content = "Default ". strtolower($new_page) ." page content";
$add_pages = array(
'post_title' => $new_page,
'post_content' => $content,
'post_status' => 'publish',
'post_type' => 'page'
);
$page_id = wp_insert_post($add_pages);
}
Изменения:
Что касается внешней логики, вы могли бы попробовать следующее.
foreach( $create_pages as $new_page ){
$content = "Default ". strtolower($new_page) ." page content";
// allow external filter to the page content.
// filter names become available appending the page name with 'external_page_content_'
$content = apply_filters( 'external_page_content_' . sanitize_title_with_dashes($new_page), $content );
$add_pages = array(
'post_title' => $new_page,
'post_content' => $content,
'post_status' => 'publish',
'post_type' => 'page'
);
$page_id = wp_insert_post($add_pages);
}
Теперь, чтобы добавить контент для страницы, например: О нас
add_filter('external_page_content_about_us', 'my_about_us_page_content');
function my_about_us_page_content($content){
// here you can define your about us page content
return $content;
}
Ссылка:
- очистить_титл_вы_деши - это удаляет пробелы с тире и не буквенно-цифровыми символами и делает все альфа-символы в нижнем регистре.
- apply_filters - это используется, чтобы оставить обратный вызов, как мы делаем с вызов_пользователя_функция
Зависит от того, на что вы хотите, чтобы это было обусловлено. Например.
<?php
foreach( $create_pages as $new_page ){
if ($new_page == 'Home') {
$content = "Home is where the heart is";
} else {
$content = "$new_page is going to be a great page.";
}
$add_page = array(
'post_title' => $new_page,
'post_content' => $content,
'post_status' => 'publish',
'post_type' => 'page'
);
$page_id = wp_insert_post($add_page);
}
?>