Отображение нескольких определенных страниц с помощью WP_Query ()

Я хочу отобразить 'известные' страницы и 'mschief'.

С помощью этого кода WP_query () не возвращает результата:

$args = array(
'post_type' => 'page',
'pagename' => 'famous,mschief',
'posts_per_page' => 3
);

Этот код возвращает одну из 2 страниц:

$args = array(
'post_type' => 'page',
'pagename=famous,mschief',
);

И этот код возвращает 2 страницы правильно:

$args = array(
'post_type' => 'page',
'pagename=famous,mschief',
'posts_per_page' => 3
);

Почему делает первую часть кода (единственное корректное одно мне) не работает? И почему оба другие приводят к этим результатам?

4
28.12.2013, 00:29
4 ответа

При рассмотрении объекта запроса после того, как те запросы будут выполнены, Вы будете видеть, что ни один из тех примеров не делает то, что Вы думаете, что они делают. Первый выпуск - то, что Вы не можете смешать строку запроса и параметры массива, и второй выпуск - это pagename может только использоваться для загрузки единственной страницы.

В этом Вы пропускаете заключительную кавычку после pagename. Принятие этого является опечаткой, проблема отмечена выше - это ищет единственную страницу с кратким заголовком famousmschief

$args = array(
'post_type' => 'page',
'pagename => 'famous,mschief',
'posts_per_page' => 3
);

В этом, pagename игнорируется и это просто запрашивает для новой страницы с помощью сообщений по умолчанию на значение страницы, которое, казалось бы, было бы 1.

$args = array(
'post_type' => 'page',
'pagename=famous,mschief',
);

В этом, та же проблема как в последний раз, но Вы загружаете больше страниц, таким образом, она просто загружает три новых страницы:

$args = array(
'post_type' => 'page',
'pagename=famous,mschief',
'posts_per_page' => 3
);

Если Вы хотите запросить несколько страниц, используйте post__in аргумент и страница ID:

$args = array(
    'post_type' => 'page',
    'post__in' => array( 23,42 )
);
4
19.02.2020, 22:11
  • 1
    Таким образом, нет никакого прямого способа выбрать больше чем одну страницу с помощью кратких заголовков? Очень жаль действительно! –  drake035 28.12.2013, 00:43
  • 2
    @drake035: Выбор страницы кратким заголовком инициировал дополнительные запросы. Посмотрите это, и это так меня не удивляет, что не легко пихнуть список через. И, действительно, необходимо избегать использования того параметра, если Вы можете. –  s_ha_dum 28.12.2013, 01:40

Для первого Вы не соответствовали кавычкам на третьей строке. То, что кажется, что Вы пытались сделать, было:

'pagename' => 'famous,mschief',
0
19.02.2020, 22:11

Можно записать собственную функцию, с помощью a posts_where фильтр

function page_names_query( $n = array() ) {
  static $pages;
  if ( is_null($pages) && ! empty($n) && is_array($n) ) {
    $pages = array_filter( array_map('sanitize_title', $n) );
    if ( ! empty($pages) ) {
      // using this function itself to filter next query
      add_filter('posts_where', __FUNCTION__, 999 ); 
      return new WP_Query('post_type=page'); // return the filtered query
    } else { // no valid page names passed
      $pages = NULL;
      return new WP_Query('p=-1'); // return a WP_Query with no posts
    }
  } elseif( current_filter() === 'posts_where' && ! empty($pages) && is_string($n) ) {
    $w = ' AND post_name IN (';
    global $wpdb;
    foreach ( $pages as $page ) { $w .= $wpdb->prepare('%s,', $page); }
    $pages = NULL; // reset static variable
    remove_filter('posts_where', __FUNCTION__, 999 ); // remove filter
    return $n . rtrim($w, ',') . ')';
  }
}

после этого можно использовать его как так

$query =  page_names_query( array('famous','mschief') ); // return a WP_Query

if ( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post();

// your loop here

endwhile; endif;
wp_reset_post_data();
0
19.02.2020, 22:11

Для Вашего вопроса нужно разъяснение. Я предполагаю, что Вы обращаетесь к 2 сообщениям, а не 2 страницы.

Можно использовать этот код PHP в дочерних темах functions.php файл для показывания сообщений i.d's сообщения.

add_action( 'pre_get_posts', 'wpsites_display_specific_posts_home_page' );

function wpsites_display_specific_posts_home_page( $query ) {

if( $query->is_main_query() && $query->is_home() ) {

    $query->set( 'post__in', array( 007, 008 ) );

    }
}

Этот код только покажет сообщения с 007 i.d и 008 в Вашем цикле домашней страницы. При использовании помех от страницы этот код будет работать на странице сообщений согласно настройкам чтения.

Используя i.d's лучше, поскольку они остаются тем же, даже когда Вы изменяете краткий заголовок.

0
19.02.2020, 22:11

Теги

Похожие вопросы