Advertisements

bulk_edit_posts

Definition:
function bulk_edit_posts( $post_data = null ) {}

Process the post data for the bulk editing of posts.
Updates all bulk edited posts/pages, adding (but not removing) tags and categories. Skips pages when they would be their own parent or child.

Parameters

  • array $post_data: Optional, the array of post data to process if not provided will use $_POST superglobal.

Source code

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 )

			wp_die( __('You are not allowed to edit pages.'));

		else

			wp_die( __('You are not allowed to edit posts.'));

	}



	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']);



	$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' );

	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 {

				$tax_input[$tax_name] = preg_replace( '/\s*,\s*/', ',', rtrim( trim($terms), ' ,' ) );

				$tax_input[$tax_name] = explode(',', $tax_input[$tax_name]);

			}

		}

	}



	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();

	foreach ( $post_IDs as $post_ID ) {

		$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( $post_type_object->cap->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_mime_type'] = $post->post_mime_type;

		$post_data['guid'] = $post->guid;



		$post_data['ID'] = $post_ID;

		$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 );

		}



	}



	return array( 'updated' => $updated, 'skipped' => $skipped, 'locked' => $locked );

}

573

Advertisements

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: