假设$row->internalFunction
是一个函数,或者是一个已经存在的函数的名称,那么您可以这样做:
foreach ( $dbQuery as $row ) {
add_shortcode( $row->formName, $row->internalFunction );
}
所以如果
formName
(短代码标记)是
foo
和
internalFunction
是
foo_func
, 然后
[foo]
将由
foo_func()
功能:
// The standard/non-dynamic way.
function foo_func( $atts = array() ) {
return \'something good..\';
}
add_shortcode( \'foo\', \'foo_func\' );
请参见
Codex 更多详情/指南。
以下是使用闭包的示例:
foreach ( $dbQuery as $row ) {
$func = $row->internalFunction;
add_shortcode( $row->formName, function ( $atts = array() ) use ( $func ){
return $func( $atts );
} );
}
还是我误解了你的想法罢工>
更新是否有办法将参数传递到内部函数
是的,您可以将自定义参数传递给内部函数(internalFunction
); 但你可以通过闭包来实现:
foreach ( $dbQuery as $row ) {
$func = $row->internalFunction;
$params = json_decode( $row->json )->params;
add_shortcode( $row->formName, function ( $atts = array() ) use ( $func, $params ){
return $func( $params );
} );
}
基本上,使用
use
关键字以在
foreach
范围在闭包中可用。
你甚至可以通过整个$row
对象
foreach ( $dbQuery as $row ) {
add_shortcode( $row->formName, function ( $atts = array() ) use ( $row ){
$func = $row->internalFunction;
// Here you can pass $row->formName to the function.
return $func( json_decode( $row->json )->params );
} );
}