1

ここに私のコードがあります:

$menu_icon = get_field('menu_icon');

if($menu_icon) {
    $m_icon = '<img src="'.the_field('menu_icon').'">';
} else {
    $m_icon = "";
};

$personal = array(
    'theme_location'  => 'personal',
    'menu'            => 'Personal Menu',
    'before'          => '$m_icon',
);

wp_nav_menu( $personal );

そして、これが吐き出すものです:

<ul id="menu-personal-menu" class="menu">
    <li class="menu-item>
        $m_icon <a href="#">Link</a>
        <ul class="sub-menu">
            <li>$m_icon <a href="#1">SubLink 1</a></li>
            <li>$m_icon <a href="#2">SubLink 2</a></li>
            <li>$m_icon <a href="#3">SubLink 3</a></li>
        </ul>
    </li>
</ul>

次のようなものを生成したいと思います。

<ul id="menu-personal-menu" class="menu">
    <li class="menu-item>
        <a href="#">Link</a>
        <ul class="sub-menu">
            <li><img src="path/sublinkimg1"> <a href="#1">SubLink 1</a></li>
            <li><img src="path/sublinkimg2"> <a href="#2">SubLink 2</a></li>
            <li><img src="path/sublinkimg3"> <a href="#3">SubLink 3</a></li>
        </ul>
    </li>
</ul>

一般的な考え方は次のとおりです。 ここに画像の説明を入力

いくつかの理由で間違っています。私は高度なカスタム フィールドを知っています: "menu_icon" はおそらくループの外では何も取得できません。表示しているページ。

どうすればこれを達成できるか知っている人はいますか?

4

2 に答える 2

2

すぐに気付くことの 1 つは、余分な一重引用符があり、php がコンテンツを文字通りに翻訳していることです。実際には、変数ではない文字列 '$m_icon' ではなく、$m_icon に含まれる文字列が必要です。

$personal = array(
    'theme_location'  => 'personal',
    'menu'            => 'Personal Menu',
    'before'          => $m_icon, //this line was wrong, single quotes means 'literally this$ $tring'
);

編集:私はあなたがやろうとしていることのために自由にフィルター関数を書きました。乾杯。

function insert_icons($items, $menu, $args){
    //check our menu name so we filter the right one
    if($menu->name=='Personal Menu'){
        //loop through the menu items
        foreach($items as $key => $item){
            //make sure object_id is set (this is the page or post id)
            if(isset($item->object_id) && !empty($item->object_id)){
                //grab the menu icon
                $menu_icon = get_field('menu_icon',$item->object_id);
                //make sure the previous line returned something
                if(isset($menu_icon) && !empty($menu_icon)){
                    //create our image string
                    $m_icon = '<img src="'.$menu_icon.'">';
                    //insert it into the page title
                    $item->title = $m_icon.$item->title;
                }
            }
        }
    }
    return $items;
}
add_filter('wp_get_nav_menu_items','insert_icons',NULL,3);
于 2014-01-03T17:52:28.860 に答える
2

あなたが求めたものとは正確には異なり、私はあなたの問題全体に対する正しい解決策を今のところ持っていませんが、カスタムフィールドをループの外で動作させるのを手伝うことができます:)

このようにループ外で機能するには、フィールド名の後にページIDを設定するだけです

get_field('your-field', $page_ID);

于 2013-12-20T12:02:44.653 に答える