だから、私はカスタムコードを追加するために以下を使って特定のメニューをターゲットにする方法を理解しています。
<?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
)
);
?>
私が持っている質問は以下の通りです。
"primary"というメニューがあるとしましょう。このメニューには、4つのメニュー項目があります(下の写真)。
その一つが「プロファイル」です。
Wordの「Profile」をWordの「Profile」ではなく、ユーザーのプロフィール写真を表示する次のコードに置き換えます。
<?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; ?>
したがって、最終結果は次のようになります。
では、メニュー項目のタイトルを具体的にターゲットにする方法はありますか。
編集:
だから、私は次のようなものを手に入れました、そしてそれがなぜうまくいかないのか私にはわかりません。
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);
これが私の論理です。まず「基本」メニューをターゲットにしてから、項目のタイトル「royal_profile_menu_title」を探してから、Wordのタイトルを出力に置き換えます
(私のメニューのタイトルは "royal_profile_menu_title"です:下の写真)
どれか
これはwalker_nav_menu_start_el
フィルタを使用することで比較的簡単に実行できます(PHPタグスパムはすべて不要です)。
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);
注:return
ではなく、文字列をecho
に編集する必要がありました。 if
条件式を微調整する必要があるかもしれません。 var_dump()
のコメントを外して、何をしなければならないのかを確認します。
私はCSSの次善策をとるでしょう。メニュー管理では、CSSクラスをメニュー項目に追加することができます(フィールドが表示されていない場合は、[画面オプション]に表示されます)。たとえば、 "profile-link"です。
そして、あなたはあなたのテンプレートHEADセクションに次のようなものを追加することができます。
<?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>
そしてwp_nav_menu
関数に'link_before' => '<span>', 'link_after' => '</span>'
オプションを追加してください。
テストされていません、しかしそれは仕事をするべきです。