J'ai enregistré un type de message personnalisé "Animaux" ainsi que deux taxonomies personnalisées ("Vertébrés" et "Type") qui lui sont attribuées et qui ont leurs propres termes. "Vertébrés" signifie "Mammifères" et "Reptiles", et pour "Type", il s'agira de "type d'eau" et de "type de sol".
En utilisant page.php, j'aimerais afficher une liste de tous les articles personnalisés (Animaux) triés selon les termes attribués à la taxonomie personnalisée "Vertébrés". À cet effet, je réussis à l'aide du code ci-dessous:
<?php
$post_type = 'animals';
$tax = 'vertebrate';
$tax_terms = get_terms($tax);
if ($tax_terms) {
foreach ($tax_terms as $tax_term) {
$args=array(
'post_type' => $post_type,
"$tax" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => -1,
'caller_get_posts'=> 1,
'orderby' => 'title',
'order' => 'ASC'
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
echo '<h2>'. $tax_term->name .'</h2>';
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
endwhile;
}
wp_reset_query();
}
}
?>
Cela me donne quelque chose comme ça:
Cependant, je voudrais également indiquer dans la liste précédente à quels termes de la taxonomie "Type" chaque tâche est attribuée (en plus des termes de la taxonomie des vertébrés) en renvoyant simplement leur nom après le lien du message.
J'essaie de réaliser quelque chose comme ceci:
Je suis complètement coincé avec cela, ma connaissance de WordPress et de PHP étant pratiquement nulle, j’accepterais volontiers toute aide en la matière.
Mon ami m'a aidé avec ça. Cela devrait fonctionner avec ceci:
<?php
$post_type = 'animals';
$tax = 'vertebrate';
$tax_terms = get_terms($tax);
if ($tax_terms) {
foreach ($tax_terms as $tax_term) {
$args=array(
'post_type' => $post_type,
"$tax" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => -1,
'caller_get_posts'=> 1,
'orderby' => 'title',
'order' => 'ASC'
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
echo '<h2>'. $tax_term->name .'</h2>';
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
<?php
setup_postdata( $post );
$terms = wp_get_post_terms( $post->ID, 'type');
echo '<span>'. ($terms[0]->name) .'</span></p>'; ?>
<?php
endwhile;
}
wp_reset_query();
}
}
?>
Quelque chose comme ça devrait aider:
<?php
$post_type = 'animals';
$tax = 'vertebrate';
$tax_terms = get_terms($tax);
if ( $tax_terms ) {
foreach ($tax_terms as $tax_term) {
$args = array(
'post_type' => $post_type,
"$tax" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => -1,
'caller_get_posts' => 1,
'orderby' => 'title',
'order' => 'ASC'
);
// $my_query = null; <- REMOVE THIS, YOU DON'T NEED TO NULL VARIABLE BEFORE ASSIGNING IT'S VALUE
$my_query = new WP_Query($args);
?>
<?php if ( $my_query->have_posts() ) : ?>
<h2><?php echo esc_html($tax_term->name); ?></h2>'; <?php // <- YOU SHOULD ESCAPE PRINTED VALUES ?>
<ol>
<?php while ($my_query->have_posts()) : ?>
$my_query->the_post(); ?>
<li>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
<?php
// setup_postdata( $post ); <- THERE IS NO NEED TO SETUP_POSTDATA HERE (YOU'VE ALREADY CALLED the_post() ON QUERY
$type_terms = wp_get_post_terms( $post->ID, 'type');
if ( $type_terms ) {
echo '<span>('. esc_html($terms[0]->name) .')</span>';
}
?>
</li>
<?php endwhile; ?>
</ol>
<?php endif; ?>
<?php
// wp_reset_query(); <- YOU DON'T CHANGE GLOBAL $wp_query, SO THERE IS NO NEED TO RESET QUERY (ESPECIALLY DON'T DO THIS FOR EACH $tax_term
}
}
// BUT YOU DO CHANGE GLOBAL $post, SO YOU SHOULD RESET IT'S VALUE TO BE COMPATIBLE WITH PLUGINS AND SO ON
wp_reset_postdata();
?>
Les listes ordonnées (OL) seraient bien meilleures que les paragraphes (P) dans ce cas (puisqu'il s'agit de LISTES d'animaux ORDERED BY name).