【问题标题】:Execute a WordPress shortcode in Genesis breadcrumbs在 Genesis 面包屑中执行 WordPress 简码
【发布时间】:2018-09-12 15:51:11
【问题描述】:
我创建了一个短代码 [year] 来动态显示当前年份。我使用这个过滤器在帖子标题中启用了它:
add_filter( 'the_title', 'do_shortcode' );
短代码在帖子标题中成功执行,但在面包屑中显示。我正在使用 Genesis 框架,所以有什么方法可以让它在 Genesis 面包屑中也能工作吗?
【问题讨论】:
标签:
php
wordpress
shortcode
breadcrumbs
genesis
【解决方案1】:
像您一样使用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' ); 应该可以工作 - 所以检查你正在使用的子主题是如何实现面包屑的,特别是如果上面的功能不起作用 - 如果是这样的话可能还有其他原因。