从插件内部的更深一层获取plugin_dir_url()

时间:2012-10-24 作者:setterGetter

我已经使用该结构编写了几个插件:

/插件/myplugin/myplugin。php/plugins/myplugin/class/class-myclass。php

以便充分利用面向对象技术,全面构建我的代码

在类文件中,有时我需要获取基本插件的URL。。。我一直在使用以下方法,但我相信有更好的方法:

$this->plugin_location = substr(plugin_dir_url(__FILE__),0, strrpos(plugin_dir_url(__FILE__), "/",-2)) . "/";
我玩弄的另一个想法是有一个额外的单例类来存储插件的所有设置,并通过类文件添加一个抽象层。

非常感谢您的帮助。

2 个回复
最合适的回答,由SO网友:Parham 整理而成

在插件目录的子目录中,可以使用以下代码:

$this->plugin_location = plugin_dir_url(dirname(__FILE__));

SO网友:fuxia

您应该使所有类独立于它们的实际位置,以便可以轻松地移动它们,并可能在其他项目中重用它们。

我将创建一个类,告诉其他类使用什么路径或URL,让它实现一个接口,这样您就可以重用其他类,甚至可以在主题中或完全在WordPress之外重用。

接口示例:

interface DirectoryAddress
{
    /**
     * @return string Dir URL with trailing slash
     */
    public function url();

    /**
     * @return string Dir path with trailing slash
     */
    public function path();
}
插件中的具体实现如下所示:

class PluginDirectoryAddress implements DirectoryAddress
{
    private $path;

    private $url;

    public function __construct( $dirpath )
    {
        $this->url  = plugins_url( \'/\', $dirpath );
        $this->path = plugin_dir_path( $dirpath );
    }

    /**
     * @return string Dir URL with trailing slash
     */
    public function url() {
        return $this->url;
    }

    /**
     * @return string Dir path without trailing slash
     */
    public function path() {
        return $this->path;
    }
}
现在,在主插件文件中创建该类的实例:

$address = new PluginDirectoryAddress( __DIR__ );
所有其他类在其构造函数中只依赖于接口,如下所示:

public function __construct( DirectoryAddress $directory ) {}
他们现在只从传递的实例访问URL和路径。

结束

相关推荐

exclude category in loop.php

我用的是二十十主题。我试图从作者帖子中排除类别1。我在循环中使用了以下代码。phpquery_posts(cat=\'-1\'); while ( have_posts() ) : the_post(); ?> 但没有显示帖子。如何修复此问题?