PHP:替换这个 create_function

PHP: Replace this create_function

我从互联网上粘贴的旧 php 脚本不再受支持。 create_function 不再有效,我想更换它。但是我无法找到现代解决方案。我的 PHP 技能太差了,甚至无法理解它过去是如何工作的。有谁知道快速修复?我将不胜感激!

//Gets post cat slug and looks for single-[cat slug].php and applies it
add_filter('single_template', create_function(
    '$the_template',
    'foreach( (array) get_the_category() as $cat ) {
        if ( file_exists(TEMPLATEPATH . "/single-{$cat->slug}.php") )
        return TEMPLATEPATH . "/single-{$cat->slug}.php"; }
    return $the_template;' )
);

这种转换其实极其简单因为涉及的字符串是常量(注意单引号)。所以,除了它的参数之外,没有任何东西进出函数。

这意味着你拥有的是一个正常的、普通的功能。

所以:

$newFunction = function($the_template) {
    foreach((array)get_the_category() as $cat) {
        if (file_exists(TEMPLATEPATH . "/single-{$cat->slug}.php")) {
            return TEMPLATEPATH . "/single-{$cat->slug}.php";
        }
    }
    return $the_template;
};

add_filter('single_template', $newFunction);

我认为这也应该有效(只有很小的变化):

$newFunction = function($theTemplate) {
    foreach(get_the_category() as $cat) {
        $php = TEMPLATEPATH . "/single-{$cat->slug}.php";
        if (file_exists($php)) {
            return $php;
        }
    }
    return $theTemplate;
};

更新

您甚至不需要声明函数,但可以使用 anonymous 函数:注意匿名主体只是旧 create_function 的第二个参数, 而第一个参数指定了匿名参数。

add_filter(
    'single_template',
    function($theTemplate) {
         foreach(get_the_category() as $cat) {
         $php = TEMPLATEPATH . "/single-{$cat->slug}.php";
         if (file_exists($php)) {
            return $php;
         }
         return $theTemplate;
    }
);