WordPress:为不同简码中的值调用简码
WordPress: Calling a shortcode for a value in a different shortcode
我对此很陌生,所以如果这是一个愚蠢的问题,请放轻松。
我正在构建一个带有事件管理器和 geo 我的 WordPress 插件的站点。我希望用户能够输入他们的自动填充位置(通过 GMW),并让 EM 输出中的日历仅在距该位置一定距离的事件中发生。我已经(通过手持)到了一个点,我有一个简码可以吐出输入位置的坐标。 EM 完整日历短代码采用名为 'near' 的属性,该属性采用坐标并随后输出所需的日历。
当前代码:
[fullcalendar near=[gmw_current_latlng] near_distance=20]
with [gmw_current_latlng]
通常返回用逗号分隔的纬度和经度。通常,near att 取 50.111123、-45.234 等
我的问题是,这种固执己见的方法似乎得不到我想要的东西。同样,我对编码很陌生,了解不多,但我已经研究这个问题好几个星期了,还没有找到答案。我试过很多不同的路线,但这条路让我离我想去的地方很近。
GMW 开发人员对这个问题是这样说的:
"The thing is that I am not even sure if you can pass a value to a
shortcode using another shortcode. I’ve never tried this myself. The
best way would be to use filters and a custom function to “inject” the
coords directly into the calendar function."
如果他是对的,那是不可能的,我不知道如何执行他的第二个建议。希望我能解决这个问题,因为坦率地说,我的网站依赖于它的运行。
正如@Jeppe 提到的,你可以做到 Nested Shortcodes:
[shortcode_1][shortcode_2][/shortcode_1]
但是解析器不喜欢将短代码值作为其他短代码中的属性。
听起来您依赖于一些插件及其简码,所以我不建议编辑这些简码 - 但如果您查看 Shortcode API,添加您自己的简码非常容易。为简单起见,此示例将不包含确保短代码 exist/plugins 已安装等的 "proper" 方法,而只是假定它们已安装。
// Register a new shortcode called [calendar_with_latlng]
add_shortcode( 'calendar_with_latlng', 'calendar_with_latlng_function' );
// Create the function that handles that shortcode
function calendar_with_latlng_function( $atts ){
// Handle default values and extract them to variables
extract( shortcode_atts( array(
'near_distance' => 20
), $atts, 'calendar_with_latlng' ) );
// Get the current latlng from the gmw shortcode
$gmw_current_latlng = do_shortcode( '[gmw_current_latlng]' );
// Drop that value into the fullcalendar shortcode, and add the default (or passed) distance as well.
return do_shortcode( '[fullcalendar near='. $gmw_current_latlng .' near_distance='. $near_distance .']' );
}
如果 [gmw_current_latlng]
returns 为您的 [fullcalendar]
简码提供了可用的格式,您现在应该可以使用结合了两者的新简码:[calendar_with_latlng]
或者您也可以添加near_distance
属性:[calendar_with_latlng near_distance=44]
.
您只需要将上述功能放入您的 functions.php
,创建一个 Simple Plugin, or save them to a file and add it in your Must-Use Plugins 目录。
当然,您可以将一个短代码作为另一个短代码的属性传递。唯一的问题是,属性不通过 [ 或 ]。所以你已经用他们的 html 条目替换了将他们括起来的转换。
将 [
替换为 [
,将 ]
替换为 ]
,您应该没问题。这是一个例子。
function foo_shortcode( $atts ) {
$a = shortcode_atts( array(
'foo' => "Something",
'bar' => '',
), $atts );
$barContent = html_entity_decode( $atts['bar'] );
$barShortCodeOutput = do_shortcode($barContent);
return sprintf("Foo = %s and bar = %s", $a['foo'], $barShortCodeOutput);
}
add_shortcode( 'foo', 'foo_shortcode' );
function bar_shortcode( $atts ) {
return "Output from bar shortcode";
}
add_shortcode( 'bar', 'bar_shortcode' );
然后把它放在你的编辑器上
[foo bar=[bar] ]
看到我们正在传递一个短代码 [bar]
作为 [foo]
的属性。所以输出应该是 -
Foo = Something and bar = Output from bar shortcode
我知道它看起来有点恶心,但它可以解决问题。
我对此很陌生,所以如果这是一个愚蠢的问题,请放轻松。
我正在构建一个带有事件管理器和 geo 我的 WordPress 插件的站点。我希望用户能够输入他们的自动填充位置(通过 GMW),并让 EM 输出中的日历仅在距该位置一定距离的事件中发生。我已经(通过手持)到了一个点,我有一个简码可以吐出输入位置的坐标。 EM 完整日历短代码采用名为 'near' 的属性,该属性采用坐标并随后输出所需的日历。
当前代码:
[fullcalendar near=[gmw_current_latlng] near_distance=20]
with [gmw_current_latlng]
通常返回用逗号分隔的纬度和经度。通常,near att 取 50.111123、-45.234 等
我的问题是,这种固执己见的方法似乎得不到我想要的东西。同样,我对编码很陌生,了解不多,但我已经研究这个问题好几个星期了,还没有找到答案。我试过很多不同的路线,但这条路让我离我想去的地方很近。
GMW 开发人员对这个问题是这样说的:
"The thing is that I am not even sure if you can pass a value to a shortcode using another shortcode. I’ve never tried this myself. The best way would be to use filters and a custom function to “inject” the coords directly into the calendar function."
如果他是对的,那是不可能的,我不知道如何执行他的第二个建议。希望我能解决这个问题,因为坦率地说,我的网站依赖于它的运行。
正如@Jeppe 提到的,你可以做到 Nested Shortcodes:
[shortcode_1][shortcode_2][/shortcode_1]
但是解析器不喜欢将短代码值作为其他短代码中的属性。
听起来您依赖于一些插件及其简码,所以我不建议编辑这些简码 - 但如果您查看 Shortcode API,添加您自己的简码非常容易。为简单起见,此示例将不包含确保短代码 exist/plugins 已安装等的 "proper" 方法,而只是假定它们已安装。
// Register a new shortcode called [calendar_with_latlng]
add_shortcode( 'calendar_with_latlng', 'calendar_with_latlng_function' );
// Create the function that handles that shortcode
function calendar_with_latlng_function( $atts ){
// Handle default values and extract them to variables
extract( shortcode_atts( array(
'near_distance' => 20
), $atts, 'calendar_with_latlng' ) );
// Get the current latlng from the gmw shortcode
$gmw_current_latlng = do_shortcode( '[gmw_current_latlng]' );
// Drop that value into the fullcalendar shortcode, and add the default (or passed) distance as well.
return do_shortcode( '[fullcalendar near='. $gmw_current_latlng .' near_distance='. $near_distance .']' );
}
如果 [gmw_current_latlng]
returns 为您的 [fullcalendar]
简码提供了可用的格式,您现在应该可以使用结合了两者的新简码:[calendar_with_latlng]
或者您也可以添加near_distance
属性:[calendar_with_latlng near_distance=44]
.
您只需要将上述功能放入您的 functions.php
,创建一个 Simple Plugin, or save them to a file and add it in your Must-Use Plugins 目录。
当然,您可以将一个短代码作为另一个短代码的属性传递。唯一的问题是,属性不通过 [ 或 ]。所以你已经用他们的 html 条目替换了将他们括起来的转换。
将 [
替换为 [
,将 ]
替换为 ]
,您应该没问题。这是一个例子。
function foo_shortcode( $atts ) {
$a = shortcode_atts( array(
'foo' => "Something",
'bar' => '',
), $atts );
$barContent = html_entity_decode( $atts['bar'] );
$barShortCodeOutput = do_shortcode($barContent);
return sprintf("Foo = %s and bar = %s", $a['foo'], $barShortCodeOutput);
}
add_shortcode( 'foo', 'foo_shortcode' );
function bar_shortcode( $atts ) {
return "Output from bar shortcode";
}
add_shortcode( 'bar', 'bar_shortcode' );
然后把它放在你的编辑器上
[foo bar=[bar] ]
看到我们正在传递一个短代码 [bar]
作为 [foo]
的属性。所以输出应该是 -
Foo = Something and bar = Output from bar shortcode
我知道它看起来有点恶心,但它可以解决问题。