在创世纪面包屑中执行WordPress短代码

时间:2018-09-12 15:51:12

标签: php wordpress shortcode breadcrumbs genesis

我创建了一个简短代码 [year] 以动态显示当前年份。我通过使用此过滤器在帖子标题中启用了它:

add_filter( 'the_title', 'do_shortcode' );

Shortcode在帖子标题中成功执行,但显示在面包屑中。我正在使用Genesis Framework,是否有任何方法也可以使其在Genesis面包屑中起作用?

1 个答案:

答案 0 :(得分:0)

像您一样使用the_title过滤器,实际上应该可以正常工作(我刚刚测试并确认它在我的本地站点上正常工作。)

事实上,有时它可能是一个有问题的过滤器,因为人们希望它仅过滤页面标题,但实际上,无论何时从数据库中提取the_title,包括页面标题,面包屑,菜单项名称等

也就是说,如果出于某些原因 无法正常工作,Genesis会提供一个方便的Genesis_Breadcrumb类。最值得注意的是,它具有genesis_breadcrumb_args过滤器,可让您删除“您在这里:”等。如果您使用的主题是实现 Genesis Breadcrumbs ,而不是一些自定义主题,那么您实际上可以使用较少使用的genesis_build_crumbs过滤器。

build_crumbs()方法返回一个页面/帖子名称数组,您可以使用简单的foreach循环或array_map对其进行修改。

执行以下功能:

function so52299149_breadcrumbs( $crumbs ) {
    $new_crumbs = array_map( function($val){
        return do_shortcode( $val );
    }, $crumbs);

    return $new_crumbs;
}
add_filter( 'genesis_build_crumbs', 'so52299149_breadcrumbs' );

它将通过do_shortcode()函数运行$crumbs数组中的每个元素,从而为您提供所需的输出。再次说明,add_filter( 'the_title', 'do_shortcode' ); 应该可以工作-因此,请检查您使用的Child Theme如何实现面包屑,特别是如果上面的功能不起作用-这种情况下可能还会有其他事情发生。