用于在帖子标题、帖子内容中显示帖子自定义字段值的快捷代码

时间:2021-03-12 作者:Discover

我想创建一个快捷码,从帖子的自定义字段中提取值,并在帖子标题、帖子内容上解析该值。

因此,如果自定义字段值为Icecream 对于职位1。

在管理端,帖子标题将是Favorite [geo_name], 它将显示为Favorite Icecream.

以下是我目前的代码:

function geo_name_function( $atts ) {

    $atts = shortcode_atts( array(
        \'post_id\' => get_the_ID(),
    ), $atts, \'geo_name\' );

    return get_post_meta( $atts[\'post_id\'], \'field_name\', true );
}

add_shortcode(\'geo_name\', \'geo_name_function\');

add_filter( \'the_title\', function( $geo_name_function ) {
    return do_shortcode( $geo_name_function );
});
我一直有一个问题。

如果“最近的帖子”小部件位于其中一篇帖子上,它会为所有帖子标题显示相同的值。

例如:

第1条

[地理位置名称]值=地理位置1

管理员标题:[geo\\u name]标题呈现标题:geo 1标题

第2条

[地理位置名称]值=地理位置2

管理员标题:[geo\\u name]标题呈现标题:geo 2标题

如果我在文章1页面上,我最近发布的帖子小部件如下所示:

最近发布的帖子

地理位置1标题->;第1条url

地理位置1标题->;第2条url

如果我在第2篇文章页面上,我最近发布的帖子小部件如下所示:

最近发布的帖子

地理2标题->;第1条url

地理2标题->;第2条url

我的PHP知识非常有限,请协助!

2 个回复
最合适的回答,由SO网友:nmr 整理而成

the_title filter 接受两个参数,其中一个是为其调用的帖子的ID。这样应该行得通。

add_filter( \'the_title\', \'se385007_title_filter\', 20, 2 );
function se385007_title_filter( $title, $post_id ) 
{
    $new_title = str_replace( "[geo_name]", "[geo_name post_id=$post_id]", $title );
    return do_shortcode( $new_title );
)

SO网友:iquays

我相信这是意料之中的。get_the_ID() 退货post_ID 从主查询,并在单个页面中返回post_ID 对于该页。过滤帖子标题的方式会影响页面中呈现的所有帖子标题,而不管它们的实际大小post_ID. 由于问题出现在小部件中,因此需要从其查询中获取ID(不是主查询)。

我会尝试使用以下选项(未经测试):

function geo_name_function( $atts ) {

    $atts = shortcode_atts( array(
        \'post_id\' => get_queried_object_id(),
    ), $atts, \'geo_name\' );

    return get_post_meta( $atts[\'post_id\'], \'field_name\', true );

}

相关推荐

我可以将参数传递给Add_ShortCode()函数吗?

正如标题所述,我需要向add_shortcode() 作用换句话说,我传递的那些参数将在的回调函数中使用add_shortcode(). 我该怎么做?请注意,这些与以下结构无关[shortcode 1 2 3] 哪里1, 2, 和3 是用户传递的参数。在我的情况下,参数仅用于编程目的,不应由用户负责。谢谢