web-dev-qa-db-ja.com

サイドバーの子ページメニュー

私は私のWordpressサイトのサブ/チャイルドページのためにドロップダウンメニューを使いたくないです、私はページが親ページのサイドバーにリストされていることを望みます。

これは私がこれまでに手に入れたコードです(下)が、サイドバーには何も表示されませんので、助けていただければ幸いです。

これは私のfunctions.phpにあります:

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' );
    else
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
    if ( $childpages ) {
        $string = '<ul>' . $childpages . '</ul>';
    }
    return $string;
}

add_shortcode('wpb_childpages', 'wpb_list_child_pages');

そしてこれはpage.phpの呼び出しです(sidebar.phpも試してみました):

<?php wpb_list_child_pages(); ?>

何がうまくいかないのですか?

別のメモとして、私は親ページがナビゲーションに表示されるべきだと思ったので、(メインナビゲーションにあったとしても)簡単に戻ることができます。最初のリスト項目を親ページにする方法はありますか?

さらに別の注意点として、CSSなしでドロップダウンをオフ/非表示にする唯一の方法は、[外観]> [メニュー]でカスタムメニューを作成して子をオフにすることでした。他にもっと良い方法はありますか?

前もって感謝します!

_編集_

出力しようとしているマークアップを表示するためのアップデートを追加すると思いました。タイトル/親ページもそこに入れる必要があることに気付きました!これがマークアップの例です。

<nav class="page-nav">
    <h3>Navigation Title</h3>
    <ul>
        <li><a href="#">Parent page</a></li>
        <li><a href="#">Child page #1</a></li>
        <li><a href="#">Child page #2</a></li>
        <li><a href="#">Child page #3</a></li>
    </ul>
</nav>
2
user1406440

関数の内容を出力しようとするとき、データを他の関数(あるいは送りたいもの)に渡したいのか、それとも直接ブラウザにそれを印刷したいのかに気付かなければなりません。

あなたがreturnを使うならば、あなたの関数はデータを返すので、あなたは以下のように二次関数でそれらを使うことができます:

second_function(first_function($input));

単にコンテンツをブラウザに出力したい場合は、echoの代わりにreturnまたはprint_rを使用してください。あなたの場合はechoを使うことをお勧めします。ただし、ショートコード関数を作成している間はechoを使用しないでください。望まない方法でテキストを出力します。

WordPressの問題に戻りましょう。

提供されている構造体については、以下の関数を使用します。

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' );
    else
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
    if ( $childpages ) {
        $string = '
        <nav class="page-nav">
            <h3>Navigation Title</h3>
               <ul>
                   <li><a href="'.get_permalink($post->post_parent).'">'.get_the_title($post->post_parent).'</a></li>'
                   .$childpages.
               '</ul>
        </nav>';
    }
    return $string;
}

add_shortcode('wpb_childpages', 'wpb_list_child_pages');

さて、あなたが望むところにあなたのメニューを出力するためにこの関数を使います:

<?php echo wpb_list_child_pages(); ?>

またはショートコードをする:

echo do_shortcode( ' [wpb_childpages] ' );

テキストウィジェットでショートコードを使うこともできます。

[wpb_childpages]

すべて同じ結果が得られます。

2
Jack Johansson