Je suis toujours très novice chez PHP, donc toute aide est grandement appréciée. En règle générale, j'ai trouvé le codex très utile, mais il semble que les promeneurs personnalisés ne relèvent pas de sa portée.
J'aimerais que les vignettes s'affichent dans un menu de navigation personnalisé que j'ai dans un thème. D'après ce que je comprends, je dois créer un marcheur personnalisé pour accomplir cela.
J'ai placé ceci
wp_nav_menu( array( 'container_class' => 'menu-stamp', 'theme_location' =>'stamp-menu' , 'walker' => new Thumbnail_Walker) );
dans mon emplacement de menu de thème et inséré les 3 lignes de vignette ci-dessous la section de sortie d'élément ci-dessous
/*
* Create HTML list of nav menu items.
* Replacement for the native Walker, using the description.
*
* @see http://wordpress.stackexchange.com/q/14037/
* @author toscho, http://toscho.de
*/
class Thumbnail_Walker extends Walker_Nav_Menu
{
/**
* Start the element output.
*
* @param string $output Passed by reference. Used to append additional content.
* @param object $item Menu item data object.
* @param int $depth Depth of menu item. May be used for padding.
* @param array $args Additional strings.
* @return void
*/
function start_el(&$output, $item, $depth, $args)
{
$classes = empty ( $item->classes ) ? array () : (array) $item->classes;
$class_names = join(
' '
, apply_filters(
'nav_menu_css_class'
, array_filter( $classes ), $item
)
);
! empty ( $class_names )
and $class_names = ' class="'. esc_attr( $class_names ) . '"';
$output .= "<li id='menu-item-$item->ID' $class_names>";
$attributes = '';
! empty( $item->attr_title )
and $attributes .= ' title="' . esc_attr( $item->attr_title ) .'"';
! empty( $item->target )
and $attributes .= ' target="' . esc_attr( $item->target ) .'"';
! empty( $item->xfn )
and $attributes .= ' rel="' . esc_attr( $item->xfn ) .'"';
! empty( $item->url )
and $attributes .= ' href="' . esc_attr( $item->url ) .'"';
// insert thumbnail
// you may change this
$thumbnail = '';
if( $id = has_post_thumbnail( (int)$item->object_id ) ) {
$thumbnail = get_the_post_thumbnail( $id );
}
$title = apply_filters( 'the_title', $item->title, $item->ID );
$item_output = $args->before
. "<a $attributes>"
. $args->link_before
. $title
. '</a> '
. $args->link_after
. $thumbnail
. $args->after;
// Since $output is called by reference we don't need to return anything.
$output .= apply_filters(
'walker_nav_menu_start_el'
, $item_output
, $item
, $depth
, $args
);
}
}
Je reçois une erreur inattendue} à la fin du code de la vignette, donc c'est faux, mais je ne sais pas pourquoi.
Ajouter un point-virgule ; après get_the_post_thumbnail( $id )
:
get_the_post_thumbnail( $id );
Pour les futurs visiteurs, vous devez changer
$thumbnail = '';
if( $id = has_post_thumbnail( (int)$item->object_id ) ) {
$thumbnail = get_the_post_thumbnail( $id );
}
à
$thumbnail = '';
if ( has_post_thumbnail( $item->object_id ) ) {
$thumbnail = get_the_post_thumbnail( $item->object_id );
}
La bonne réponse a été postée ici