В моем архиве таксономии у меня есть несколько типов сообщений для отображения: вложения, портрет, книги и сообщения. Можно ли заказать их с pre_get_post
или я должен создать новый (мини) запрос для каждого сообщения?
Я боюсь нарушить "естественный поток" моего шаблона taxonomy-artist.php запросами грязной ведьмы. НО мне также нужно изменить макет в соответствии с типом поста.
- В 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');
- [Непосредственно внутри моего шаблона 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 ();
- Я попробовал в последнюю очередь подумать (извините, это должно выглядеть так
грязный! ...): создание в 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');
Спасибо за любую помощь, чтобы понять мои ошибки и найти правильное направление!