bulk_edit_posts
Process the post data for the bulk editing of posts.
Description
(array) bulk_edit_posts( (null) $post_data = null );
Updates all bulk edited posts/pages, adding (but not removing) tags and categories. Skips pages when they would be their own parent or child.
Returns (array)
Parameters (1)
- 0. $post_data — Optional. (null) =>
null
- Optional, the array of post data to process if not provided will use
$_POST
superglobal.
Usage
if ( !function_exists( 'bulk_edit_posts' ) ) { require_once ABSPATH . '/wp-admin/includes/post.php'; } // Optional, the array of post data to process if not provided will use $_POST superglobal. $post_data = null; // NOTICE! Understand what this does before running. $result = bulk_edit_posts($post_data);
Defined (1)
The function is defined in the following location(s).
- /wp-admin/includes/post.php
- function bulk_edit_posts( $post_data = null ) {
- global $wpdb;
- if ( empty($post_data) )
- $post_data = &$_POST;
- if ( isset($post_data['post_type']) )
- $ptype = get_post_type_object($post_data['post_type']);
- else
- $ptype = get_post_type_object('post');
- if ( !current_user_can( $ptype->cap->edit_posts ) ) {
- if ( 'page' == $ptype->name )
- else
- }
- if ( -1 == $post_data['_status'] ) {
- $post_data['post_status'] = null;
- unset($post_data['post_status']);
- } else {
- $post_data['post_status'] = $post_data['_status'];
- }
- unset($post_data['_status']);
- if ( ! empty( $post_data['post_status'] ) ) {
- $post_data['post_status'] = sanitize_key( $post_data['post_status'] );
- if ( 'inherit' == $post_data['post_status'] ) {
- unset( $post_data['post_status'] );
- }
- }
- $post_IDs = array_map( 'intval', (array) $post_data['post'] );
- $reset = array(
- 'post_author', 'post_status', 'post_password',
- 'post_parent', 'page_template', 'comment_status',
- 'ping_status', 'keep_private', 'tax_input',
- 'post_category', 'sticky', 'post_format',
- );
- foreach ( $reset as $field ) {
- if ( isset($post_data[$field]) && ( '' == $post_data[$field] || -1 == $post_data[$field] ) )
- unset($post_data[$field]);
- }
- if ( isset($post_data['post_category']) ) {
- if ( is_array($post_data['post_category']) && ! empty($post_data['post_category']) )
- $new_cats = array_map( 'absint', $post_data['post_category'] );
- else
- unset($post_data['post_category']);
- }
- $tax_input = array();
- if ( isset($post_data['tax_input'])) {
- foreach ( $post_data['tax_input'] as $tax_name => $terms ) {
- if ( empty($terms) )
- continue;
- if ( is_taxonomy_hierarchical( $tax_name ) ) {
- $tax_input[ $tax_name ] = array_map( 'absint', $terms );
- } else {
- $comma = _x( ', ', 'tag delimiter' );
- if ( ', ' !== $comma )
- $terms = str_replace( $comma, ', ', $terms );
- $tax_input[ $tax_name ] = explode( ', ', trim( $terms, " \n\t\r\0\x0B, " ) );
- }
- }
- }
- if ( isset($post_data['post_parent']) && ($parent = (int) $post_data['post_parent']) ) {
- $pages = $wpdb->get_results("SELECT ID, post_parent FROM $wpdb->posts WHERE post_type = 'page'");
- $children = array();
- for ( $i = 0; $i < 50 && $parent > 0; $i++ ) {
- $children[] = $parent;
- foreach ( $pages as $page ) {
- if ( $page->ID == $parent ) {
- $parent = $page->post_parent;
- break;
- }
- }
- }
- }
- $updated = $skipped = $locked = array();
- $shared_post_data = $post_data;
- foreach ( $post_IDs as $post_ID ) {
- // Start with fresh post data with each iteration.
- $post_data = $shared_post_data;
- $post_type_object = get_post_type_object( get_post_type( $post_ID ) );
- if ( !isset( $post_type_object ) || ( isset($children) && in_array($post_ID, $children) ) || !current_user_can( 'edit_post', $post_ID ) ) {
- $skipped[] = $post_ID;
- continue;
- }
- if ( wp_check_post_lock( $post_ID ) ) {
- $locked[] = $post_ID;
- continue;
- }
- $post = get_post( $post_ID );
- $tax_names = get_object_taxonomies( $post );
- foreach ( $tax_names as $tax_name ) {
- $taxonomy_obj = get_taxonomy($tax_name);
- if ( isset( $tax_input[$tax_name]) && current_user_can( $taxonomy_obj->cap->assign_terms ) )
- $new_terms = $tax_input[$tax_name];
- else
- $new_terms = array();
- if ( $taxonomy_obj->hierarchical )
- $current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'ids') );
- else
- $current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'names') );
- $post_data['tax_input'][$tax_name] = array_merge( $current_terms, $new_terms );
- }
- if ( isset($new_cats) && in_array( 'category', $tax_names ) ) {
- $cats = (array) wp_get_post_categories($post_ID);
- $post_data['post_category'] = array_unique( array_merge($cats, $new_cats) );
- unset( $post_data['tax_input']['category'] );
- }
- $post_data['post_type'] = $post->post_type;
- $post_data['post_mime_type'] = $post->post_mime_type;
- $post_data['guid'] = $post->guid;
- foreach ( array( 'comment_status', 'ping_status', 'post_author' ) as $field ) {
- if ( ! isset( $post_data[ $field ] ) ) {
- $post_data[ $field ] = $post->$field;
- }
- }
- $post_data['ID'] = $post_ID;
- $post_data['post_ID'] = $post_ID;
- $post_data = _wp_translate_postdata( true, $post_data );
- if ( is_wp_error( $post_data ) ) {
- $skipped[] = $post_ID;
- continue;
- }
- $updated[] = wp_update_post( $post_data );
- if ( isset( $post_data['sticky'] ) && current_user_can( $ptype->cap->edit_others_posts ) ) {
- if ( 'sticky' == $post_data['sticky'] )
- stick_post( $post_ID );
- else
- unstick_post( $post_ID );
- }
- if ( isset( $post_data['post_format'] ) )
- set_post_format( $post_ID, $post_data['post_format'] );
- }
- return array( 'updated' => $updated, 'skipped' => $skipped, 'locked' => $locked );
- }