Не удалось сохранить или обновить постмету для пользовательского типа сообщения посредством действия с помощью save_post hook

Я пытаюсь обновить настраиваемое поле, подключившись к действию save-post , но по причинам, которые я не могу понять, он не работает.

Следующая функция помещается в functions.php темы:

 function save_address_meta() { $meta = get_post_meta( get_the_ID() ); $address = $meta['address']; update_post_meta(get_the_ID(), $address, 'test'); } add_action( 'save_post', 'save_address_meta', 50 ); 

Я также попытался использовать pre_post_update , так как я понимаю, что save_post фактически не срабатывает, если только что-то, кроме настраиваемого поля, не обновляется в сообщении, но и не удачи в этом.

Я потратил несколько часов на поиск решений по stackexchange и различным другим источникам в Интернете, но просто не подходит. Это глупая версия исходного кода, но даже в этом базовом состоянии она, похоже, не работает.

В основном, я пытаюсь получить соответствующее поле в вопросе, а затем обновить его с строковым значением.

Если I print_r$meta array, значение настраиваемого поля появится в массиве следующим образом:

  [address] => Array ( [0] => 50 Call Lane Leeds LS1 6DT United Kingdom ) 

Я также попытался получить доступ к этому настраиваемому полю в функции выше, используя $address = $meta['address'][0] .
Я могу выделить значение ключа таким образом, но если я не ошибаюсь, это ключ, который мне понадобится для ссылки, чтобы строка в третьем аргументе обновила значение по назначению.

Попробуйте изменить update_post_meta(get_the_ID(), $address, 'test'); to update_post_meta(get_the_ID(), 'address', 'test');

save_post будет срабатывать всякий раз, когда WordPress сохраняет сообщение в базе данных. Это включает в себя сохранение изменений WP, которые будут иметь другой идентификатор сообщения, чем фактический пост. Скорее всего, вы получаете и сохраняете мета-сообщение вместо ревизии вместо фактической записи.

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

 function wpse_261414_save_post( $post_id, $post, $update ) { //* Make sure this isn't a post revision if( wp_is_post_revision( $post_id ) ) { return; } $meta = get_post_meta( $post_id ); $address = $meta[ 'address' ]; update_post_meta( $post_id, $address, 'test' ); } add_action( 'save_post', 'wpse_261414_save_post', 10, 3 ); 

Почему бы вам не попробовать что-то подобное;

 function save_address_meta() { global $post; if($post->post_type == 'your-custom-post-type'){ $address_field = 'test'; //Get your address field here update_post_meta($post->ID, 'address', 'test'); } } add_action( 'save_post', 'save_address_meta' ); 

И вы можете получить значение своего поля в другом месте, например, внутри цикла;

 $address = get_post_meta($post->ID, 'address', true);