Пользователь meta для публикации

Я создал поле (не acf) в профиле пользователя. Поле называется «genere», и у меня есть другое поле в сообщении, созданное с ACF, которое называется тем же «genere», но оно вызывается в моей функции с помощью $field_key .

Теперь я могу передать это поле usermeta в сообщение автора в acf_field с acf_update_field но только после того, как я acf_update_field кнопку «Обновить пользователя» в edit-user.php .

На автора есть только одно сообщение, не более двух по ошибке. Поэтому, когда я нажимаю «Обновить пользователя» в user-edit.php, пост автора также обновляется. Я бы хотел, чтобы каждое значение usermeta из поля «genere» автоматически передавалось на уже созданный пост автора .

Другая моя предыдущая функция создает пост автора при создании этого пользователя. Когда я обновляю пользователя, его сообщение уже существует. Поэтому для будущих публикаций автора мне не нужны решения, потому что, обновляя профиль, значение поля проходит хорошо и работает. Проблема заключается только в сообщениях, которые уже созданы (в моей теме по умолчанию у каждого пользователя есть сообщение).

Есть 2500 пользователей, и мне нужно будет передать значение в сообщение без ручного обновления страницы user-edit.php .

Это мой код в файле functions.php

 function save_acf($user_id) { global $post; $args = array( 'author' => $user_id, ); $myposts = get_posts( $args ); foreach( $myposts as $post ) : setup_postdata($post); $numero = $post->ID; endforeach; if( isset($_POST['genere']) ) { $post_id = $numero ; $field_key = "field_5941b968b5ad6"; $value = sanitize_text_field( $_POST['genere'] ) ; update_field( $field_key, $value, $post_id );} } add_action( 'user_register', 'save_acf'); add_action( 'personal_options_update', 'save_acf' ); add_action( 'edit_user_profile_update', 'save_acf' ); 
  • Вероятно, действия user_register и personal_options_update не влияют

РЕДАКТИРОВАТЬ

С предложениями hwl в его ответе я нашел это решение для работы.

Массовое действие> получить пользователь by usermeta из MySql> получить идентификатор пользователей с foreach> обновить postmeta с сообщением foreach

 add_filter( 'bulk_actions-edit-post', 'register_my_bulk_actions2' ); function register_my_bulk_actions2($post_ids) { global $wpdb; $users = $wpdb->get_results( "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'genere'AND meta_value = 'Maschio' " ); foreach ( $users as $a ) { $author_ids[] = $a->user_id; } $args = array( 'posts_per_page' => -1 , 'author__in' => $author_ids, ); $myposts = get_posts( $args ); foreach( $myposts as $post ) : $numero = $post->ID; update_post_meta( $numero, 'genere', 'Maschio' ); endforeach; } 

С наилучшими пожеланиями

Solutions Collecting From Web of "Пользователь meta для публикации"

Я думаю, что по крайней мере один подход к этому был бы следующим процессом: – получить все сообщения от авторов – foreach post: – получить автора user_meta genere – обновить post_meta с этим значением

Я не тестировал ни один из приведенных ниже кодов, поэтому я бы не стал копировать / вставлять. Но, надеюсь, чтение через него поможет вам в правильном направлении.

Я связался с информацией об используемых функциях / классах в конце.


 function update_post_meta_with_user_meta() { //setup arguments to only get users with author role $user_args = array( 'role' => 'author', ); $authors = get_users( $user_args ); //the below foreach could be replaced by adding something like: // fields => array( 'ID' ) to $user_args //instead I am just going through returned array of WP_User objects // and putting IDs into array foreach ( $authors as $a ) { $author_ids[] = $a->ID; } //setup post query arguments to only give us posts with authors in author_id array //which means only posts that have an author with the WP role of author // should exclude Editors, Admins, etc. that maybe have authored posts $post_args = array( 'author__in' => $author_ids, ); //a new WP_Query with these args $post_query = new WP_Query( $post_args ) ) ); //make sure we have posts returned if ( $post_query->have_posts() ) { //loop while ( $post_query->have_posts() ) { $post_query->the_post(); //set $post_id variable to current post $post_id = get_the_id(); //get author meta for author of current post $author_genere = get_the_author_meta('genere'); //update the meta of the current post (by ID) // with the value of its author's user meta key update_post_meta( $post_id, 'genere', $author_genere ); } //reset the postdata wp_reset_postdata(); } } //hook the above to init add_action( 'init', 'update_post_meta_with_user_meta' ); 

  • get_users()

  • WP_Query

  • get_the_id()
  • get_the_author_meta()

  • update_post_meta()

  • init hook