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

8

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

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

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

Porton
источник
56% довольно мало - пожалуйста, не забудьте вернуться к своим старым вопросам и принять правильные ответы. Он убирает их из «оставшейся без ответа» и помогает другим легче находить решения. Люди также будут более охотно предлагать ответы, если они знают, что ОП ответит на них. :)
Стивен Харрис
Смотрите мой ответ ниже. Не ясно, когда и где вы хотите фильтровать сообщения. Если вы обновите свой ответ, включив его, я могу предложить, какие «условия» вам необходимо проверить. В качестве альтернативы см. Связанный пример query_post. Общий принцип тот же - установка meta_queryзначения.
Стивен Харрис

Ответы:

11

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

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

        // Other query properties
    ) 
  );

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

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

  add_action( 'pre_get_posts' , 'my_pre_get_posts' );

  function my_pre_get_posts( $query ) {

    // Check this is main query and other conditionals as needed
    if( $query->is_main_query() ) {
        $query->set( 
          'meta_query', 
          array( 
            array(
              'key' => 'project_cat',
              'value' => 'my-value'
            )
          )
        );
    }

  }

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

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

Стивен Харрис
источник
@TahirYasin - см. Кодекс .
Стивен Харрис
1

Вы можете отфильтровать сообщение по мета-значению и отобразить сообщение на странице cms.

'meta_query' => array(
        array(
            'key'     => 'front_page',
            'value'   => 'yes',
            'compare' => 'LIKE',
        ))

пожалуйста, обратитесь к учебнику для пошагового объяснения

http://www.pearlbells.co.uk/filter-posts-custom-fields-wp_query/

Лиз Айпе С
источник