Как изменить / настроить типы и порядок сообщений? - PullRequest
0 голосов
/ 26 мая 2019

В моем архиве таксономии у меня есть несколько типов сообщений для отображения: вложения, портрет, книги и сообщения. Можно ли заказать их с pre_get_post или я должен создать новый (мини) запрос для каждого сообщения?

Я боюсь нарушить "естественный поток" моего шаблона taxonomy-artist.php запросами грязной ведьмы. НО мне также нужно изменить макет в соответствии с типом поста.

  1. В functions.php первый тест ОК, но нет контроля над заказом (по умолчанию, я думаю, что по дате)

    function add_CPT_to_archive_query() {
        global $wp_query;

        if (is_tax('artist')) { // Just for my template
        $wp_query->query_vars['post_type'] =  array( 'attachment', 'post', 'portrait', 'books' ); // the CPT I need to display
        $wp_query->query_vars['post_status'] =  array( null );
        return $wp_query;
        }
    }
    add_action('parse_query', 'add_CPT_to_archive_query');

  1. [Непосредственно внутри моего шаблона taxonomy-artist.php] Второй тест от @VayuRobins ( Запрос пользовательских типов записей и их порядок по пользовательским типам сообщений ): отлично, но он больше не отображает мои вложения. ..
<code>

    $my_post_types = array( 'portrait', 'attachment', 'book', 'post' );
    $posts_shown = array();
    $args = array(
    'post_type' => array( 'portrait', 'attachment', 'post', book ),
    'post_status' => 'any',
    'posts_per_page' => -1
    );
    $my_query = new WP_Query( $args );
    foreach ( $my_post_types as $post_type ):
    while ( $my_query->have_posts() ): $my_query->the_post();
    if ( $post_type == get_post_type() && ! in_array( get_the_ID(), $posts_shown ) ) {
    echo '<pre>' . get_post_type() .': '. get_the_title() . '
'; $ posts_shown [] = get_the_id (); перерыв; } ENDWHILE; $ My_query-> rewind_posts (); endforeach; wp_reset_postdata ();
  1. Я попробовал в последнюю очередь подумать (извините, это должно выглядеть так грязный! ...): создание в functions.php нескольких add_filter с изменением приоритета Но похоже, что второй add_filter "перезаписывает" первый ...


    function add_portrait() {
    global $wp_query;

        if (is_tax('artiste') OR is_tax() OR is_tag() OR is_category()) {
                $wp_query->query_vars['post_type'] =  array( 'portrait', );
                $wp_query->query_vars['post_status'] =  array( null );
                return $wp_query;
            }
        }
        add_filter('parse_query', 'add_portrait');


    function add_attachment() {
      global $wp_query;

      if (is_tax('artiste')) {
          $wp_query->query_vars['post_type'] =  array( 'attachment' );
          $wp_query->query_vars['post_status'] =  array( null );
          return $wp_query;
      }
    }
    add_filter('parse_query', 'add_attachment');

Спасибо за любую помощь, чтобы понять мои ошибки и найти правильное направление!

...