WordPress开发函数bulk_edit_posts()

WordPress开发函数bulk_edit_posts()

432
2021-04-06 10:01:21

WordPress开发函数bulk_edit_posts(),处理帖子数据,以便对帖子进行批量编辑。

用法:

bulk_edit_posts( array $post_data = null )

描述

更新所有批量编辑的文章/页面,添加(但不删除)标签和类别。当他们是自己的父母或孩子时,他们会跳过一些页面。

参数

$post_data

(array) (可选) 如果没有提供,要处理的post数据数组将使用$_POST超全局变量。

默认值: null

来源

文件: 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 ) {

wp_die( __( 'Sorry, you are not allowed to edit pages.' ) );

} else {

wp_die( __( 'Sorry, 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'] );

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'] ) && (int) $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 ( (int) $page->ID === $parent ) {

$parent = (int) $page->post_parent;

break;

}

}

}

}

$updated = array();

$skipped = array();

$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, true ) )

|| ! 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, true ) ) {

$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_ID'] = $post_ID;

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

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

foreach ( array( 'comment_status', 'ping_status', 'post_author' ) as $field ) {

if ( ! isset( $post_data[ $field ] ) ) {

$post_data[ $field ] = $post->$field;

}

}

$post_data = _wp_translate_postdata( true, $post_data );

if ( is_wp_error( $post_data ) ) {

$skipped[] = $post_ID;

continue;

}

$post_data = _wp_get_allowed_postdata( $post_data );

if ( isset( $shared_post_data['post_format'] ) ) {

set_post_format( $post_ID, $shared_post_data['post_format'] );

}

// Prevent wp_insert_post() from overwriting post format with the old data.

unset( $post_data['tax_input']['post_format'] );

$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,

);

}

更新日志:

WordPress开发函数bulk_edit_posts() (https://www.wpzt.net/) WordPress开发教程 第1张

喜欢这个文章就点个赞分享给好友吧~

END

发表评论

一次支付终身使用
免费版本更新
靠谱的技术支持
成为会员