Условно заданный контент публикации в 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?

Author: Richard Mišenčík, 2014-02-22

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 его.

 2
Author: s_ha_dum, 2017-05-23 12:40:08

Да, вы могли бы попробовать это -

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. очистить_титл_вы_деши - это удаляет пробелы с тире и не буквенно-цифровыми символами и делает все альфа-символы в нижнем регистре.
  2. apply_filters - это используется, чтобы оставить обратный вызов, как мы делаем с вызов_пользователя_функция
 2
Author: Shazzad, 2014-02-23 05:44:09

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

<?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);
}
?>
 0
Author: Graeme, 2014-02-22 21:16:44