这是注册简码的正确语法吗?
$field = 'sc_id';
$newfunc = function($field) { return get_option($field);};
add_shortcode($field, $newfunc);
我收集了一些选项,我需要将全部注册为简码。 其中有些正在工作,有些却没有。
更新: 好的,此代码有效
$field = 'sc_id';
$newfunc = function() { return get_option($'sc_id');};
add_shortcode($field, $newfunc);
但是我需要注册短码大约20个值 而且我更喜欢
[shortcode]
代替
[sc key="shortcode"]
我该怎么做?
7.2 PHP之前 这段代码对我有用
$newfunc = create_function('', 'return get_option(' . $field . ');');
答案 0 :(得分:1)
这不是正确的语法。查看wordpress docs。
您可以尝试以下操作:
def merge(d1, d2):
d = d1.copy()
d.update(d2)
return d
# A decorator to inject variables
def valueDecorator(*_args, **_kargs):
def wrapper(f):
def wrapper2(*args, **kargs):
return f(*args, **kargs)
wrapper2.__name__ = f.__name__
wrapper2.__doc__ = f.__doc__
oldVars = getattr(f, 'Vars', [])
oldNamedVars = getattr(f, 'NamedVars', {})
wrapper2.Vars = oldVars + list(_args)
wrapper2.NamedVars = merge(oldNamedVars, _kargs)
return wrapper2
return wrapper
@valueDecorator(12, 13, a=2)
@valueDecorator(10, 11, a=1)
def func():
print(func.Vars)
print(func.NamedVars)
并像这样调用短代码:
$field = 'sc_id';
$newfunc = function($atts) { return get_option($atts['key']);};
add_shortcode($field, $newfunc);
由于评论问题而进行编辑:
当您想要多个不包含属性的字段的多重短代码时,可以使用如下所示的方法:
[sc_id key="option_key"]
使用$fields = array('sc_id','sc_it','sc_ib');
foreach($fields as $field) {
$newfunc = function() use($field) {
return get_option($field);
}
add_shortcode($field, $newfunc);
}
关键字,我们可以将外部作用域变量传递到我们的匿名函数中。