扩展WordPress内置的定制框架,根据环境自动打开/关闭搜索引擎可见性设置

时间:2021-09-13 作者:Jason Is My Name

我有一个WordPress框架,我目前正在工作,这是一个美丽的东西,但它不是我所习惯的。我正在尝试扩展此框架,以根据环境(本地/开发/暂存/实时)自动打开或关闭切换(在此处找到:Dashboard->;Settings->;Reading->;Search engine visibility)。

我有。设置的环境文件包含该环境和仅该环境的设置的不同部分。这些在对配置进行基本设置后,将调用env文件。

例如:

<?php
use Roots\\WPConfig\\Config;

/**
 * Debugging Settings
 */
Config::define(\'WP_DEBUG_DISPLAY\', false);
Config::define(\'WP_DEBUG_LOG\', env(\'WP_DEBUG_LOG\') ?? false);
Config::define(\'SCRIPT_DEBUG\', false);
ini_set(\'display_errors\', \'0\');

/**
 * Pull in relevant .env file
 */
Code to pull in .env file.
然后在。env文件我们的外观如下所示:

<?php
/**
 * Configuration overrides for WP_ENV === \'local\'
 */

use Roots\\WPConfig\\Config;

Config::define(\'SAVEQUERIES\', true);
Config::define(\'WP_DEBUG\', true);
Config::define(\'WP_DEBUG_DISPLAY\', true);
Config::define(\'WP_DISABLE_FATAL_ERROR_HANDLER\', true);
Config::define(\'SCRIPT_DEBUG\', true);

ini_set(\'display_errors\', \'1\');

// Enable plugin and theme updates and installation from the admin
Config::define(\'DISALLOW_FILE_MODS\', false);
不过,这很聪明,现在我们知道了这是如何发生的,我正在尝试添加一行内容来更新搜索引擎可见性切换(可在此处找到:Dashboard->;Settings->;Reading->;Search engine visibility)。

Can anyone point me towards a complete list of these definable settings (such as define(\'WP_DEBUG\', true)), specifically the Search engine visibility toggle?

另外,我是否需要定义两次“use Roots\\WPConfig\\Config”;一次在根配置中,另一次在中。环境特定文件?

任何信息都将不胜感激,祝您编码愉快。

EDIT: 遵照佩蒂爵士的建议。

我已在框架中找到此设置:

if (defined(\'WP_ENV\') && WP_ENV !== \'production\' && !is_admin()) {
    add_action(\'pre_option_blog_public\', \'__return_zero\');
} 
如果我在其他地方尝试跟踪“pre\\u option\\u blog\\u public”,结果一无所获。然而,有以下结果:

add_action( \'update_option_blog_public\', \'update_blog_public\', 10, 2 );
而且:

add_action( \'update_blog_public\', \'wp_update_blog_public_option_on_site_update\', 1, 2 );
这引导我走向:

/**
 * Update this blog\'s \'public\' setting in the global blogs table.
 *
 * Public blogs have a setting of 1, private blogs are 0.
 *
 * @since MU (3.0.0)
 *
 * @param int $old_value
 * @param int $value     The new public value
 */
function update_blog_public( $old_value, $value ) {
    update_blog_status( get_current_blog_id(), \'public\', (int) $value );
}
这是:

if ( $new_site->public != $old_site->public ) {

    /**
     * Fires after the current blog\'s \'public\' setting is updated.
     *
     * @since MU (3.0.0)
     *
     * @param int    $site_id Site ID.
     * @param string $value   The value of the site status.
     */
    do_action( \'update_blog_public\', $site_id, $new_site->public );
}
最后一点:

/**
 * Updates the `blog_public` option for a given site ID.
 *
 * @since 5.1.0
 *
 * @param int    $site_id Site ID.
 * @param string $public  The value of the site status.
 */
function wp_update_blog_public_option_on_site_update( $site_id, $public ) {

    // Bail if the site\'s database tables do not exist (yet).
    if ( ! wp_is_site_initialized( $site_id ) ) {
        return;
    }

    update_blog_option( $site_id, \'blog_public\', $public );
}

Am I right in thinking I just need to adjust the existing code for the first line provided in this edit, to not use:

add_action(\'pre_option_blog_public\', \'__return_zero\');

But instead the line you graciously provided earlier:

add_filter( \'option_blog_public\', \'__return_false\' );

Thoughts?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

“这些”;“可定义设置”;是constants. WordPress在中定义其默认常量this file. 如果常量定义包装在defined() 检查,如下所示:

if ( ! defined( \'WP_DEBUG_DISPLAY\' ) ) {
    define( \'WP_DEBUG_DISPLAY\', true );
}
然后,这意味着您可以首先在wp配置中定义它。php文件(或者,显然是这个框架的配置文件)。

“The”;搜索引擎可见性“;设置没有可从wp config定义的常量。php。这是一个保存在数据库中的设置。您可以按如下方式将检查结果筛选到此设置:

add_filter( \'option_blog_public\', \'__return_false\' );
但这在这些配置文件中可能不起作用,因为add_filter() 尚未定义函数。

框架没有理由不能使用配套插件来允许您使用常量定义它,但作为框架作者,您需要知道这是否可能。

另外,我是否需要定义两次“use Roots\\WPConfig\\Config”;一次在根配置中,另一次在中。环境特定文件?

是的,你知道。use 语句按文件列出。


要解决您的更新:

我已在框架中找到此设置:

if (defined(\'WP_ENV\') && WP_ENV !== \'production\' && !is_admin()) {
    add_action(\'pre_option_blog_public\', \'__return_zero\');
}
。。。我的想法正确吗?我只需要调整提供的第一行的现有代码。。。

不,你的建议不正确。或者,至少有更好的方法。

这个add_action() 在您的编辑中,无论出于何种目的,都与我给您的内容相同。重要的是,如果WP_ENV 不是\'production\'.

我在您的框架文档中发现:https://roots.io/docs/bedrock/master/environment-variables/#wp-env