添加Wordpress类别时添加消息

时间:2016-05-14 14:21:04

标签: php jquery ajax wordpress wordpress-plugin

我有一个挂在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 )
                    {
                    }
                }
    }

在此先感谢,一直试图解决这个问题......

1 个答案:

答案 0 :(得分:0)

因此,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中选择名称,因为名称在引号中,我只是将其中的内容放在数组中以供检查(我使用简单的正则表达式检查卷曲引号)。

然后检查通知字段是否存在 - 是否确实将其删除以避免重复消息。然后检查开始 - 首先是检查领域的'空虚'。如果它不是空的,继续前进。然后,如果您的名字已存在 - 请提供该消息。如果没有,请给出成功消息。

就是这样。

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

触发
event.preventDefault();

您需要将event放入

function intercept_ajax(event)

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

我希望这就是你要找的东西。希望这有帮助。