添加Wordpress类别时添加消息


Add a message when adding Wordpress Category

我有一个挂在created_term上的函数,我正试图添加一条返回成功或错误消息的消息。类别是用Ajax创建的,我尝试过一些方法,但它会覆盖Wordpress错误并导致错误。

到目前为止我的代码:

add_action( 'created_term', 'push_term', 20, 3);
function push_term( $term_id, $tt_id, $taxonomy ) { 
                $contentarray = array();
                $term = get_term_by( 'id', $term_id, $taxonomy);
                if(!empty($term->name)){ $contentarray['category_name'] = $term->name; }
                if(!empty($term->slug)){ $contentarray['category_slug'] = $term->slug; }
                if(!empty($term->description)){ $contentarray['category_desc'] = $term->description; }
                $category = $taxonomy.'_#'.$term_id;
                if(post_content($apikey, $websitekey, $category, $contentarray)){
                    if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX )
                    {
                    }
                }else{
                    if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX )
                    {
                    }
                }
    }

提前感谢,我已经想了一段时间了。。。

所以WordPress中的类别已经由AJAX创建了,据我所知,你不能像那样"劫持"另一个AJAX调用(如果可以的话,那将是一个很大的安全风险)。

我这样做的方式是将以下代码放在category.js文件中,我在主题的functions.php文件中这样排队:

/********* Backend Scripts ***********/
if ( !function_exists( 'mythemeslug_backend_scripts' ) ) {
    function mythemeslug_backend_scripts($menu_slug) {
        if ($menu_slug == 'edit-tags.php') {
            wp_enqueue_script( 'mythemeslug_cat_check', get_template_directory_uri().'/js/category.js' );
        }
    }
}

category.js中,我添加了以下代码:

jQuery(document).ready(function($){
    $('#submit').on('click', intercept_ajax);
    function intercept_ajax(){
        var $this = $(this);
        //Name input field check
        var cat_name_input_value = $('#tag-name').val();
        var cat_names_array = [];
        $('#the-list .name').each(function(){
            var cat_name = $(this).find('.row-title').attr('aria-label');
            if ( cat_name !== undefined ) {
                cat_names_array.push(cat_name.match(/“(.*?)”/)[1]);
            }
        });
        if($('.field_notice').length){
            $('.field_notice').remove();
        }
        if (!cat_name_input_value) {
            $('#tag-name').after('<p class="field_notice">Field empty!</p>');
        } else{
            if($.inArray(cat_name_input_value, cat_names_array) != -1) {
                $('#tag-name').after('<p class="field_notice">Category '+cat_name_input_value+ ' already exists!</p>');
            } else{
                $('#tag-name').after('<p class="field_notice">Category '+cat_name_input_value+ ' created!</p>');
            }
        }
    }
});

因此,此代码仅适用于edit-tags.php页面(类别屏幕)。每次单击提交按钮时,都会进行AJAX调用,所以我们可以在相同的提交-单击事件中添加我们的代码。

intercept_ajax功能中,您可以添加您的支票。首先获取name字段的值,然后需要获取右侧表中的所有现有名称。这就是为什么我把所有这些名字放在一个数组中。这里需要注意的是,.text().html()将返回名称,但如果您有子类别或子类别,则前面会有短划线。因此,我从aria-label中选择名称,由于名称在大引号中,我只将其中的内容放在数组中进行检查(我对大引号使用了简单的regex检查)。

然后检查通知字段是否存在——如果它确实删除了它以避免重复消息。然后检查开始了——第一个是检查字段的"空"。如果它不是空的,继续前进。然后,如果你的名字已经存在,就发出这个信息。如果没有,就发出成功的信息。

就是这样。

如果检查失败,您甚至可以阻止默认操作——这应该会阻止ajax使用启动

event.preventDefault();

您需要将event放入

function intercept_ajax(event)

此外,您还可以使用wp_localize_script()本地化成功和失败消息。

我希望这就是你想要的。希望这能有所帮助。