【发布时间】:2018-03-20 19:57:41
【问题描述】:
我正在运行一个包含超过 15 个域的 wordpress 多站点服务器。
我想做的是从一个文件中为所有域管理所有域的 style.css 和 functions.php(1 style.css 1 functions.php),因为大多数样式和函数在我的所有域中都是相同的,但是我希望在每个子主题中添加特定于域的选项。
这可以做到吗?还是一个坏主意?
【问题讨论】:
我正在运行一个包含超过 15 个域的 wordpress 多站点服务器。
我想做的是从一个文件中为所有域管理所有域的 style.css 和 functions.php(1 style.css 1 functions.php),因为大多数样式和函数在我的所有域中都是相同的,但是我希望在每个子主题中添加特定于域的选项。
这可以做到吗?还是一个坏主意?
【问题讨论】:
我们实际上做了类似的事情。我所做的是在/mu-plugins/ 目录中创建了一个PHP 文件。无论活动主题或插件如何,都将加载其中的 PHP 文件。
您可以阅读 Codex 中的 Must Use Plugins。它们就像插件一样工作,但始终加载且无法激活/停用。
因此,如果您创建/wp-content/mu-plugins/lahree.php 和/wp-content/mu-plugins/lahree.css,您将能够将.php 文件视为全局functions.php(因为它总是被加载)。从那里您可以将.css 文件排入队列,以有效地将其用作网络范围/全局style.css 文件。
在 lahree.php 文件中的函数内,您可以比较当前博客名称、站点 URL 甚至活动主题,以加载特定样式表或仅在这些特定站点上运行特定函数。
您可以在 Action Reference 中看到 mu-plugins 文件加载得非常早,因此如果您计划覆盖样式,您可能需要调整 add_action 挂钩的优先级加载到主题中。
lahree.php 看起来像这样:
<?php
add_action( 'wp_enqueue_scripts', 'wlnb_wp_enqueue_scripts' );
function wlnb_wp_enqueue_scripts(){
wp_enqueue_style( 'lahree-global', WPMU_PLUGIN_DIR. '/lahree.css' );
if( site_url() == 'SPECIFIC_SITE_URL_1' )
wp_enqueue_style( 'lahree-site-1', WPMU_PLUGIN_DIR. '/lahree-1.css' );
if( site_url() == 'SPECIFIC_SITE_URL_2' )
wp_enqueue_style( 'lahree-site-2', WPMU_PLUGIN_DIR. '/lahree-2.css' );
}
add_action( 'wp_head', 'do_something' );
function do_something(){
if( site_url() == 'SPECIFIC_SITE_URL_3')
echo 'This is the Third Site';
if( site_url() == 'SPECIFIC_SITE_URL_4')
echo 'This is the Fourth Site';
}
【讨论】:
add_action( 'wp_enqueue_scripts', 'lahree-global-assets', 20 );。 PHP 文件本身不应“覆盖”每个 pther,因此您不必担心