在WordPress中创建术语后显示管理员通知

时间:2019-10-27 15:12:45

标签: ajax wordpress

我不明白在WordPress中创建术语后如何显示通知。

我在自定义分类法中有一个自定义字段。在保存事件中,我检查该值是否不正确,在这种情况下,我想显示一条通知。

我在帖子编辑器中也遇到类似的情况,但是在这里我已经用add_settings_error和admin_notices解决了。

此方法在术语创建屏幕中不起作用,因为在这种情况下,存在AJAX请求并且页面不会重新加载。

以下是有关术语屏幕的代码:

add_action('create_account', 'save_start_amount_data__fr');
add_action('admin_notices', 'display_start_amount_data_validation_error__fr');

function save_start_amount_data__fr($term_id) {
  if (
    !isset($_POST['start_amount_nonce']) ||
    !wp_verify_nonce($_POST['start_amount_nonce'], 'start_amount_nonce')
  ) {return $term_id;}
  if (
    (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
  ) {return $term_id;}
  if (
    !isset($_POST['taxonomy']) ||
    $_POST['taxonomy'] != 'account' ||
    !current_user_can('edit_posts')
  ) {return $term_id;}
  if (
    !isset($_POST['start_amount'])
  ) {return $term_id;}
  if (
    !preg_match('/^[-]?[0-9]+([,]?[0-9]{1,2})?$/', $_POST['start_amount'])
  ) {validate_start_amount_data__fr();}
  $start_amount = $_POST['start_amount'];
  $start_amount = sanitize_text_field($start_amount);
  update_term_meta($term_id, 'start_amount', $start_amount);
  return $term_id;
}

function validate_start_amount_data__fr() {
  add_settings_error(
    'incorrect_start_amount_value',
    'incorrect_start_amount_value',
    __('Please review the start amount value because it is in an incorrect format.', 'fr'),
    'error'
  );
  set_transient('settings_errors', get_settings_errors(), 30);
  return null;
}

function display_start_amount_data_validation_error__fr() {
  $errors = get_transient('settings_errors');
  if (!$errors) {return null;}
  $message  = '<div class="notice notice-error"><ul>';
  foreach($errors as $error) {
    $message .= '<li>' . $error['message'] . '</li>';
  }
  $message .= '</ul></div>';
  echo $message;
  delete_transient('settings_errors');
  remove_action('admin_notices', 'display_start_amount_data_validation_error__fr');
  return null;
}

我希望有人可以帮助我实现我的目标。

1 个答案:

答案 0 :(得分:0)

请参阅下面的“自定义帖子”上显示通知的方法。

看看过滤器“ redirect_post_location ”。

//Actions
$this->loader->add_action( 'admin_notices', $plugin_admin, 'general_admin_notice' );
$this->loader->add_action( 'save_post', $plugin_admin, 'admin_save_post' );
	

/**
 * Admin Save the Meta box values
 *
 * @since   1.0.0
 */
function admin_save_post( $id ) {

/* --- security verification --- */
if(!wp_verify_nonce($_POST['attachment_nonce'], plugin_basename(__FILE__))) {
 return $id;
} // end if

if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
 return $id;
} // end if

if('page' == $_POST['post_type']) {
 if(!current_user_can('edit_page', $id)) {
   return $id;
 } // end if
} else {
   if(!current_user_can('edit_page', $id)) {
       return $id;
   } // end if
} // end if
/* - end security verification - */

// Make sure the file array isn't empty
if(!empty($_FILES['secure_doc_attachment']['name'])) {

    $upload = $this->admin_upload_file( $_FILES , $id );

		if (!$upload){
			add_filter('redirect_post_location', function($loc) {
				 	 return add_query_arg( 'error', 1, $loc );
			  });
			 return $post_id;
		}

}
}

/**
* Admin Notice
*
* @since   1.0.0
*/
function general_admin_notice(){

global $pagenow;

if ( 'post.php' === $pagenow && isset($_GET['post']) && 'custom-post' === get_post_type( $_GET['post'] ) ){

   if ( isset($_GET['error'])) {

	 echo '<div class="notice notice-error is-dismissible">
	 		<p>Error uploading the attachment.</p>
	 </div>';

 }
   
}

}

在此处查看其他有用的链接: https://wordpress.stackexchange.com/questions/124132/admin-post-update-redirection-to-posts-screen

关于。 埃德。