_wp_ajax_add_hierarchical_term() │ WP 3.1.0
Handles adding a hierarchical term via AJAX.
Internal function — this function is designed to be used by the kernel itself. It is not recommended to use this function in your code.
Hooks from the function
Returns
null. Nothing (null).
Usage
_wp_ajax_add_hierarchical_term();
Changelog
| Since 3.1.0 | Introduced. |
_wp_ajax_add_hierarchical_term() wp ajax add hierarchical term code WP 7.0
function _wp_ajax_add_hierarchical_term() {
$action = $_POST['action'];
$taxonomy = get_taxonomy( substr( $action, 4 ) );
check_ajax_referer( $action, '_ajax_nonce-add-' . $taxonomy->name );
if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) {
wp_die( -1 );
}
$names = explode( ',', $_POST[ 'new' . $taxonomy->name ] );
$parent = isset( $_POST[ 'new' . $taxonomy->name . '_parent' ] ) ? (int) $_POST[ 'new' . $taxonomy->name . '_parent' ] : 0;
if ( 0 > $parent ) {
$parent = 0;
}
if ( 'category' === $taxonomy->name ) {
$post_category = isset( $_POST['post_category'] ) ? (array) $_POST['post_category'] : array();
} else {
$post_category = ( isset( $_POST['tax_input'] ) && isset( $_POST['tax_input'][ $taxonomy->name ] ) ) ? (array) $_POST['tax_input'][ $taxonomy->name ] : array();
}
$checked_categories = array_map( 'absint', (array) $post_category );
$popular_ids = wp_popular_terms_checklist( $taxonomy->name, 0, 10, false );
foreach ( $names as $category_name ) {
$category_name = trim( $category_name );
$category_nicename = sanitize_title( $category_name );
if ( '' === $category_nicename ) {
continue;
}
$category_id = wp_insert_term( $category_name, $taxonomy->name, array( 'parent' => $parent ) );
if ( ! $category_id || is_wp_error( $category_id ) ) {
continue;
} else {
$category_id = $category_id['term_id'];
}
$checked_categories[] = $category_id;
if ( $parent ) { // Do these all at once in a second.
continue;
}
ob_start();
wp_terms_checklist(
0,
array(
'taxonomy' => $taxonomy->name,
'descendants_and_self' => $category_id,
'selected_cats' => $checked_categories,
'popular_cats' => $popular_ids,
)
);
$data = ob_get_clean();
$add = array(
'what' => $taxonomy->name,
'id' => $category_id,
'data' => str_replace( array( "\n", "\t" ), '', $data ),
'position' => -1,
);
}
if ( $parent ) { // Foncy - replace the parent and all its children.
$parent = get_term( $parent, $taxonomy->name );
$term_id = $parent->term_id;
while ( $parent->parent ) { // Get the top parent.
$parent = get_term( $parent->parent, $taxonomy->name );
if ( is_wp_error( $parent ) ) {
break;
}
$term_id = $parent->term_id;
}
ob_start();
wp_terms_checklist(
0,
array(
'taxonomy' => $taxonomy->name,
'descendants_and_self' => $term_id,
'selected_cats' => $checked_categories,
'popular_cats' => $popular_ids,
)
);
$data = ob_get_clean();
$add = array(
'what' => $taxonomy->name,
'id' => $term_id,
'data' => str_replace( array( "\n", "\t" ), '', $data ),
'position' => -1,
);
}
$parent_dropdown_args = array(
'taxonomy' => $taxonomy->name,
'hide_empty' => 0,
'name' => 'new' . $taxonomy->name . '_parent',
'orderby' => 'name',
'hierarchical' => 1,
'show_option_none' => '— ' . $taxonomy->labels->parent_item . ' —',
);
/** This filter is documented in wp-admin/includes/meta-boxes.php */
$parent_dropdown_args = apply_filters( 'post_edit_category_parent_dropdown_args', $parent_dropdown_args );
ob_start();
wp_dropdown_categories( $parent_dropdown_args );
$supplemental = ob_get_clean();
$add['supplemental'] = array( 'newcat_parent' => $supplemental );
$response = new WP_Ajax_Response( $add );
$response->send();
}