J'essaie de filtrer les publications par auteur. Le 'post_author' est une taxonomie personnalisée et je l'ai incluse dans mes arguments et les messages s'affichent avec les noms d'auteur liés, mais lorsque je clique sur le lien du nom de l'auteur, tous les auteurs sont affichés. Comment puis-je afficher uniquement l'auteur sur lequel vous avez cliqué? J'ai inclus les morceaux de code pertinents:
//ADD THE TAXONOMY 'post_authors' TO MY CUSTOM POST TYPE
function add_custom_taxonomies() {
register_taxonomy('post_authors', 'my-post-type', array(
'hierarchical' => true,
'labels' => array(
'name' => _x( 'Authors', 'taxonomy general name' ),
'singular_name' => _x( 'Author', 'taxonomy singular name' ),
'search_items' => __( 'Search Authors' ),
'all_items' => __( 'All Authors' ),
'parent_item' => __( 'Parent Author' ),
'parent_item_colon' => __( 'Parent Author:' ),
'edit_item' => __( 'Edit Author' ),
'update_item' => __( 'Update Author' ),
'add_new_item' => __( 'Add New Author' ),
'new_item_name' => __( 'New Author Name' ),
'menu_name' => __( 'Authors' ),
),
// Control the slugs used for this taxonomy
'rewrite' => array(
'slug' => 'post-authors', // This controls the base slug that will display before each term
'with_front' => false, // Don't display the category base before "/authors/"
'hierarchical' => true // This will allow URL's like "/authors/lorem/ipsum/"
),
));
}
add_action( 'init', 'add_custom_taxonomies', 0 );
// and in my archive page......
//ARGS
$args = array(
'post_type' => 'my-post-type',
'order' => 'DESC',
'tax_query' => array(
array(
'taxonomy' => 'post_authors',
'field' => 'slug',
'terms' => 'Jill Jones',
),
),
);
//RETRIEVES AUTHOR NAME FROM CUSTOM TAXONOMY
$terms = get_the_terms( $post->ID, 'post_authors' );
if ($terms) {
$terms_name = array();
foreach ( $terms as $term ) {
// The $term is an object, so we don't need to specify the $taxonomy.
$term_link = get_term_link( $term );
$terms_name[] = $term->name;
// If there was an error, continue to the next term.
if ( is_wp_error( $term_link ) ) {
continue;
}
}
$author_name = $terms_name[0];
}
//RETRIEVING THE AUTHOR NAME IN LOOP
if ( $post_typed == ('my-post-type') && $author_name != '' ) { echo '<a href="' . esc_url( $term_link ) . ' ">' . $author_name . '</a>'; }
Ceci est attendu à partir de ce que vous avez dans votre code. Ne changez jamais la requête principale d'une requête personnalisée sur une page d'archive ou sur la page d'accueil. Les requêtes personnalisées sont toujours gênantes car la requête principale est assez spécifique sur ces pages.
Je vous conseillerais plutôt d’utiliser pre_get_posts
pour modifier la requête principale sur la page d’archive ou la page d’accueil spécifique que vous souhaitez cibler, et de laisser la boucle par défaut en place.
En outre, votre requête fiscale est complètement fausse. Ce devrait être un tableau d'un tableau. Regardez s'il vous plaît construire une requête de taxe dans WP_Query
Pour plus de lecture et une meilleure compréhension, veuillez consulter ma réponse je l’ai fait récemment sur un type de question similaire
Exemple de code (place dans functions.php et retour à la boucle par défaut dans taxonomy.php):
function custom_author_page( $query ) {
if ( !is_admin() && $query->is_tax( 'post_authors' ) && $query->is_main_query() ) {
$query->set( 'post_type', 'my-post-type' );
$query->set( 'order', 'DESC' );
}
}
add_action( 'pre_get_posts', 'custom_author_page' );
EDIT
À partir de vos commentaires, vous avez nommé votre modèle de taxonomie taxonomy-post-author.php qui concerne la taxonomie post
et le terme author
. Renommez votre modèle de taxonomie en taxonomy-post_authors.php
EDIT 2
OPTION 1
Changez votre page de taxonomie sur la boucle par défaut, pas de boucle personnalisée.
<?php
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
//
// Post Content here
//
} // end while
} // end if
?>
Modifiez la requête principale avec pre_get_posts
comme ci-dessus. C'est la méthode correcte
OPTION 2
Récupère le terme recherché en utilisant get_queried_object('term');
, et renvoie le slug du terme. PS! ce code doit être utilisé dans les pages de taxonomie
$queried_object = get_queried_object('term');
$term_slug = $queried_object->slug;
Renvoyez $term_slug
dans votre tax_query
sous la forme terms
EDIT 3
Pour obtenir un tableau de noms de termes/slugs/ID d'une taxonomie spécifique, utilisez get_terms()
.
$terms = get_terms('post_authors');
$term_names = array();
if ( !empty( $terms ) && !is_wp_error( $terms ) ) {
foreach ( $terms as $key=>$term){
$term_names[$key] = $term->name;
}
}
Vous pouvez alors simplement passer $term_names
à terms
,
'terms' => $term_names
EDIT 4
Utilisation
<pre><?php var_dump($term_names); ?></pre>
pour imprimer le tableau. La sortie ressemblera à ceci
array(6) {
[0]=>
string(12) "Admin se pen"
[1]=>
string(11) "Besprekings"
[5]=>
string(12) "Toets Parent"
[6]=>
string(15) "Uit die grapkas"
[7]=>
string(14) "Uit die koskas"
[8]=>
string(11) "Uit my lewe"
}