2016-10-11 7 views
0

私は自分のページに2つのナビゲーションバーを持っています。 1つはメインのヘッダーで、もう1つは各ページの上部に表示されます。ここでどのようにWordPressのナビゲーションでトップの親ページを非表示にする

は、それがどのように見えるかです: Here is how it looks:

下ナビゲーションバーは、トップナビゲーションバー内のページのchildpages(赤1)を示すべきです。 下のナビゲーションバーのページの1つに子がある場合は、下のナビゲーションバーの下に新しいulとして表示されます。

「メイン」ページの1つ(上部にリンクされているページ)上にある場合は、上部のナビゲーションバーのリンクが下部のナビゲーションバーに表示され、想定されているリンク表示されるのは下のナビゲーションバーの下にあるulに表示されます。このよう

:私はこれが起こる理由を理解 ​​

(フォント色のリンクは赤が子供の子供である)、私は問題を解決する方法がわかりません。私は一番上の親ページにいなければ、兄弟姉妹を見せたいだけです。

もう一度やり直してみてください。 トップの親ページにある場合、子供を表示してください。 子供のページの場合は、兄弟姉妹と孫を表示してください。 孫のページに兄弟姉妹と親を表示している場合。ここで

は私のコードです:

<?php 

$sibblings = wp_list_pages(array(
    'title_li' => '', 
    'child_of' => $post->post_parent, 
    'echo'  => 0, 
    'sort_column' => 'menu_order, post_title' 
)); 

$children = wp_list_pages(array(
    'title_li' => '', 
    'child_of' => $post->ID, 
    'echo'  => 0, 
    'sort_column' => 'menu_order, post_title' 
)); 




?> 

    <ul class="page-nav hidden-sm hidden-xs"> 


     <?php echo $sibblings; ?> 
</ul> 


<ul class="page-nav-children hidden-sm hidden-xs"> 
    <?php echo $children; ?> 
</ul> 

更新

わかりましたので、私は何か新しいものを試してみました。今ではトップの親は表示されませんが、子供がいるページ(トップ・ペアレント・グランド・チルドレン)をクリックすると表示されません。あなたが見て、$ sibblingsのアレイ内の任意のオブジェクトが現在のポストと同じPOST_TITLEを持っているかどうかを確認することができます

<?php 

    if ($post->post_parent) { 
     $ancestors=get_post_ancestors($post->ID); 
     $root=count($ancestors)-1; 
     $parent = $ancestors[$root]; 
    } else { 
     $parent = $post->ID; 
    } 

    $sibblings = wp_list_pages("title_li=&child_of=". $parent ."&echo=0"); 

    $children = wp_list_pages(array(
     'title_li' => '', 
     'child_of' => $post->ID, 
     'echo'  => 0, 
     'sort_column' => 'menu_order, post_title' 
    )); 

    ?> 

    <?php if ($sibblings) { ?> 
    <ul class="page-nav hidden-sm hidden-xs"> 
     <?php echo $sibblings; ?> 
    </ul> 
<?php } else {?> 
    <ul class="page-nav hidden-sm hidden-xs"> 
     <?php echo $sibblings; ?> 
    </ul> 
    <ul class="page-nav-children hidden-sm hidden-xs"> 
     <?php echo $children; ?> 
    </ul> 

<?php } ?> 

答えて

0

$childrenvar_dump

新しいコードに空戻ってきます。存在する場合は、unsetを使用して配列から削除します。そうすれば、ナビゲーションには表示されません。あなたは解除を使いたくなかったが、代わりに新しい配列に現在のポストではありませんポストのすべてをプッシュする配列のプッシュを使用する場合は、次の

$current_post = get_post(); 
    $sibblings = wp_list_pages(array(
    'title_li' => '', 
    'child_of' => $post->post_parent, 
    'echo'  => 0, 
    'sort_column' => 'menu_order, post_title' 
    )); 

    foreach ($sibblings as $key => $sibbling) { 
     if ($sibbling->post_title != $current_post->post_title) { 
      unset($sibblings[$key]); 
     } 
    } 

です。上記は動作しません

$current_post = get_post(); 
    $sibblings = wp_list_pages(array(
    'title_li' => '', 
    'child_of' => $post->post_parent, 
    'echo'  => 0, 
    'sort_column' => 'menu_order, post_title' 
    )); 
    $sibblings_only_array = array(); 
    foreach ($sibblings as $sibbling) { 
     if ($sibbling->post_title != $current_post->post_title) { 
      array_push($sibblings_only_array, $sibbling); 
     } 
    } 

場合は、あなたのsibblings配列はので、私はデータのためにそこにあるまさに見ることができてダンプを追加します。ありがとう!

+0

しかし、それは削除される予定の同じタイトルの投稿ではありません。これは、すべてのページの一番上の親ページです。赤いヘッダーの5つのリンクが一番上にあります。彼らは今のように灰色の領域に表示されることはありません。 – teninchhero

+0

OK、もう一度やり直してみてください: トップの親ページにある場合は、子どもを表示してください。 子供のページの場合は、兄弟姉妹と孫を表示してください。 孫のページに兄弟姉妹と親を表示している場合。一番上の親を表示しない。 – teninchhero

+0

sibblings配列をダンプしてコードに追加します。 –

関連する問題