我有一个挂在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 )
{
}
}
}
在此先感谢,一直试图解决这个问题......
答案 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()本地化您的成功和失败的消息。
我希望这就是你要找的东西。希望这有帮助。