Условно установлен post_content в wp_insert_post

Можно ли условно установить post_content в wp_insert_post? Im используя 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-файла?

Я не могу не думать, что у меня что-то не хватает, но похоже, что явный ответ – изменить массив $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; } 

Справка:

  1. sanitize_title_with_dashes – это пространство пробелов с тире и не буквенно-цифровыми символами, а все альфа-символы – в нижнем корпусе.
  2. apply_filters – это используется для оставления обратного вызова, как в случае с call_user_func

Зависит от того, на что вы хотите, чтобы он был условным. Например

 <?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); } ?>