我有一个函数挂在
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
中选择名称,并且由于名称位于大引号中,我只需将其中的内容放入数组中进行检查(我使用简单的正则表达式检查大引号)。
然后检查通知字段是否存在 - 如果确实存在,请将其删除以避免重复消息。然后检查开始——第一个检查是检查场地是否“空”。如果不为空,则继续。然后,如果您的名字已经存在 - 请给出该消息。如果没有,请给出成功消息。
就是这样。
如果检查失败,您甚至可以阻止默认操作 - 这应该使用
阻止 ajax 触发event.preventDefault();
您需要将
event
放入
function intercept_ajax(event)
您还可以使用 wp_localize_script() 本地化成功和失败消息。
我希望这就是您正在寻找的。希望这有帮助。
类别可以,但标签不起作用