我有一个插件的短代码,我无法修改...这个短代码有一些参数ex。 [some_shortcode value =""] - 我试图将post meta中的值作为此短代码的参数输入,但它不起作用 - 这里是代码......
这是我创建的短代码的代码(它从post meta返回值)
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"]']
这不是这样的。谢谢你的帮助!
答案 0 :(得分:2)
在您提供的现有短代码中插入短代码是行不通的。您的短代码应该有机会将提供的短代码作为属性进行处理。
您应该在短代码中使用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。
修改强>
以下是解决方案dinamically向[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"]