wp_ajax_add_link_category()
云策文档标注
概述
wp_ajax_add_link_category() 是一个用于通过 AJAX 添加链接分类的 WordPress 函数。它处理用户提交的分类名称,验证权限并插入新分类到数据库,最后返回 AJAX 响应。
关键要点
- 函数通过 AJAX 处理添加链接分类的请求,确保安全性和用户权限验证。
- 使用 check_ajax_referer() 验证 AJAX 请求,防止外部攻击。
- 检查当前用户是否具有 manage_terms 权限,否则通过 wp_die() 终止执行。
- 解析用户输入的分类名称,使用 sanitize_title() 生成 slug,并调用 wp_insert_term() 插入新分类。
- 返回 WP_Ajax_Response 对象,包含新分类的 ID 和名称,用于前端更新。
代码示例
function wp_ajax_add_link_category( $action ) {
if ( empty( $action ) ) {
$action = 'add-link-category';
}
check_ajax_referer( $action );
$taxonomy_object = get_taxonomy( 'link_category' );
if ( ! current_user_can( $taxonomy_object->cap->manage_terms ) ) {
wp_die( -1 );
}
$names = explode( ',', wp_unslash( $_POST['newcat'] ) );
$x = new WP_Ajax_Response();
foreach ( $names as $cat_name ) {
$cat_name = trim( $cat_name );
$slug = sanitize_title( $cat_name );
if ( '' === $slug ) {
continue;
}
$cat_id = wp_insert_term( $cat_name, 'link_category' );
if ( ! $cat_id || is_wp_error( $cat_id ) ) {
continue;
} else {
$cat_id = $cat_id['term_id'];
}
$cat_name = esc_html( $cat_name );
$x->add(
array(
'what' => 'link-category',
'id' => $cat_id,
'data' => " $cat_name",
'position' => -1,
)
);
}
$x->send();
}注意事项
- 函数依赖于 $_POST['newcat'] 参数,应确保前端正确传递以逗号分隔的分类名称字符串。
- 使用 wp_unslash() 处理输入数据,避免转义字符问题。
- 插入分类时,如果 slug 为空或 wp_insert_term() 返回错误,会跳过该分类继续处理。
- 返回的 AJAX 响应使用 esc_html() 转义分类名称,确保 HTML 安全。
- 函数自 WordPress 3.1.0 版本引入,使用时需考虑版本兼容性。
原文内容
Handles adding a link category via AJAX.
Parameters
$actionstringrequired-
Action to perform.
Source
function wp_ajax_add_link_category( $action ) {
if ( empty( $action ) ) {
$action = 'add-link-category';
}
check_ajax_referer( $action );
$taxonomy_object = get_taxonomy( 'link_category' );
if ( ! current_user_can( $taxonomy_object->cap->manage_terms ) ) {
wp_die( -1 );
}
$names = explode( ',', wp_unslash( $_POST['newcat'] ) );
$x = new WP_Ajax_Response();
foreach ( $names as $cat_name ) {
$cat_name = trim( $cat_name );
$slug = sanitize_title( $cat_name );
if ( '' === $slug ) {
continue;
}
$cat_id = wp_insert_term( $cat_name, 'link_category' );
if ( ! $cat_id || is_wp_error( $cat_id ) ) {
continue;
} else {
$cat_id = $cat_id['term_id'];
}
$cat_name = esc_html( $cat_name );
$x->add(
array(
'what' => 'link-category',
'id' => $cat_id,
'data' => "<li id='link-category-$cat_id'><label for='in-link-category-$cat_id' class='selectit'><input value='" . esc_attr( $cat_id ) . "' type='checkbox' checked='checked' name='link_category[]' id='in-link-category-$cat_id'/> $cat_name</label></li>",
'position' => -1,
)
);
}
$x->send();
}
Changelog
| Version | Description |
|---|---|
| 3.1.0 | Introduced. |