J'ai un navigateur de navigation personnalisé qui (théoriquement) extrait l'image sélectionnée du post le plus récent dans une taxonomie personnalisée et l'affiche après le lien dans un wp_list_categories
.
Le problème est que j'ai besoin que l'image s'affiche au-dessus du nom de la catégorie, dans le lien. Je n'arrive pas à comprendre comment faire cela.
Voici mon marcheur personnalisé:
class CategoryThumbnailWalker extends Walker_Category {
function start_el(&$output, $category, $depth, $args) {
parent::start_el(&$output, $category, $depth, $args);
$posts = get_posts(array(
"child_of" => $category->term_id, // may need to be disabled; we'll see
"post_type" => "projects",
"project-category" => $category->slug,
));
if ($posts) {
foreach ($posts as $post) {
if (has_post_thumbnail($post->ID)) {
$output .= get_the_post_thumbnail($post->ID, "gallery-small");
} else {
$output .= "<img alt=\"No image available\" src=\"" . get_template_directory_uri() . "/img/no-image.jpg\" />";
}
break;
}
} else {
$output .= "<img alt=\"No image available\" src=\"" . get_template_directory_uri() . "/img/no-image.jpg\" />";
}
}
}
et voici mon wp_list_categories
:
$category = $wp_query->get_queried_object_id();
wp_list_categories(array(
"child_of" => $category,
"depth" => 1,
"hide_empty" => false,
"hierarchical" => 1,
"orderby" => "name",
"pad_counts" => 0,
"post_type" => "projects",
"show_count" => 0,
"show_option_none" => "",
"taxonomy" => "project-category",
"title_li" => "",
"walker" => new CategoryThumbnailWalker()
));
Et voici ce que tout cela produit:
<li class="cat-item cat-item-13">
<a href="http://christopherconsultants.myweblinx.net/project-category/education/" title="View all posts filed under Education">
Education
</a>
<img alt="No image available" src="http://christopherconsultants.myweblinx.net/wp-content/themes/christopher-consultants/img/no-image.jpg">
</li>
Vous pouvez essayer de passer la CategoryThumbnailWalker
et d'utiliser à la place le filtre list_cats
.
Voici un exemple non testé:
add_filter( 'list_cats', 'wpse_149898_list_cats', 99, 2 );
wp_list_categories(array(
"child_of" => get_queried_object_id(),
"depth" => 1,
"hide_empty" => false,
"hierarchical" => 1,
"orderby" => "name",
"pad_counts" => 0,
"post_type" => "projects",
"show_count" => 0,
"show_option_none" => "",
"taxonomy" => "project-category",
"title_li" => "",
));
remove_filter( 'list_cats', 'wpse_149898_list_cats', 99, 2 );
où
/**
* Prepend the featured image, from the most recent project
* in a custom taxonomy, to the term name.
*
* @param string $cat_name
* @param object $category
* @return string
*/
function wpse_149898_list_cats( $cat_name, $category )
{
$posts = get_posts( array(
'post_type' => 'projects',
'posts_per_page' => 1,
'meta_key' =>'_thumbnail_id',
'project-category' => $category->slug,
) );
$img = sprintf( "<img alt=\"No image available\" src=\"%s/img/no-image.jpg\" />",
get_template_directory_uri()
);
if ( $posts ):
foreach ( $posts as $post )
{
if ( has_post_thumbnail( $post->ID ) )
$img = get_the_post_thumbnail( $post->ID, 'gallery-small' );
}
endif;
return $img . $cat_name;
}
La sortie devrait (espérons-le) être comme ceci:
<li class="cat-item cat-item-13">
<a href="http://christopherconsultants.myweblinx.net/project-category/education/" title="View all posts filed under Education">
<img alt="No image available" src="http://christopherconsultants.myweblinx.net/wp-content/themes/christopher-consultants/img/no-image.jpg">
Education
</a>
</li>