Как изменить запрос в taxonomy-custom.php для сортировки архивов терминов по пользовательскому мета-полю?


Я пытаюсь создать тематические страницы для пользовательских терминов таксономии, в которых архивы упорядочены по пользовательскому мета-полю.

Я могу сделать это с помощью нового wp_query следующим образом:

        <?php $directory_archive_query = new WP_Query( 
            array( 
                'post_type' => 'directory',
                'posts_per_page' => 200,
                'meta_key' => 'surname',
                'orderby' => 'meta_value',
                'order' => 'ASC' ) ); ?>    

            <?php while($directory_archive_query->have_posts()) : $directory_archive_query->the_post(); ?>

Однако мне это нужно для работы над taxonomy-custom.php страница так, чтобы страница архива каждого отдельного термина таксономии была указана в соответствии с пользовательским полем "мясо" (называемым "фамилия"). Если я использую wp_query, то, конечно, это не сработает, потому что он больше не показывает результаты для каждый конкретный термин.

Я также пытался сделать это с помощью pre_get_posts, но тоже не могу заставить это работать. Я ожидаю, что все сообщения, перечисленные на странице архива терминов, будут перечислены в порядке возрастания по мета-ключу фамилии. Этого не происходит. Вместо этого они просто перечисляются в том же порядке, как если бы там не было pre_get_posts. Код, который я использовал, выглядит следующим образом:

<?php 

    function customize_customtaxonomy_archive_display ( $query ) {
        if (($query->is_main_query()) && (is_tax('services')))

        $query->set( 'post_type', 'directory' );                 
        $query->set( 'posts_per_page', '200' );
        $query->set( 'meta_key', 'surname' );           
        $query->set( 'orderby', 'meta_value' );
        $query->set( 'order', 'ASC' );
    }

     add_action( 'pre_get_posts', 'customize_customtaxonomy_archive_display' );

?>

Очень надеюсь, что кто-нибудь сможет помочь.

Спасибо за ваше время.

Эндрю.

Author: Andrew Brown, 2013-11-13

1 answers

Фильтр pre_get_posts устанавливается непосредственно перед началом цикла в taxonomy-services.php

Это слишком поздно. Основной запрос выполняется задолго до загрузки вашего шаблона. Переместите свой фильтр pre_get_posts в functions.php вашей темы или в файл плагина или MU-плагина, и вы должны увидеть разницу.

 8
Author: s_ha_dum, 2013-11-13 14:47:22