正确设置管理员通知

时间:2017-10-29 15:41:42

标签: wordpress woocommerce hook-woocommerce

我正在构建一个运输插件,如果订单出现问题,我需要 通知管理员。

当发生类似这样的事情时,建议添加/存储通知(不是来自用户)的方法是什么,所以当管理员检查时会出现错误?

我已经尝试过以下但不确定它是如何按需运作的。

$result = $this->__make_soap_request($bill);
          if(!$result) return WC_Admin_Notices::add_custom_notice('billl_error','<div id="message" class="error notice notice-error is-dismissible"><p>Error creating waybill</p><button type="button" class="notice-dismiss"><span class="screen-reader-text">Dismiss this notice.</span></button></div>');
          elseif($result->Bill->Result == false)
          {
            WC_Admin_Notices::add_custom_notice('billl_error',sprintf('<div id="message" class="error notice notice-error is-dismissible"><p>CreateWayBillResult: %s</p><button type="button" class="notice-dismiss"><span class="screen-reader-text">Dismiss this notice.</span></button></div>',$result->Bill->Result->Message));
            remove_action('wc_custom_createbill', [$this, 'createbill'], 1, 0);
            return false;
          }

2 个答案:

答案 0 :(得分:2)

您需要在某个地方存储选项/标记,以便在取消之前显示管理员通知。因此,当出现问题时,您需要执行以下操作:

<?php
  if( !$result ){
    update_option( 'billl_errors', 'Error creating waybill' );
  }

然后,您将在admin_notices钩子中检查它并根据需要显示它:

<?php
  function my_has_billl_errors(){
    if( current_user_can( 'manage_options' ) && get_option( 'billl_errors' ) ){
      sprintf(
        '<div class="notice notice-error is-dismissible"><p>%s</p></div>',
        get_option( 'billl_errors' )
      );
    }
  }
  add_action( 'admin_notices', 'my_has_billl_errors' );

当邮件被删除时,你需要处理一些东西(它应delete_option( 'billl_errors' )或设置一个用户元,以便为那个用户隐藏它(如果你还需要别人看到它)。

当然,扩展它以满足您的需求,但这是实现它的方法。然后,只要出现错误,只要该选项在数据库中,任何管理员用户都将看到该消息。

答案 1 :(得分:1)

我认为更好的实现方法是使用类“Bill_Error_Message”:

class Bill_Error_Message {
    private $_message;

    function __construct( $message ) {
        $this->_message = $message;

        add_action( 'admin_notices', array( $this, 'render' ) );
    }

    function render() {
        printf( '<div class="updated">%s</div>', $this->_message );
    }
}

这允许您在呈现之前随时实例化消息:

if ( $error ) {
    new Bill_Error_Message( "Error creating waybill" );
}