如何创建可以传递值的可重复使用的内容片段?

时间:2014-03-17 作者:Jan Paul

下面是场景。。。

对于本地站点,我有不同的城市特定页面。这些页面的第一段将是唯一的,并与特定城市相关。但之后的内容将是相同的,除了城市名称。。。

因此,我要做的是创建一个内容片段,其中包含每个城市相同的内容,但我还需要能够向该内容片段传递一个值(城市名称)。

例如,如果我的内容片段包含以下文本:“CITYNAME是一个美丽的城市”,则应将CITYNAME替换为我传递给内容片段的值,例如Dallas。

使用wordpress实现这一目标的不同方式有哪些?插件或自定义代码。

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

实现这一目标的最佳方法是使用shortcode 或afilter.

我倾向于在这个场景中使用短代码,因为您可以灵活地在自动生成的内容后面添加另一个段落,这作为一个过滤器更加复杂。此外,我不知道您的城市是否是自定义的帖子类型,或者WordPress是否有其他方法可以知道这是一个城市而不是其他内容(使用meta_value, page_template, ...).

创建内容的函数

但是,生成内容的函数相当简单。我补充道__() 使内容可翻译,就像对待每个硬编码字符串一样。

function f711_generate_city_texts( $cityname ) { // function receives cityname as variable
    return $cityname . __( \'is a beautiful city\', \'f711_wpse\' ); //returns the custom content with the cityname built in.
}
现在,我们需要通过将此函数添加到内容。

添加短代码

我创建了一个短代码函数,并添加了短代码:

add_shortcode( \'f711_citytext\', \'f711_citytext_shortcode\' );


function f711_citytext_shortcode( $atts ) {

    extract( shortcode_atts( array( 
        \'city\' => get_the_title(), // define city as a attribute for the shortcode, with the title as standard value
    ), $atts ) );

    return f711_generate_city_texts( $city );
}
在您的内容中,您现在可以使用

[f711_citytext city="yourcityname"]
或者你可以离开city-属性,如果在循环中,则为get_the_title() 用作函数中的标准值。

添加一个过滤器当然,您也可以添加一个过滤器来自动添加文本,正如我提到的,在这种情况下,您需要一种方法来知道此内容属于某个城市。

我将使用meta_value 包含bool 具有f711_iscity 设置为true.

add_filter( \'the_content\', \'f711_citytext_filter\', 10, 1 );

function f711_citytext_filter ( $content ) {
    if ( get_post_meta( get_the_ID(), \'f711_iscity\', true ) === true ) 
        return $content . f711_generate_city_texts( get_the_title() );
    return $content;
}
此函数检查是否设置f711_iscitytrue, 并返回包含附加生成文本的内容。否则,内容将保持不变。

结论

出于灵活性的原因,在这种情况下,我更喜欢shortcode soluiton。

结束

相关推荐