2010-05-28 53 views
0

我想修改页面在导航中列出的方式,特别是wp-includes/classes.php中的函数el_start。如何使用walker替换核心功能

我已经第一次直接修改了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中,但这只是把我的页面链接放在标签中。

我希望我有道理。谢谢。

回答

0

如果wp_list_pages()在传递参数之前对其执行任何进一步的代码,那么这将是理想的。

但是,我可以看到,最好的方法,只需使用wp_list_pages()而不通过沃克论证使用你的沃克是这样的;

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); 

UPDATE:

编辑的add_filter调用接受两个参数。

+0

随着编辑的一点点(例如$ args不是一个数组,因此我必须在array_merge之前放置一个is_array条件),这个工作非常好。 我了解代码,非常感谢。 – b2238488 2010-05-28 17:02:34

+0

很高兴帮助:)过滤器'wp_list_pages'将总是将'$ args'作为一个数组传回,所以这不应该是一个问题(查看我的修改后的答案)。 – TheDeadMedic 2010-05-28 17:08:24