添加Wordpress类别时添加消息

问题描述 投票:0回答:2

我有一个函数挂在

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 )
                    {
                    }
                }
    }

预先感谢,已经尝试解决这个问题有一段时间了......

php jquery ajax wordpress
2个回答
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() 本地化成功和失败消息。

我希望这就是您正在寻找的。希望这有帮助。


0
投票

类别可以,但标签不起作用

© www.soinside.com 2019 - 2024. All rights reserved.