首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从静态方法调用"admin_notices“钩子

从静态方法调用"admin_notices“钩子
EN

WordPress Development用户
提问于 2022-01-05 08:50:00
回答 1查看 106关注 0票数 0

试图从静态函数调用"admin_notices“钩子。没有输出。当正常调用同一个钩子的时候。

代码语言:javascript
复制
use Awraq\Init;
use Awraq\Notice;

/**
 * Initialize the activation works of the plugin.
 */
function awraq_activate_plugin()
{

    /* NOT WORKING */
    Notice::error('Activation failed');

    
    /* WORKING */

    //add_action('admin_notices', 'simplefunction');
}

register_activation_hook(__FILE__, 'awraq_activate_plugin');



function simplefunction()
{
    echo '
        Activation failed';
}

代码语言:javascript
复制
namespace Awraq;

if (!defined('ABSPATH')) exit;

class Notice
{
    private static $class = '';
    private static $msg = '';

    public static function error($msg = 'error', $is_dismissible = TRUE)
    {
        self::$class = ($is_dismissible == TRUE) ? 'notice notice-error is-dismissible' : 'notice notice-error';
        self::$msg = __($msg, AWRAQ_TEXT_DOMAIN);
        add_action('admin_notices', array(__CLASS__, 'awraq_notice'));
    }

    public static function warning($msg = 'warning', $is_dismissible = TRUE)
    {
        self::$class = ($is_dismissible == TRUE) ? 'notice notice-warning is-dismissible' : 'notice notice-warning';
        self::$msg = __($msg, AWRAQ_TEXT_DOMAIN);
        add_action('admin_notices', array(__CLASS__, 'awraq_notice'));
    }

    public static function success($msg = 'success', $is_dismissible = TRUE)
    {
        self::$class = ($is_dismissible == TRUE) ? 'notice notice-success is-dismissible' : 'notice notice-success';
        self::$msg = __($msg, AWRAQ_TEXT_DOMAIN);
        add_action('admin_notices', array(__CLASS__, 'awraq_notice'));
    }

    public static function info($msg = 'info', $is_dismissible = TRUE)
    {
        self::$class = ($is_dismissible == TRUE) ? 'notice notice-info is-dismissible' : 'notice notice-info';
        self::$msg = __($msg, AWRAQ_TEXT_DOMAIN);
        add_action('admin_notices', array(__CLASS__, 'awraq_notice'));
    }

    public static function  awraq_notice()
    {

        $class  = self::$class;
        $msg    = self::$msg;

        if ($class == '' and $msg == '') {
            return;
        }

        printf('%2$s', esc_attr($class), esc_html($msg));
    }
}
EN

回答 1

WordPress Development用户

发布于 2022-01-06 07:39:40

通过做两件事解决了问题

  • 移除主调用
代码语言:javascript
复制
/**
 * Initialize the activation works of the plugin.
 */
function awraq_activate_plugin()
{
    //removed 
}

register_activation_hook(__FILE__, 'awraq_activate_plugin');

添加了对"plugins_loaded“的调用

代码语言:javascript
复制
/**
 * Initialize the plugin.
 */
function awraq_init_plugin()
{
    if (Init::activate() != TRUE) {
        deactivate_plugins(plugin_basename(__FILE__));
        //added below
        Notice::error('Plugin got Deactivated. Please check the dependencies.', true);
    }
}
add_action('plugins_loaded', 'awraq_init_plugin');
  • 并且在类中删除了带有完整命名空间和类-private static $globalScopeName = 'Awraq\Base\Notice';D9,因为它将从外部调用。
代码语言:javascript
复制
namespace Awraq\Base;

if (!defined('ABSPATH')) exit;

class Notice
{
    private static $globalScopeName = 'Awraq\Base\Notice';
    private static $class = '';
    private static $msg = '';

    public static function error($msg = 'error', $is_dismissible = TRUE)
    {
        self::$class = ($is_dismissible == TRUE) ? 'notice notice-error is-dismissible' : 'notice notice-error';
        self::$msg = __($msg, AWRAQ_TEXT_DOMAIN);
        add_action('admin_notices', array(self::$globalScopeName, 'awraq_notice'));
    }

    public static function warning($msg = 'warning', $is_dismissible = TRUE)
    {
        self::$class = ($is_dismissible == TRUE) ? 'notice notice-warning is-dismissible' : 'notice notice-warning';
        self::$msg = __($msg, AWRAQ_TEXT_DOMAIN);
        add_action('admin_notices', array(self::$globalScopeName, 'awraq_notice'));
    }

    public static function success($msg = 'success', $is_dismissible = TRUE)
    {
        self::$class = ($is_dismissible == TRUE) ? 'notice notice-success is-dismissible' : 'notice notice-success';
        self::$msg = __($msg, AWRAQ_TEXT_DOMAIN);
        add_action('admin_notices', array(self::$globalScopeName, 'awraq_notice'));
    }

    public static function info($msg = 'info', $is_dismissible = TRUE)
    {
        self::$class = ($is_dismissible == TRUE) ? 'notice notice-info is-dismissible' : 'notice notice-info';
        self::$msg = __($msg, AWRAQ_TEXT_DOMAIN);
        add_action('admin_notices', array(self::$globalScopeName, 'awraq_notice'));
    }

    public static function  awraq_notice()
    {

        $class  = self::$class;
        $msg    = self::$msg;

        if ($class == '' and $msg == '') {
            return;
        }

        printf('%2$s', esc_attr($class), esc_html($msg));
    }
}
票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/400969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档