web-dev-qa-db-fra.com

Alphabétisation des publications dans une page de catégorie?

J'ai écrit un modèle de page qui listera les messages dans la même catégorie que le nom de la page. Je me demande comment le modifier pour qu'il renvoie les messages dans l'ordre alphabétique?

J'ai lu et joué avec la façon de changer le modèle avec la page Alphabetizing Posts Codex . Je n'arrive tout simplement pas à le faire fonctionner. Il serait grandement apprécié que quelqu'un me le montre une fois pour que je puisse voir comment cela se fait dans ce contexte.

Voici mon code pour le modèle de page:

<?php /*
Template Name: Category Page
*/ 

get_header(); ?>



<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <div class="content-container">
        <h1><?php the_title(); ?></h1>
            <?php the_content(); ?>
            <?php endwhile; 
            else: endif; ?>

<?php query_posts('category_name='.get_the_title().'&post_status=publish');?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>    </h1>
        <p><?php the_content(); ?>

<?php endwhile; else: endif; ?>
</div>

<?php /*If sidebar is not disabled in Customizer, get_sidebar*/
if ( get_theme_mod( 'ctheme_remove_sidebar' ) != 1 ) :
get_sidebar(); 
endif;
get_footer(); ?>

C'est une façon dont je pense le faire. Si vous avez d'autres idées sur la façon dont je devrais l'aborder, faites le moi savoir!

Le but de cette page sera de récupérer une liste de noms d’animaux ((pas de date pour le post, pas d’extrait pour le post, juste le nom de l’animal), l’ordre alphabétique serait donc le plus utile.

Merci!

2
Nimara

Comme je l'ai dit, n'utilisez jamais query_posts. La page que vous avez liée au codex ne vaut rien et est complètement fausse. Pour des informations supplémentaires sur pourquoi ne pas utiliser query_posts, vérifiez ma réponse ici et la réponse par @ Rarst .

Vous avez un autre problème ici, category_name fait pasaccepter le nom de la catégorie comme valeur, mais le slug . La convention de dénomination de ce paramètre est incorrecte. get_the_title() renvoie le nom/titre de la page, pas le slug. Votre requête peut fonctionner si la page a un titre Word sans caractères spéciaux, car la suppression du nom dans la classe WP_Tax_Query pourrait correspondre au slug, mais elle échouera si le nom de la page comporte des caractères spéciaux ou plusieurs mots.

Ce dont vous avez besoin est d'obtenir le slug de page, que vous passerez en tant que slug de catégorie à category_name. Pour ce faire, vous devez obtenir l'objet interrogé, puis renvoyer la propriété $post_name. Encore une fois, la convention de nommage est complètement fausse. $post_name contient le slug de la page, pas le nom.

En ce qui concerne la commande, vous devez définir le paramètre orderby sur title et order sur ASC pour commander de a-z et non le paramètre par défaut z-a.

Globalement, votre requête devrait ressembler à ceci: ( NOTE: Requiert minimum PHP 5.4 )

$args = [
    'category_name' => get_queried_object()->post_name,
    'order'         => 'ASC',
    'orderby'       => 'title' // Can use 'name' as well, see https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
    // Add any extra parameters you need
];
$q = new WP_Query( $args ); 

// Run the loop
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
    $q->the_post();

        // Display what you need from the loop like title, content etc

    }
    wp_reset_postdata();
}

Vous pouvez également essayer d'utiliser quelque chose comme ce où vous pouvez avoir une page dans laquelle vous choisissez la catégorie à afficher lorsque vous publiez une page, vous pouvez également sélectionner un ordre. et quelques autres fonctionnalités.

2
Pieter Goosen

Vous devez examiner de plus près query_posts et classer vos publications par titre, comme il est indiqué sur la page à laquelle vous avez lié .

Vous devez changer ceci:

<?php query_posts('category_name='.get_the_title().'&post_status=publish');?>

et ajoutez ceci:

<?php query_posts('category_name='.get_the_title().'&post_status=publish&orderby=title');?>

Comme quelqu'un l'a fait remarquer, vous devriez vraiment utiliser WP_Query dans cette situation. Jetez un coup d'œil à la référence, car de nombreuses options sont expliquées très clairement: Référence de classe/Requête WP

1
pwbred