1

次のページ構造があります。

  • メインページ (id 5)
    • サブページ 1
      • 子供のページ
      • 子供のページ
    • サブページ 2
      • 子供のページ
      • 子供のページ

サイドバー メニューを表示するには、次のコードを使用します。

 <?php wp_list_pages('child_of=5&title_li=&link_before=<span>&link_after=</span>'); ?>

このコードはリストのみを表示します。表示する必要があります

  • メインページではサブページのみ表示
  • サブページにいるとき、現在表示しているサブページのサブページと子ページを表示する
  • 子ページでは、現在表示している親サブページの表示サブページと子ページを表示します

これを行う方法はありますか?手伝ってくれてありがとう

4

3 に答える 3

0

私は働くコードを見つけました、私にとって魅力のように働きます:

/**
 * Create HTML list of pages.
 *
 * @package Razorback
 * @subpackage Walker
 * @author Michael Fields <michael@mfields.org>
 * @copyright Copyright (c) 2010, Michael Fields
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 *
 * @uses Walker_Page
 *
 * @since 2010-05-28
 * @alter 2010-10-09
 */
class Razorback_Walker_Page_Selective_Children extends Walker_Page {
    /**
     * Walk the Page Tree.
     *
     * @global stdClass WordPress post object.
     * @uses Walker_Page::$db_fields
     * @uses Walker_Page::display_element()
     *
     * @since 2010-05-28
     * @alter 2010-10-09
     */
    function walk( $elements, $max_depth ) {
        global $post;
        $args = array_slice( func_get_args(), 2 );
        $output = '';

        /* invalid parameter */
        if ( $max_depth < -1 ) {
            return $output;
        }

        /* Nothing to walk */
        if ( empty( $elements ) ) {
            return $output;
        }

        /* Set up variables. */
        $top_level_elements = array();
        $children_elements  = array();
        $parent_field = $this->db_fields['parent'];
        $child_of = ( isset( $args[0]['child_of'] ) ) ? (int) $args[0]['child_of'] : 0;

        /* Loop elements */
        foreach ( (array) $elements as $e ) {
            $parent_id = $e->$parent_field;
            if ( isset( $parent_id ) ) {
                /* Top level pages. */
                if( $child_of === $parent_id ) {
                    $top_level_elements[] = $e;
                }
                /* Only display children of the current hierarchy. */
                else if (
                    ( isset( $post->ID ) && $parent_id == $post->ID ) ||
                    ( isset( $post->post_parent ) && $parent_id == $post->post_parent ) ||
                    ( isset( $post->ancestors ) && in_array( $parent_id, (array) $post->ancestors ) )
                ) {
                    $children_elements[ $e->$parent_field ][] = $e;
                }
            }
        }

        /* Define output. */
        foreach ( $top_level_elements as $e ) {
            $this->display_element( $e, $children_elements, $max_depth, 0, $args, $output );
        }
        return $output;
    }
}
于 2013-04-24T21:31:56.290 に答える
0

このHierarchical Pages Widgetを使用してみてください。あなたが望むものを正確にサポートしているかどうかはわかりませんが、プロジェクトの 1 つで使用しましたが、うまく機能しました。

このウィジェットは次のことを行います。

折りたたみ式の階層ページ/カテゴリ/分類リストを作成します: トップレベル; 現在の祖先、子供、および/または兄弟

于 2013-04-24T08:18:56.643 に答える