web-dev-qa-db-fra.com

Insérer du HTML dans un lien dans un lecteur

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>
1
JacobTheDev

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 );

/**
 * 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>
2
birgire