函数文档

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.