web-dev-qa-db-fra.com

wordpress Custom Walker pour les vignettes avec menu personnalisé

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.

1
javy

Ajouter un point-virgule ; après get_the_post_thumbnail( $id ):

get_the_post_thumbnail( $id );
1
fuxia

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

1
Andrew