WordPress使用反义词功能注册简码

时间:2019-03-09 16:55:34

标签: php wordpress wordpress-shortcode

这是注册简码的正确语法吗?

$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 . ');');

1 个答案:

答案 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); } 关键字,我们可以将外部作用域变量传递到我们的匿名函数中。