在简码中使用简码(插入 post 元字段值)
Use Shortcode in Shortcode (insert post meta field value)
我有一个来自插件的短代码,我无法修改...这个短代码有一些参数,例如。 [some_shortcode value=""] - 我试图从 post meta 输入值作为这个短代码的参数,但它不起作用 - 这是代码...
这是我创建的短代码的代码(它 returns 来自 post 元的值)
function test_shortcode( $string ) {
extract( shortcode_atts( array(
'string' => 'string'
), $string));
// check what type user entered
switch ( $string ) {
case 'first':
return get_post_meta( get_the_ID(), 'post_meta_one', true );
break;
case 'second':
return get_post_meta( get_the_ID(), 'post_meta_two', true );
break;
}
}
add_shortcode('test', 'test_shortcode');
现在我想将这个简码插入到我页面上插件的现有简码中。
For example: [some_shortcode value='[test string="first"]']
它不是这样工作的。感谢您的帮助!
无法像您提供的那样将简码插入现有简码中。您的简码应该有机会处理提供的简码作为属性。
您应该在短代码中使用 do_shortcode()
。你有
[some_shortcode value='[test string="first"]']
并希望在您的短代码中使用 [test string="first"]
的返回值 first
。您的代码将是:
function some_shortcode($atts){
$atts = shortcode_atts(array(
'value' => ''
), $atts);
$second_shortcode_value = do_shortcode($atts['value']);
//some code
return $something;
}
add_shortcode('some_shortcode', 'some_shortcode');
变量 $second_shortcode_value
将包含 [test string="first"]
简码的输出。
P.S。避免使用 exctract()
函数,因为它可以 make your code hard readable.
编辑:
这是将属性动态添加到 [some_shortcode]
value
属性的解决方案。
function my_shortcode($atts){
$atts = shortcode_atts(array(
'str' => ''
), $atts);
switch ( $atts['str'] ) {
case 'first':
$modified = get_post_meta( get_the_ID(), 'leweb_gender', true );
break;
default:
$modified = '';
}
if(!empty($modified)) {
$second_shortcode_with_value = do_shortcode("[some_shortcode value='$modified']");
}else{
$second_shortcode_with_value = do_shortcode('[some_shortcode]');
}
return $second_shortcode_with_value;
}
add_shortcode('some_shrt', 'my_shortcode');
我们在做什么:我们不是调用 [some_shortcode value='something']
,而是将 something
生成到我们的短代码中,并获取类似
的内容
[some_shrt str="first"]
我有一个来自插件的短代码,我无法修改...这个短代码有一些参数,例如。 [some_shortcode value=""] - 我试图从 post meta 输入值作为这个短代码的参数,但它不起作用 - 这是代码...
这是我创建的短代码的代码(它 returns 来自 post 元的值)
function test_shortcode( $string ) {
extract( shortcode_atts( array(
'string' => 'string'
), $string));
// check what type user entered
switch ( $string ) {
case 'first':
return get_post_meta( get_the_ID(), 'post_meta_one', true );
break;
case 'second':
return get_post_meta( get_the_ID(), 'post_meta_two', true );
break;
}
}
add_shortcode('test', 'test_shortcode');
现在我想将这个简码插入到我页面上插件的现有简码中。
For example: [some_shortcode value='[test string="first"]']
它不是这样工作的。感谢您的帮助!
无法像您提供的那样将简码插入现有简码中。您的简码应该有机会处理提供的简码作为属性。
您应该在短代码中使用 do_shortcode()
。你有
[some_shortcode value='[test string="first"]']
并希望在您的短代码中使用 [test string="first"]
的返回值 first
。您的代码将是:
function some_shortcode($atts){
$atts = shortcode_atts(array(
'value' => ''
), $atts);
$second_shortcode_value = do_shortcode($atts['value']);
//some code
return $something;
}
add_shortcode('some_shortcode', 'some_shortcode');
变量 $second_shortcode_value
将包含 [test string="first"]
简码的输出。
P.S。避免使用 exctract()
函数,因为它可以 make your code hard readable.
编辑:
这是将属性动态添加到 [some_shortcode]
value
属性的解决方案。
function my_shortcode($atts){
$atts = shortcode_atts(array(
'str' => ''
), $atts);
switch ( $atts['str'] ) {
case 'first':
$modified = get_post_meta( get_the_ID(), 'leweb_gender', true );
break;
default:
$modified = '';
}
if(!empty($modified)) {
$second_shortcode_with_value = do_shortcode("[some_shortcode value='$modified']");
}else{
$second_shortcode_with_value = do_shortcode('[some_shortcode]');
}
return $second_shortcode_with_value;
}
add_shortcode('some_shrt', 'my_shortcode');
我们在做什么:我们不是调用 [some_shortcode value='something']
,而是将 something
生成到我们的短代码中,并获取类似
[some_shrt str="first"]