dow58115 2017-12-27 20:56
浏览 62
已采纳

在Wordpress中创建新标记时显示错误

I need to display an error when a user tries to create a new tag via a new WordPress Post.

Ex: A user with the classification of 'editor' goes to create a new post in WordPress and adds a tag that does not exist in the taxonomy I would like to disaplay an admin error at the top of the page upon hitting Publish or Update.

This is my code that shows the error

function my_error_notice() {
if ( !current_user_can( 'editor' ) )  {
    ?>
    <div class="error notice">
        <p><?php _e( 'Sorry only the Administrators are allowed to create new tags, please select from the prepopulated suggestions or contact an Administrator for more assistence.', 'my_plugin_textdomain' ); ?></p>
    </div>
    <?php
}

add_action( 'admin_notices', 'my_error_notice' );

this is the code that detects the new tag

add_action('create_term','undo_create_term',10, 3);

function undo_create_term ($term_id, $tt_id, $taxonomy) {
    if ( !current_user_can( 'editor' ) )  {
        if($taxonomy == 'post_tag') {
            wp_delete_term($term_id,$taxonomy);
        }
    }
}
  • 写回答

1条回答 默认 最新

  • doukong1391 2017-12-28 17:02
    关注

    You'll have to set a transient variable or similar strategy, because WP does a redirect after saving the post.

    Here is the basic idea. It's up to you to fine-tune it to work in your application:

    function my_error_notice() {
        $show_notice = get_transient('show_post_tag_notice');
        if ( ! $show_notice ) {
            return;
        }
    
        delete_transient('show_post_tag_notice');
    
        if ( !current_user_can( 'editor' ) )  { ?>
        <div class="error notice">
            <p><?php _e( 'Sorry only the Administrators are allowed to create new tags, please select from the prepopulated suggestions or contact an Administrator for more assistence.', 'my_plugin_textdomain' ); ?></p>
        </div>
        <?php
        }
    }
    
    add_action( 'admin_notices', 'my_error_notice' ); 
    
    add_action('create_term','undo_create_term',10, 3);
    
    function undo_create_term ($term_id, $tt_id, $taxonomy) {
        if ( !current_user_can( 'editor' ) )  {
            if($taxonomy == 'post_tag') {
                wp_delete_term($term_id,$taxonomy);
                set_transient('show_post_tag_notice', true);
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?