Фильтрация записей по мета-данным записи

10 апр. 2012 г., 18:52:17
Просмотры: 26.5K
Голосов: 9

Я хочу отфильтровать записи таким образом, чтобы отображались только те записи, для которых get_post_meta($post->ID, "project_cat", true) (он возвращает ID записи) равен моему указанному значению.

Есть ли способ сделать это?

Меня особенно интересуют способы, совместимые с плагином WP-Paginate.

2
Комментарии

56% — это довольно низкий показатель — пожалуйста, не забывайте возвращаться к своим старым вопросам и отмечать правильные ответы. Это убирает их из списка "без ответов" и помогает другим быстрее находить решения. Также люди будут охотнее давать ответы, если будут знать, что автор вопроса на них отреагирует. :)

Stephen Harris Stephen Harris
10 апр. 2012 г. 18:58:34

Смотрите мой ответ ниже. Не совсем понятно, когда/где вы хотите фильтровать записи. Если вы обновите свой вопрос, включив эту информацию, я смогу подсказать, какие 'условия' вам нужно проверить. Либо посмотрите пример с query_post по ссылке. Общий принцип тот же — установка значения meta_query.

Stephen Harris Stephen Harris
10 апр. 2012 г. 19:24:46
Все ответы на вопрос 1
1
11

Объект WP_Query принимает аргумент для работы с метаполями. В общем случае вам нужно сделать следующее:

  $my_query = new WP_Query( 
    array(
      'post_type' => 'post',
      'meta_query' => array(
        array(
          'key' => 'project_cat',
          'value' => 'my-value',
        )
      ),

        // Другие параметры запроса
    ) 
  );

Где 'my-value' — это ваше 'указанное значение'.

Пример использования:

  add_action( 'pre_get_posts' , 'my_pre_get_posts' );

  function my_pre_get_posts( $query ) {

    // Проверяем, что это основной запрос и другие условия, если необходимо
    if( $query->is_main_query() ) {
        $query->set( 
          'meta_query', 
          array( 
            array(
              'key' => 'project_cat',
              'value' => 'my-value'
            )
          )
        );
    }

  }

Смотрите WP_Query, pre_get_posts. Все условные теги доступны для использования. В текущем примере это будет выполняться для каждого основного запроса — что, скорее всего, нежелательно.

Альтернативно можно использовать query_posts (более простой, но гораздо менее эффективный способ) для изменения запроса только в конкретном месте шаблона.

10 апр. 2012 г. 19:23:07
Комментарии

@TahirYasin - смотри кодекс.

Stephen Harris Stephen Harris
12 сент. 2013 г. 11:50:24