Listar todas las categorías con las etiquetas y los posts que contienenphp
<?php
/***
Este código recupera todas las categorías y las etiquetas, y luego busca todos los posts que pertenecen a cada combinación de categoría y etiqueta.
Luego, muestra los títulos de los posts con enlaces a ellos, junto con las categorías a las que pertenecen.
Cada categoría se muestra como un encabezado <h2>, y las etiquetas se muestran como elementos de una lista <ul>.
Los posts se muestran como elementos de lista <li> debajo de cada etiqueta.
**/
$categories = get_terms( array(
'taxonomy' => 'category',
'hide_empty' => false,
) );
foreach ( $categories as $category ) {
echo '<h2>' . $category->name . '</h2>';
echo '<ul>';
$tags = get_terms( array(
'taxonomy' => 'post_tag',
'hide_empty' => false,
) );
foreach ( $tags as $tag ) {
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $category->term_id,
),
array(
'taxonomy' => 'post_tag',
'field' => 'term_id',
'terms' => $tag->term_id,
),
),
);
$posts = get_posts( $args );
if ( $posts ) {
echo '<li>' . $tag->name . ': ';
foreach ( $posts as $post ) {
$post_terms = wp_get_post_terms( $post->ID, 'category' );
$post_categories = array();
foreach ( $post_terms as $post_term ) {
$post_categories[] = $post_term->name;
}
echo '<a href="' . get_permalink( $post->ID ) . '">' . $post->post_title . '</a> (' . implode( ', ', $post_categories ) . ') ';
}
echo '</li>';
}
}
echo '</ul>';
}
?>