如何使用walker替代核心功能

问题描述 投票:0回答:1

我想修改导航中列出页面的方式,特别是 wp-includes/classes.php 中的 el_start 函数。

我首先直接修改了classes.php,它工作得很好,但现在我想恢复classes.php并将修改移出wordpress的内部文件。

我写了一个walker类,我想使用但我不知道如何使用它。我想将当前的调用 wp_list_pages() 替换为:

 $walker_pages = new Walker_Page_CustomTitle;
 wp_list_pages(array('walker' => $walker_pages, 'title_li' => '', 'depth' => '1'));

我尝试过使用这样的过滤器:

function wp_list_pages_custom() {
     $walker_pages = new Walker_Page_CustomTitle;
     wp_list_pages(array('walker' => $walker_pages, 'title_li' => '', 'depth' => '1'));
}
add_filter('widget_area_primary_aside', 'wp_list_pages_custom');

但是使用此过滤器,该网站将不再加载。

教程here说我应该将此代码放在 header.php 中,但这只是将我的页面链接放在标签中。

我希望我说得有道理。谢谢。

php wordpress wordpress-theming
1个回答
0
投票

如果

wp_list_pages()
在执行任何进一步的代码之前对传递的参数有一个过滤器,那就太理想了。

但是,我能看到的最好的方法是,简单地使用

wp_list_pages()
而不传递 walker 参数使用 your walker 就像这样;

function my_custom_wp_pages($list, $args)
{
    $walker = new Walker_Page_CustomTitle;
    $args = array_merge($args, array('walker' => $walker, 'echo' => false);

    remove_filter('wp_list_pages', 'my_custom_wp_pages'); // avoid endless loop

    $list = wp_list_pages($args);

    add_filter('wp_list_pages', 'my_custom_wp_pages'); // add it back

    return $list;
}
add_filter('wp_list_pages', 'my_custom_wp_pages', 5, 2);

更新:

编辑了

add_filter
调用以接受两个参数。

© www.soinside.com 2019 - 2024. All rights reserved.