我正在构建一个运输插件,如果订单出现问题,我需要 通知管理员。
当发生类似这样的事情时,建议添加/存储通知(不是来自用户)的方法是什么,所以当管理员检查时会出现错误?
我已经尝试过以下但不确定它是如何按需运作的。
$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;
}
答案 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" );
}