用于wp_list_ages的class=“parent”?

时间:2011-03-12 作者:mathiregister

<div class="menu">
    <ul>
        <?php wp_list_pages(\'exclude=&title_li=\'); ?>
    </ul>
</div>
创建以下输出。。。

<div class="menu">
    <ul>
        <li><a href="#">Page 1</a></li>
        <li><a href="#">Page with Subpages</a>
            <ul class="children">
                <li><a href="#">Page with another subpage</a>
                    <ul class="children">
                        <li><a href="#">subsubpage</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li><a href="#">Page 3</a></li>
        <li><a href="#">Page 4</a></li>
    </ul>
</div>
所有包含子级的页面都有ul class="children" 应用是否可以创建任何函数(或任何其他方式)将类名附加到所有具有子级的页面?在我上面的示例中,只有“包含子页面的页面”及其第一个子页面“包含另一个子页面的页面”应该具有li.parent 应用

这在服务器端是可能的吗?我可以用javascript来实现这一点,但我想知道是否有更好、更干净的方法在服务器端实现这一点?

非常感谢。

2 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

唷!比我想象的要复杂一点-只要过滤器page_css_class 传回$args 这将节省大量工作(可能会将此提交给trac)

Since 3.3 就这么简单!

function add_parent_class( $css_class, $page, $depth, $args )
{
    if ( ! empty( $args[\'has_children\'] ) )
        $css_class[] = \'parent\';
    return $css_class;
}
add_filter( \'page_css_class\', \'add_parent_class\', 10, 4 );
对于那些使用WordPress 3.3之前版本的用户,这里有一个关键点:

/**
 * Extend the default page walker class to append class names for pages that
 * are parents.
 * @uses Walker_Page
 */ 
class My_Page_Walker extends Walker_Page
{
    /**
     * Filter in the classes for parents.
     */
    function _filterClass( $class )
    {
        $class[] = \'parent\'; // change this to whatever classe(s) you require
        return $class;
    }

    /**
     * This is effectively a wrapper for the default method, dynamically adding
     * and removing the class filter when the current item has children.
     */
    function start_el( &$output, $page, $depth, $args, $current_page )
    {
        if ( !empty($args[\'has_children\']) )
            add_filter( \'page_css_class\', array( &$this, \'_filterClass\') );

        parent::start_el( $output, $page, $depth, $args, $current_page );

        if ( !empty($args[\'has_children\']) )
            remove_filter( \'page_css_class\', array( &$this, \'_filterClass\') );
    }
}
我建议把这门课安排在functions.php, 然后,您可以在任何地方使用它。

要使用它,请致电wp_list_pages() 像这样;

// You need to pass the walker argument to wp_list_pages(). You must use an
// array to do this.
wp_list_pages(array(
    \'walker\'   => new My_Page_Walker,
    \'title_li\' => \'\'
));

SO网友:asakka

我想有一个更简单的解决方案,您可以在函数中添加以下过滤器。主题文件夹中的php文件。你不必改变任何其他事情。

add_filter(\'page_css_class\', \'check_parent\', 10, 2 );

function check_parent($css_class, $page) {
    if (wp_list_pages("title_li=&child_of=".$page->ID."&echo=0"))
        array_push($css_class, "parent");
    return $css_class;
}
希望有帮助

结束

相关推荐

在自定义元框中发布摘录...帮助了解正确的php格式

我有一个定制的元框,附在一个帖子类型上,显示客户提交新想法的方式。客户应该用30个字符或更少的字符来总结他们的想法,这似乎是post\\u摘录的一个很好的用途。我对php不太在行(仍在学习中),因此如果您能帮助我正确使用echo语句,我将不胜感激。下面是我的自定义元框。为了简单起见,我去掉了其他一切。帖子摘录将显示在元框中,但任何编辑都不会保存在元框中。我做错了什么?function idea_information() { global $post; // No