欢迎使用WPSE。
需要注意的几个问题:
未定义$user\\u id,因此对wp\\u get\\u current\\u user()的调用将传递null值作为参数
$current_user = wp_get_current_user($user_id);. // $user_id is not defined
wp_get_current_user() 不接受参数。请参见此处的文档:https://developer.wordpress.org/reference/functions/wp_get_current_user/这一行$current_user->ID; 什么都不做。WP\\U用户类中没有ID方法。
您可以将该部分简化如下:
$current_user = wp_get_current_user();
$current_user->remove_role( \'subscriber\' );
$current_user->add_role( \'editor\' );
// Assign the ID from the current WP_User object to a var for use below
$user_id = $current_user->ID;
关于更新后与创建,
wp_update_post() 需要您正在更新的帖子的ID。您似乎将用户ID传递为
$my_post[\'import_id\'] 这是无效的。
您是否正在尝试使用用户信息更新用户对象或帖子?
EDIT: OP wishes to update the meta key/value of each post for the current author.
上面的代码解决了用户角色挑战,下面是一个模型,用于为特定用户编写的每个帖子更新帖子元。
注:update_post_meta() 需要post ID、meta\\u键(字段的slug)和要更新的每个字段的meta\\u值。https://developer.wordpress.org/reference/functions/update_post_meta/
// Create array of arguments for our query
$args = array(
\'author\' => $user_id, // defined above
\'post_status\' => \'publish\', // ignore deleted/drafted posts
\'fields\' => \'ids\' // we only need the IDs
);
// Query for posts by this author
$author_posts = new WP_Query( $args );
// WP_Query object contains lots of info; we only want the posts which will be an array if IDs based on our fields argument above.
$author_post_ids = $author_posts->posts; // array of IDs only
// Loop through each post by this author
foreach ( $author_post_ids as $post_id ) {
// On each loop iteration, update the post meta keys here
update_post_meta( $post_id, $meta_key, $meta_value );
}
EDIT 为OP添加实际的元键和值细节。
function update_role_and_post( $record ) {
if ( \'Confirm Premium Account\' !== $record->get_form_settings( \'form_name\' ) ) {
return;
}
// Update current user role to editor
$current_user = wp_get_current_user();
$current_user->remove_role( \'subscriber\' );
$current_user->add_role( \'editor\' );
// Create array of arguments for our query
$args = array(
\'author\' => $current_user->ID,
\'post_status\' => \'publish\',
\'fields\' => \'ids\'
);
// Query for posts by this author
$author_posts = new WP_Query( $args );
// Parse the post IDs from the rest of the WP_Query object
$author_post_ids = $author_posts->posts;
// Loop through each post by this author and update to premium
foreach ( $author_post_ids as $post_id ) {
update_post_meta( $post_id, \'subscription\', \'premium\' );
}
}