PHP Wordpress选择性页面层次结构

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP Wordpress选择性页面层次结构相关的知识,希望对你有一定的参考价值。

funtions.php:
/**
 * 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;
    }
}


Insert into template:
/**
 * This will walk the navigation tree but exclude the top level pages.
 * handy for left-hand-nav links
 */
<?php
    $root_page_id = ( empty( $post->ancestors ) ) ? $post->ID : end( $post->ancestors );
    $walker = new Razorback_Walker_Page_Selective_Children();
    wp_list_pages( array(
        'title_li' => '',
        'sort_column' => 'menu_order',
        'child_of' => $root_page_id,
        'walker' => $walker,
    ) );
?>

以上是关于PHP Wordpress选择性页面层次结构的主要内容,如果未能解决你的问题,请参考以下文章

WordPress中具有自定义帖子类型的单个页面的层次结构

Wordpress没有使用home.php而是使用index.php作为帖子页面。

Wordpress 不使用 home.php 而是使用 index.php 作为帖子页面。

php ASCII WordPress模板层次结构

php 改进的WordPress模板层次结构

PHP Wordpress类别层次结构