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

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集