使用Composer部署WordPress

时间:2020-03-08 作者:Paul37349

我一直在考虑使用composer设置WordPress及其插件和主题。我注意到很多教程都让composer将wordpress安装到自己的子目录中,例如/wp,而主题插件必须使用与/content完全不同的目录中的插件。有没有理由不为插件/主题/ect使用/wp/content并使/wp成为web根目录?我注意到composer似乎以这种方式正确安装了所有内容,所以我是否遗漏了什么?

编辑:我应该澄清,我知道更新core会删除内容目录,但是所有插件/主题也都是由composer安装的,我不依赖它来进行持久上传存储,我将媒体上传卸载到S3。因此,考虑到这一点,使用此设置还有其他缺点吗?因为我确实更喜欢更传统的文件结构。

2 个回复
SO网友:leymannx

将webroot放在所需的目录中只是遵循最佳实践。因为您希望webroot之外的某些内容无法通过访问http://example.com/sensitive-infohttp://example.com/some-script 例如想想env文件、自定义编写器脚本、CI配置或供应商和/或bin目录。

当谈到插件或主题时,不幸的是WordPress将custom、contrib和core插件和主题放在了相同的目录中。因此,当您现在将自定义插件和主题放在这些目录中,然后composer update WordPress核心得到更新,这些目录得到重置。内容目录也是如此。此外,所有与编写器相关的内容(核心内容)都应该放在Git repo之外。充其量只能提交作曲家。json和composer。锁定文件、自定义插件和主题。

查看Smashing杂志的博客帖子Using Composer With WordPress 了解更多详细信息。

我曾经建造过leymannx/wordpress-project 作为概念证明,可以同时使用Composer和更传统的文件结构。我用自定义的作曲家脚本实现了这一点,它将所有东西都符号化。看看它到底有多轻。如果做得好,只需删除整个webroot目录composer install 一切都会重新接通。

SO网友:Adam

您可以做任何适合您需要的事情,例如仍然使用composer,但将实现配置为将目录与core一起放回根目录,然而,让core独立于其他目录的主要目的是分离不依赖于共享相同路径的其他关注点。

这个wp-content 目录已经可以移动到安装根目录之外,本机使用constants 没有作曲家。

例如:

define( \'WP_CONTENT_DIR\', dirname(__FILE__) . \'/blog/wp-content\' );
define( \'WP_CONTENT_DIR\', dirname(__FILE__) . \'/blog/wp-content\' );

define( \'WP_CONTENT_URL\', \'http://example/blog/wp-content\' );

define( \'WP_PLUGIN_DIR\', dirname(__FILE__) . \'/blog/wp-content/plugins\' );
define( \'WP_PLUGIN_URL\', \'http://example/blog/wp-content/plugins\' );
define( \'PLUGINDIR\', dirname(__FILE__) . \'/blog/wp-content/plugins\' );

define( \'UPLOADS\', \'blog/wp-content/uploads\' );
所以即使是core也承认core和wp-content 不依赖于wp-content 作为根安装的子级。

如果WordPress没有20年的历史,我很怀疑我们今天看到的文件夹结构是否会保留下来。

composer的做法是将它们分开,因为随着我们的进步,我们构建的web、工具和应用程序变得越来越复杂,我们意识到有些东西我们不想暴露给根目录,通常是出于安全原因,但也是出于逻辑原因(即应用程序域)。

我个人使用过:

  • https://wecodemore.github.io/wpstarter/docs/what.htmlGiuseppe Mazzapica / @gmazzap 位于wecodemore 另一位WPSE的Franz Josef Kaiser / @unserkaiser 并收到了其他WPSE成员和更大WP的捐款。

    我们都倾向于同意,这种关注点分离是构建我们的应用程序的一种好方法,但同样,您并不一定要这样做。

    使用wpstarter 例如,您可以通过更改composer文件来指定所需的路径来实现所需的功能。

    发件人:

    "extra": {
        "wordpress-install-dir": "public/wp",
        "wordpress-content-dir": "public/content",
        "..." : "...",
        "installer-paths": {
            "public/content/plugins/{$name}": [
                "type:wordpress-plugin"
            ],
            "public/content/mu-plugins/{$name}": [
                "type:wordpress-muplugin"
            ],
            "public/content/themes/{$name}": [
                "type:wordpress-theme"
            ]
        }
    }
    
    收件人:

    "extra": {
        "wordpress-install-dir": "public/wp",
        "wordpress-content-dir": "public/content",
        "..." : "...",
        "installer-paths": {
            "public/wp/content/plugins/{$name}": [
                "type:wordpress-plugin"
            ],
            "public/wp/content/mu-plugins/{$name}": [
                "type:wordpress-muplugin"
            ],
            "public/wp/content/themes/{$name}": [
                "type:wordpress-theme"
            ]
        }
    }
    
    为简洁起见,缩短了作曲家节选

    。。。这应该满足你的需要。

    请参见:

相关推荐

侧边栏可见性{WordPress模板层次结构、报纸主题、TagDiv Composer}

我不得不承认,我经常发现Wordpress没有那么直观,但让我解释一下我在这个具体案例中的意思:主页上没有显示右侧边栏?为什么?怎么可能呢?但是好吧。。让我调查一下。。这是否意味着PageBuilder会删除Widgetized侧区域?如果我尝试添加小部件侧栏(这对我来说毫无意义……侧栏不应该与整个页面相关?)