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);
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮