如何确定当前文件是加载到插件中还是主题中?

时间:2015-12-28 作者:Andrei Surdu

如何确定当前文件是加载在插件中还是加载在主题中?一个布尔PHP函数。

3 个回复
最合适的回答,由SO网友:Andrei Surdu 整理而成

1. The function:

function wp543_is_plugin(){
    return strpos( str_replace("\\\\", "/", plugin_dir_path( $file ) ) , str_replace("\\\\", "/", WP_PLUGIN_DIR) ) !== false;
}

2. Call the function:

wp543_is_plugin();
调用此函数将返回true 如果当前文件加载到插件中false 如果加载到主题中。

Edit: 由于这个答案遭到了很多反对票,我找到了解决方案,可以纠正我之前的错误<我故意用一行代码就解决了这个问题:)

此功能现在的工作方式:

将所有反斜杠替换为正斜杠

  • plugin_dir_path( __FILE__ ) 将始终返回当前文件的完整路径。无论该文件是否在插件或主题中
  • WP_PLUGIN_DIR 将始终返回插件路径,因此我们只需检查是否在中找到该路径plugin_dir_path( __FILE__ )true 否则false.
  • SO网友:Pieter Goosen

    编辑与@s\\u ha\\u dum交谈,操作系统和路径之间存在问题,Windows使用反斜杠,所以我们需要对其进行补偿

    因为OP需要返回一个布尔值,所以我们需要一个函数来返回true或false,所以我们可以编写两个单独的函数来覆盖这两个基,或者只选择一个并使用它。这种方法也有其缺点,因为它不适用于加载在插件和主题文件夹之外的文件

    让我们看一个条件,如果从主题加载文件,该条件将返回true

    function is_file_in_theme( $file_path = __FILE__ )
    {
        // Get the them root folder
        $root = get_theme_root();   
        // Change all \'\\\' to \'/\' to compensate for localhosts
        $root = str_replace( \'\\\\\', \'/\', $root ); // This will output E:\\xampp\\htdocs\\wordpress\\wp-content\\themes
    
        // Make sure we do that to $file_path as well
        $file_path = str_replace( \'\\\\\', \'/\', $file_path ); 
    
        // We can now look for $root in $file_path and either return true or false
        $bool = stripos( $file_path, $root );
        if ( false === $bool )
            return false;
    
        return true;
    }
    
    我们也可以对插件执行同样的操作

    function is_file_in_plugin( $file_path = __FILE__ )
    {
        // Get the plugin root folder
        $root = WP_PLUGIN_DIR; 
        // Change all \'\\\' to \'/\' to compensate for localhosts
        $root = str_replace( \'\\\\\', \'/\', $root ); 
    
        // Make sure we do that to $file_path as well
        $file_path = str_replace( \'\\\\\', \'/\', $file_path ); 
    
        // We can now look for $root in $file_path and either return true or false
        $bool = stripos( $file_path, $root );
        if ( false === $bool )
            return false;
    
        return true;
    }
    

    SO网友:s_ha_dum

    有趣的问题。

    内容目录和插件目录可以更改,但我不相信您可以更改wp-content 目录,因此:

    function theme_or_plugin_wpse_213043($path) {
      $path = str_replace(\'\\\\\',\'/\',$path);
      $path = explode(\'/\',$path);
      return in_array(\'themes\',$path);
    }
    var_dump(theme_or_plugin_wpse_213043(__FILE__));
    
    该功能将return true 对于主题文件和false 否则——这包括插件和mu插件。

    我也很确定,如果您需要这个函数,那么您在做其他错误的事情——可能是使用了错误的方法来获取主题/插件路径或URL。

    相关推荐