php中的动态函数名称

Bay*_*ock 9 php wordpress function dynamic

我想在WordPress中简化"自定义帖子类型"的创建,因为通过相同的脚本并一遍又一遍地手动更改所有自定义帖子类型名称实例是很繁琐的.

通过创建包含CPT名称的变量并在需要的任何地方使用它来实现它非常简单.这样,我所要做的就是在脚本的开头声明变量,并且应该处理其余部分.

唯一的问题是,为了使它工作,我还需要在脚本内的每个函数前面加上CPT名称的前缀,似乎在PHP中使用函数名中的变量并不容易或甚至推荐.

那么我怎么能解决这个问题呢?

下面是一个示例:

$prefix = 'news';

function news_custom_type_init()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');
Run Code Online (Sandbox Code Playgroud)

这几乎是好的,如果我只能动态重命名函数,以便不必在它前面写"新闻"这个词,而是使用"$ prefix"代替,这可以标准化.

这可能是好的,但只是不起作用:

$prefix = 'news';

$functionName= $prefix."_custom_type_init";

function $functionName()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');
Run Code Online (Sandbox Code Playgroud)

必须手动命名函数有点击败我尝试的最初目的(特别是当脚本嵌入了这样的几十个函数时).

最好的方法是什么?

PS:我谷歌搜索和"stackoverflowed"很多关于此但没有找到任何适合我的需要的工作解决方案,并没有生成WordPress错误消息.

谢谢.

Nic*_*los 9

很简单,这是一个类似剪切形式的项目:

$function = $prefix . '_custom_type_init';
if(function_exists($function)) {
  $function();
}
Run Code Online (Sandbox Code Playgroud)

  • 我不确定我是否清楚地表达了自己(或者也许我不明白你的观点)。您的脚本检查该函数是否已经存在,为此,该函数应该首先手动创建,对吧?我并不是试图动态“调用”现有函数,我想做的正是动态“创建”该函数。为了简单起见,在上面的脚本中,我只想从第一条指令之外的任何地方删除“新闻”一词,并使脚本正常工作。如果我没有得到你,我很抱歉。 (2认同)

Dav*_*ber 6

这是一个旧线程,但只是使用匿名函数:

add_action('init', function() use($args) {
    //...
});
Run Code Online (Sandbox Code Playgroud)

然后就没有必要声明这么多的功能了.