2017-04-04 20 views
0

複雑なWordPressメニューのカスタムコードを作成しようとしています。 のは、私はこのようなメニューwordpressのメニュー構造を持っていると仮定しましょう - Granchildが最後のノードであり、これ以上の子ノードがありません:だけ親1、利用者がホームページ上にあるとき :カスタム階層WordPressメニュー - 子ページまたは現在アクティブなページのみを表示

Parent1 
-Child1 
    --Grandchild11 
    --Grandchild12 
-Child2 
    --Grandchild21 
    --Grandchild22 
Parent2 

私のタスクは、このようなものを作成することですおよびParent2がメニューリスト項目として表示されます。 ユーザーがexをクリックしたとき。親1へとクリックしたページののみの子どもページ、だけでなく、最初のレベルの項目(リスト項目のインラインなどの静的、)彼はこのようなメニュー構造を見ることができるページを入力します。

|---------Parent1---------|--------Parent2-----------| 
    |---Child1---||---Child2---|-----ChildN----| 
その後

のは、そのユーザーがクリックしたとしますが新しく作成されたリボンのChild1。そのページのロードユーザーは次の構造を参照する必要がある場合 :

|---------Parent1---------|--------Parent2-----------| 
     |---Child1---||---Child2---|-----ChildN----| 
      |---Grandchild11---||---Grandchild12---| 

を今すぐユーザーは、リストから任意の孫要素をクリックすることができ、そして時にそのページに、子供を所有していたページは、同じメニューを表示する必要があることを負荷上のグラフのような構造になります。

私はこのコード(ショート文がメニューの後にヘッダにあるか)を介してそれを実装しようとした:

function wpb_list_child_pages() { 
global $post; 
if (is_page() && $post->post_parent)  
    {$childpages = wp_list_pages('sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0&depth=1');} 
else 
    $childpages = wp_list_pages('sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0&depth=1'); 
if ($childpages) { 
    $string = '<ul class="menidva"><center>' . $childpages . '</center></ul><br>'; 
} 

return $string; 
} 

が、必要に応じて、それが動作していません。 誰もがドロップダウンのスタイリングで実際の構造を見ることができるだけのために私はワードプレスメニューを保った。ここで

は、テストへのサイトへのリンクです:LINK

誰がこれで私を助けてくださいことはできますか?

+0

CSSを試しましたか?使用する場合: > body_class();関数はbodyタグにたくさんのクラスを追加し、CSSセレクタとして使うことができます。探しているものを達成するのに十分なクラスがあるかどうかはわかりませんが、役立つかもしれません。 「あなたが「必要に応じて動作していません」と言うと、ここで何をしようとしているのかはっきりしていません。 – Paul

+0

リンクが付いていますか?それは私が書いたと描画することによって動作していない...第3レベルを示していない – Lanchushki

+0

はい私はリンクを見たが、あなたの機能は明らかではなかった。このページでは、http://development.leadwebtech.com/photography/lenses/インラインナビにLens2 |レンズ1 – Paul

答えて

0

申し訳ありませんが、解決するのは簡単なことではありません。私はあなたのコードを少し絡み合わなければならなかったので、ローカルでテストすることができました。あなたが望むものを正確に達成できないかもしれませんが、以下の答えは、else ifステートメントが必要なもの。

<?php 

function wpb_list_child_pages() { 
global $post; 

$ancestors = get_post_ancestors($post->ID); 
$root_parent_page = end($ancestors); 
    echo $root_parent_page; 

if(is_page() && (count($ancestors) >= 2)){ 
    echo 'YOU ARE ON A GRAND CHILD PAGE'; 
    echo '<ul>'; 
     wp_list_pages('sort_column=menu_order&title_li=&child_of=' . $root_parent_page . '&echo=1&depth=1'); 
    echo '</ul>'; 
    echo '<ul>'; 
     wp_list_pages('sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=1&depth=1'); 
    echo '</ul>'; 
} 
elseif (is_page() && $post->post_parent){ 
    echo 'YOU ARE ON A CHILD PAGE'; 
    echo '<ul>'; 
     wp_list_pages('sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=1&depth=1'); 
    echo '</ul>'; 
} 
else{ 
    echo 'YOU ARE ON A PARENT PAGE'; 
    echo '<ul class="menidva">'; 
     wp_list_pages('sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=1&depth=1'); 
    echo '</ul>'; 
} 


} 

wpb_list_child_pages(); 

?> 
+0

それははるかに良いです!今、私のウェブサイトのリンクを確認してください。写真をクリックすると、レンズとカメラが表示されます。それからレンズをクリックすると、レンズ1とレンズ2がタイプされますが、これは完璧ですが、それ以前に親メニューを表示していません(カメラとレンズ)。例えば孫を開くためにlense1をクリックすると、表示する必要があるように表示されます。あなたはコードの一部を私にチェックしてください。本当に助けてくれてありがとう! – Lanchushki

+0

これは今ではうまくいっているようですが、あなたはそれを自分で修正するか、正しく理解していませんか? – Paul

関連する問題