【问题标题】:wp_maintenance_mode - Boolean True/False not workingwp_maintenance_mode - 布尔 True/False 不起作用
【发布时间】:2021-06-09 11:07:36
【问题描述】:

我已经创建了一个定义,我可以在其中启用和禁用 WP 维护模式,设置为 true 或 false。已登录的用户和可以编辑主题的人都可以访问该网站。

但由于某种原因.. 该函数将始终返回“false”。即使设置了真假。

我错过了什么吗?

代码:

<?php

// Enable maintenance mode
define('NM_ENABLE_MAINTENANCE_MODE', false);

if(NM_ENABLE_MAINTENANCE_MODE && !current_user_can('edit_themes') || !is_user_logged_in()) {
    function wp_maintenance_mode() {
        wp_die('<h1>' . NM_MAINTENANCE_TITLE . '</h1>' . '<p>' . NM_MAINTENANCE_MESSAGE) . '</p>';
    }
}


add_action('get_header', 'wp_maintenance_mode');

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    我认为这是一个真值表。您有三个变量 A、B、C 并且当前语句说 (A ∧ B ∨ C) 这不是您想要的。相反,(A ∧ (B ∨ C)) 的真值表是您想要的。那就是说 IF NM_ENABLE_MAINTENANCE_MODEtrue 并且用户无法编辑主题或用户未登录显示页面。所以他们可以登录但不允许编辑主题然后他们应该看到页面。

    A = NM_ENABLE_MAINTENANCE_MODE 的常量

    B = current_user_can('edit_themes') 的倒数(因此无法编辑主题)

    C = is_user_logged_in() 的倒数(因此未登录)

    A   B   C   SHOW PAGE
    T   T   T   T
    T   T   F   T
    T   F   T   T
    T   F   F   F
    F   T   T   F
    F   T   F   F
    F   F   T   F
    F   F   F   F
    

    我相信您正在寻找的代码是(仅当 IF 为真时才起作用):

    <?php
    
    // Enable maintenance mode
    define('NM_ENABLE_MAINTENANCE_MODE', false);
    
    if(NM_ENABLE_MAINTENANCE_MODE && (!current_user_can('edit_themes') || !is_user_logged_in())) {
        function wp_maintenance_mode() {
            wp_die('<h1>' . NM_MAINTENANCE_TITLE . '</h1>' . '<p>' . NM_MAINTENANCE_MESSAGE) . '</p>';
        }
        add_action('get_header', 'wp_maintenance_mode');
    }
    

    如果您希望该功能始终可用,请编写代码:

    <?php
    
    // Enable maintenance mode
    define('NM_ENABLE_MAINTENANCE_MODE', false);
    
    function wp_maintenance_mode() {
       if(NM_ENABLE_MAINTENANCE_MODE && (!current_user_can('edit_themes') || !is_user_logged_in())) {
            wp_die('<h1>' . NM_MAINTENANCE_TITLE . '</h1>' . '<p>' . NM_MAINTENANCE_MESSAGE) . '</p>';
        }
    }
    add_action('get_header', 'wp_maintenance_mode');
    

    编辑:将 add_action 移到 IF 语句中,这样您就不会收到未定义的函数错误。

    【讨论】:

    • 这几乎可以工作,但得到以下结果 - 我现在唯一得到的是:[11-Mar-2021 14:06:36 UTC] PHP 警告:call_user_func_array() 期望参数 1 是有效的回调,未找到函数“wp_maintenance_mode”或函数无效
    • 编辑了以上内容,对此感到抱歉。我忘了在 IF 语句中添加动作。否则,您需要将function wp_maintenance_mode() 放在 IF 的外部。您也可以将 IF 带入函数内部。无论哪种方式都取决于您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2012-01-03
    • 2023-04-02
    • 2013-10-17
    相关资源
    最近更新 更多