间接修改重载属性WP_POST::$ANISTORS不起作用

时间:2016-11-02 作者:gaurav

将WordPress更新到最新版本后,我发现以下错误:

间接修改重载属性WP\\u Post:$祖先无效

 <ul id="mainwalker">
            <?php
            if(!$post->post_parent){
                $children = wp_list_pages(array(
                    \'sort_column\' => \'menu_order\',
                    \'title_li\'    => \'\',
                    \'echo\'        => 1,
                    \'walker\' => new Sidebar_Custom_Walker()
                ));
            }else{
                if($post->ancestors)
                {
                    $ancestors = end($post->ancestors);

                    $children = wp_list_pages(array(
                        \'sort_column\' => \'menu_order\',
                        \'title_li\'    => \'\',
                        \'echo\'        => 1,
                        \'child_of\'=>$ancestors,
                        \'walker\' => new Sidebar_Custom_Walker()
                    ));
                }
            }

            if ($children) { ?>
                <?php echo $children; ?>
            <?php } ?>
        </ul>

1 个回复
SO网友:cybmeta

据我所知WP_Post::$ancestors 动态创建。因此,如果您试图在它不存在时访问它,PHP会调用magic method __get on that object 并尝试获取该属性的值。

由于该属性是通过DINAMICAL创建的,因此不能像在此行中那样对其进行修改(end() 函数修改数组的内部指针位置):

end($post->ancestors);
如果__get 方法通过引用返回,但您不能修改核心代码(而且我不确定在WP\\u Post::\\u get中通过引用返回是否被批准),因此您应该尝试使用Post祖先修改您自己的变量:

        if(!$post->post_parent){
            $children = wp_list_pages(array(
                \'sort_column\' => \'menu_order\',
                \'title_li\'    => \'\',
                \'echo\'        => 1,
                \'walker\' => new Sidebar_Custom_Walker()
            ));
        }else{

            $ancestors = $post->ancestors;
            // Using get_post_ancestors() should work as well
            // $ancestors = get_post_ancestors();

            if( !empty( $ancestors ) )
            {
                $ancestors = end($ancestors);

                $children = wp_list_pages(array(
                    \'sort_column\' => \'menu_order\',
                    \'title_li\'    => \'\',
                    \'echo\'        => 1,
                    \'child_of\'=>$ancestors,
                    \'walker\' => new Sidebar_Custom_Walker()
                ));
            }
        }

相关推荐

如何修改WP_INCLUDE/BLOCKS/LATEST_posts.php

我是WordPress开发的初学者,希望得到一些帮助。我在一个简单的WordPress网站上工作。基本上,用户希望在主页上显示最新的帖子。我使用了最新帖子块,并将其设置为显示整个帖子内容,现在用户不希望帖子标题链接到单个帖子页面(因为帖子的内容显示在主页上)。如何安全地修改模板文件,使其像h2标记一样使用,而不是在主题中使用的href标记。我知道您可以创建子主题并修改wp_content 文件,但我不确定如何处理中的文件wp_include. 我读到一些关于修改functions.php 但我不确定,如果