"get_current_user_id()" 与数字的严格比较失败

"get_current_user_id()" strict comparison with number fails

我有一个技术问题,比起解决方案,我更想了解它。

我将一个自定义函数连接到 WordPress functions.php 中的 'template_include' 过滤器,如下所示,以便在页面上工作而不会被其他任何人看到。

function template_redirect( $template ) {
    if ( $template === locate_template('single-ressource.php') && get_current_user_id() === 11 ) { 
        return $new_template = locate_template( array( 'single.php' ) );
    }
    return $template;
};
add_filter( 'template_include', 'template_redirect', 99 );

因此,如果任何未登录我帐户的人进入 'ressource' 自定义 post 类型的页面,他们会看到标准 single.php 布局而不是单一 ressource.php布局。

问题是,它不能按原样工作。我必须将严格比较中的 11 整数更改为 '11' 字符串以使其 有效 请参阅编辑) ,如下。

function template_redirect( $template ) {
    if ( $template === locate_template('single-ressource.php') && get_current_user_id() === '11' ) { 
        return $new_template = locate_template( array( 'single.php' ) );
    }
    return $template;
};
add_filter( 'template_include', 'template_redirect', 99 );

我去看了 get_current_user_id() 函数的官方文档,他们似乎将类型转换为 return 整数或 0

此外,当我在前端执行 var_dump(get_current_user_id()) 时,它 returns int(11).

有人知道为什么 第二个代码有效 请参阅编辑)而不是第一个吗?

编辑

正如@Bazaim 指出的那样,我只是对所涉及的逻辑感到困惑。

对于第二个代码,我想隐藏的实际“single-ressource.php”并没有对任何人隐藏,因为传递的条件背后的逻辑存在缺陷。我只重定向 user_id 等于字符串 '11' 的用户,因为 user_id 是整数。

下面的代码可以完美运行。

function template_redirect( $template ) {
    if ( $template === locate_template('single-ressource.php') && get_current_user_id() !== 11 ) { 
        return $new_template = locate_template( array( 'single.php' ) );
    }
    return $template;
};
add_filter( 'template_include', 'template_redirect', 99 );

你的 user_id 是 11 ?

您需要查看 single.php :

  • $template'single-ressource.php' : 对
  • get_current_user_id()11 :错误,您希望 id 不是 11