it-swarm.com.de

Ersetzen eines bestimmten Menüpunkts

Daher verstehe ich, wie man ein bestimmtes Menü mit dem folgenden Befehl ansteuert, um einen benutzerdefinierten Code hinzuzufügen.

<?php

wp_nav_menu(
 array(
  'menu' => 'Project Nav',
  // do not fall back to first non-empty menu
  'theme_location' => '__no_such_location',
  // do not fall back to wp_page_menu()
  'fallback_cb' => false
 )
 );

?>

Ich habe folgende Frage.

Angenommen, ich habe ein Menü namens "Primary". In diesem Menü gibt es 4 Menüpunkte (Bild unten).

enter image description here

Einer der Punkte heißt "Profil".

Ich möchte das Wort "Profil" durch den folgenden Code ersetzen, in dem das Benutzerprofilfoto anstelle des Worts "Profil" angezeigt wird.

    <?php global $my_profile; ?>
    <?php if (is_user_logged_in()) : ?>
    <div class="img" data-key="profile"><?php echo get_avatar( get_current_user_id(), 64 ); ?></div>
    <?php endif; ?>

Das Endergebnis würde also so aussehen:

enter image description here

Wie kann ich nun gezielt einen Menüelementtitel auswählen?

BEARBEITEN:

Also, ich habe die folgenden Grundlagen und ich bin nicht sicher, warum es nicht funktioniert.

function nav_replace_wpse_189788($item_output, $item, $args) {
 //var_dump($item_output, $item);
 if( $args->theme_location == 'primary' ){
  return $items;

   if ('royal_profile_menu_title' == $item->title) {
    global $my_profile;

    if (is_user_logged_in()) { 
      return '<div class="img" data-key="profile">'.get_avatar( get_current_user_id(), 64 ).'</div>';
        }
    }
  }
   return $item_output;
 }
 add_filter('walker_nav_menu_start_el','nav_replace_wpse_189788',10,2);

Hier ist meine Logik. Rufen Sie zuerst das "primäre" Menü auf, suchen Sie dann nach dem Elementtitel "royal_profile_menu_title" und ersetzen Sie den Word-Titel durch die Ausgabe

(Mein Menütitel ist "royal_profile_menu_title": Bild unten) enter image description here

Irgendein

1
steve Kim

Mit dem walker_nav_menu_start_el-Filter ist dies relativ einfach (ohne all das PHP -Tag-Spam):

function nav_replace_wpse_189788($item_output, $item) {
  //   var_dump($item_output, $item);
  if ('Profile' == $item->title) {
    global $my_profile; // no idea what this does?
    if (is_user_logged_in()) { 
      return '<div class="img" data-key="profile">'.get_avatar( get_current_user_id(), 64 ).'</div>';
    }
  }
  return $item_output;
}
add_filter('walker_nav_menu_start_el','nav_replace_wpse_189788',10,2);

Hinweis: Ich musste Ihren Code in eine return Zeichenfolge ändern, nicht in eine echo. Möglicherweise müssen Sie die if-Bedingung anpassen. Kommentieren Sie die var_dump() aus, um zu sehen, womit Sie arbeiten müssen.

5
s_ha_dum

Normalerweise würde ich eine CSS-Problemumgehung verwenden. In der Menüverwaltung können Sie dem Menüelement eine CSS-Klasse hinzufügen (falls das Feld nicht angezeigt wird, finden Sie es in den Bildschirmoptionen), zum Beispiel "profile-link".

Und dann können Sie Ihrer Vorlage den folgenden HEAD Abschnitt hinzufügen:

<?php
$avatar = get_avatar_url( get_current_user_id(), array('size' => 64) ); // from WP 4.2
$image_url = $avatar['url'];
?>

<style type="text/css">
.menu li.profile-link { background-image: url(<?php echo $image_url ?>); /* + another CSS*/  }
.menu li.profile-link span { display: none; }
</style>

Und füge zu deiner wp_nav_menu Funktion 'link_before' => '<span>', 'link_after' => '</span>' Optionen hinzu.

Nicht getestet, aber es sollte den Job machen.

1
Marek