web-dev-qa-db-fra.com

Comment modifier la requête dans taxonomy-custom.php pour trier les archives de termes par un méta-champ personnalisé?

J'essaie de créer des pages de thème pour les termes de taxonomie personnalisés dans lesquels les archives sont classées par un méta-champ personnalisé.

Je peux le faire avec un nouveau wp_query comme suit:

        <?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(); ?>

Toutefois, il me faut travailler sur la page taxonomy-custom.php afin que la page d'archive de chaque terme de taxonomie soit répertoriée en fonction du champ de viande personnalisé (appelé "nom de famille"). Si j'utilise wp_query, cela ne fonctionne bien sûr pas, car les résultats ne sont plus affichés pour chaque terme spécifique.

J'ai aussi essayé de faire cela en utilisant pre_get_posts, mais je ne peux pas le faire fonctionner non plus. Ce que je prévois, c’est que toutes les publications répertoriées sur la page d’archive seront classées par ordre croissant de la clé méta du nom de famille. Cela ne se passe pas. Au lieu de cela, ils listent simplement dans le même ordre que s'il n'y avait pas de pre_get_posts à cet endroit. Le code que j'ai utilisé est le suivant:

<?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' );

?>

En espérant vraiment que quelqu'un puisse aider.

Merci pour votre temps.

Andrew.

4
Andrew Brown

Le filtre pre_get_posts est juste avant le début de la boucle dans taxonomy-services.php

C'est trop tard. La requête principale s'exécute bien avant le chargement de votre modèle. Déplacez votre filtre pre_get_posts vers le functions.php de votre thème, un plugin ou un fichier MU-Plugin, et vous devriez voir la différence.

6
s_ha_dum