首页 > 解决方案 > 在 Genesis 面包屑中执行 WordPress 简码

问题描述

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

add_filter( 'the_title', 'do_shortcode' );

短代码在帖子标题中成功执行,但在面包屑中显示。我正在使用创世纪框架,所以有什么方法可以让它在创世纪面包屑中工作吗?

标签: phpwordpressshortcodebreadcrumbsgenesis

解决方案


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

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

也就是说,如果由于某种原因它不能Genesis_Breadcrumb正常工作,Genesis 有一个方便的类。最值得注意的是,它具有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' );

它将$crumbs通过do_shortcode()函数运行数组中的每个元素,为您提供所需的输出。同样,您拥有它的方式add_filter( 'the_title', 'do_shortcode' ); 应该可以正常工作-因此请检查您正在使用的子主题是如何实现面包屑的,尤其是在上述功能不起作用的情况下-如果是这种情况,则可能还有其他原因。


推荐阅读