Я пытаюсь обновить настраиваемое поле, подключившись к действию 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);