web-dev-qa-db-ja.com

ナビゲーションメニュー項目の数え方

ナビゲーションメニュー用のカスタムウォーカーを作成しています。目標は、メニューを以下のように列に分割することです。

enter image description here

$item->menu_orderを見れば、リストのどこにいるのか簡単に判断できます。私が知らないのは、メニューの合計に含まれる項目の数です。

歩行者の中からどうやってそれを理解することができますか?

更新しました:

列を作成する方法は他にもいくつかあると思います。ただし、すべて欠点があります。

  1. CSSフロート。 @sagiveによって以下に示唆されるように、これはすべてのリスト要素を浮動することによって達成されるかもしれません。問題は、リストの順序が変わることです。最初の列を下に移動してから2番目の列に折り返すのではなく、リストは最初の行の4列すべて、次に2行目の4列すべてにまたがることになります。これは順序を崩します。

  2. CSSカラム。 これは ほぼ 完璧な解決策です。 IEがまったくそうでないことを除いて、それは私が欲しいものを正確に私に与えてくれるでしょう。たとえIE 9でも。それは主流のWebサイトには使えません。

  3. jQuery。 クライアントサイドのJavaScriptを使うと、リストをハックアップしてレイアウトを好きなようにレイアウトできます。それは厄介です、そしてそれはjsを無効にしている人々のために壊れます。

  4. PHP。 これは私がこの質問で質問している方法です。リストを4つの別々の番号なしリストに分割し、それぞれをhtmlにダンプしてから、CSSを使用してリストを浮動させて4つの異なる列を作成します。 PHPで生成するのは難しいかもしれませんが、結果はすべてのブラウザで同じに見えます。それが私が信じる最良の選択肢になります。

解決策:

従う人のために、これが私が答えを得るために最後に使用したコードです。

// The menu handle from the register_nav_menu statement in functions.php
$theme_location = 'my-menu-handle';

$theme_locations = get_nav_menu_locations();

$menu_obj = get_term( $theme_locations[$theme_location], 'nav_menu' );

// Echo count of items in menu
echo $menu_obj->count;
7
Axeva

wp_get_nav_menu_objectを呼び出してメニューオブジェクトを取得すると、そのメニューの項目数がわかります。

例:

// Get menu object
$my_menu = wp_get_nav_menu_object( 'your-menu-name-or-slug' );

// Echo count of items in menu
echo $my_menu->count;

それが役立つことを願っています。

11
t31os

あなたは(そして私が失礼している場合は申し訳ありませんが)そのはるかに簡単で簡単だとは思わないでください
ただ浮かぶだけ:left;すべての "李"とそれを持つdivの中にそれらを入れて
イメージとしての背景の構造

例:

<style type="text/css">
.fourPartMenu {

    border: 1px solid #444;
    width: 800px;
    padding: 10px 15px;
}

.fourPartMenu ul {
    list-style: circle; // replace with your img
    padding: 0px;
    margin: 0px;
}

.fourPartMenu ul li {
    float: left;
    width: 190px;
}

</style>

<div class="fourPartMenu">
    <ul>
        <li><a href="#">One</a></li>
        <li><a href="#">Two</a></li>
        <li><a href="#">Three</a></li>
        <li><a href="#">Four</a></li>
        <li><a href="#">Five</a></li>
        <li><a href="#">Six</a></li>
        <li><a href="#">Seven</a></li>
        <li><a href="#">Eight</a></li>
        <li><a href="#">Nine</a></li>
        <li><a href="#">Ten</a></li>
    </ul>
</div>

私はそれを実装するのがはるかに簡単になると思います - しかし..私はあなたの厳しいあなたの後の新鮮なビューが時々助けになるものではないことを私は知っています:)

0
Sagive SEO

私はあなたがすでに解決策を見つけて、それが 正確に あなたが探しているものであるかどうかわからないことを知っています、しかし私はクライアントサイトで使うためにしばらく前にプラグインを書きました。サブメニューとメニュー項目それは高度なナビゲーションメニューと呼ばれています。あなたがそれを使用することになったら、私に機能要求を送ってください。

0
Caio Costa

なぜ array_chunk() という関数を使わないのですか?

完成した<li>タグの配列を作成したと仮定すると、それらを分割して表示するコードは次のようになります。

$columns = array_chunk( $myArray, 4 );
foreach ( $columns as $column ) {
    echo '<li>' . $column . '</ul>';
}
0
M. Sage