Intereting Posts
Добавить атрибут к тегу тега для сообщения Может ли обратные ссылки на мой сайт увеличить мои шансы на отказ плагина Как вызвать пользовательские данные полей категории в теме? изменить изображения the_content для разных размеров (рабочий стол, планшет, мобильный)? Отладка отсутствующих элементов в таксономии Исключить родительские категории из the_category () в цикле Комментарии feed – Неопределенный именованный объект: ndash Сохранение социальной доли после изменения WordPress Permalinks Как можно добавить дополнения продукта WooCommerce на странице архива в кнопку добавления в корзину? Как добавить скрытые настраиваемые поля из wp-admin / post.php? как иметь исходящую электронную почту с реальным электронным знаком posttype и настраиваемые поля на многопользовательском Перенаправление пользователя при первом посещении на основе географического местоположения Относительное время – как рассчитать разницу между датой публикации и текущим временем Как проверить, если сообщение «не имеет термина» в условном выражении?

Добавление и обновление повторяющихся метаданных настраиваемых полей

У меня есть еще 20 часов, и я действительно могу помочь. Вот что я пытаюсь сделать. Для каждой записи добавьте метатет. Если мета-почта уже существует, обновите каждое поле в массиве. Точно так же, как это было бы с добавлением и обновлением одного настраиваемого поля, за исключением того, что оно повторяется на основе каждой записи.

Я знаю, как добавить мета-запись для каждой записи. Это простая часть, она добавляет ее для каждой записи, а затем обновляет ее, не добавляя больше до / после обновления, с которым мне сложно работать. Просто для того, чтобы написать это, просто добавьте повторяющиеся поля, основанные на каждой записи.

foreach ($response->records as $record) { $sales = 'ten'; update_repeating_meta('assigned-sales', $sales); } 

Функция:

 function update_repeating_meta($key, $value){ add_post_meta($this->current_post_id, $key, $value); } 

Все работает отлично. Вот что я до сих пор добавлял, а затем обновлял, это не работает:

 foreach ($response->records as $record) { $sales = 'ten'; update_repeating_meta('assigned-sales', $sales); } 

Новая функция:

 function update_repeating_meta($key, $value){ $post_meta = get_post_meta($this->current_post_id, $key); if(!empty($post_meta)){ foreach($post_meta as $key => $value) { update_post_meta($this->current_post_id, $key, $value); } } elseif(empty($post_meta)){ add_post_meta($this->current_post_id, $key, $value); } } 

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

Я бы очень признателен за помощь, если у кого-нибудь есть идеи.

Solutions Collecting From Web of "Добавление и обновление повторяющихся метаданных настраиваемых полей"

Поскольку вы используете один и тот же ключ для всех значений, которые вы можете просто использовать:

 update_post_meta($this->current_post_id, 'assigned-sales', $response->records); 

Это будет хранить весь массив в одной мета-записи с ключом «назначенных продаж». WordPress обновит значение, если оно существует, и создаст новое, иначе не нужно иметь логику для этого.

Если вы настаиваете на наличии отдельного мета-ключа для каждой записи массива, вы должны добавить какой-то индекс к каждому мета-ключу, чтобы сделать его уникальным (предполагается, что вы хотите, чтобы каждый из них, а не только последнее значение того же самого).

Я думаю, что это должно сделать трюк:

 foreach ($response->records as $key=>$record) { $sales = 'ten'; // <-- Where is this coming from? update_post_meta($this->current_post_id, 'assigned-sales-'.$key, $sales); } 

И здесь также логика добавления / обновления лишняя, и вам не нужна отдельная функция.

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

Если вы используете update_post_meta , мета-поле будет добавлено в сообщение с указанным key . Если key существует, мета-поле будет обновляться. Если есть несколько мета-полей с одним и тем же ключом, все они будут обновлены.

Чтобы добавить повторяющиеся поля, вы должны использовать add_post_meta с третьим параметром, установленным в false (он по умолчанию уже false ). Таким образом, не имеет значения, существует ли key или нет, добавляется новое мета-поле, поэтому вы можете иметь несколько мета-полей с одним и тем же key ; то есть повторяемые поля:

 add_post_meta( $post->ID, 'mykey', 'value' ); add_post_meta( $post->ID, 'mykey', 'another_value' ); 

Теперь, если я использую get_post_meta для mykey, я получаю две записи:

 // $meta_values will be an array with all entries for 'mykey' $meta_values = get_post_meta( $post->ID, 'mykey' ); // print "value" echo $meta_values[0]; // print "another_value" echo $meta_values[1]; 

Если вам нужно обновить определенную запись для «mykey», вам нужно указать старое значение, которое вы хотите обновить. Таким образом, обновляемое мета-поле может быть отделено от других мета-полей одним и тем же ключом:

 // only the entries for mykey with value "another_value" will be updated to "new_value" update_post_meta( $post->ID, 'mykey', 'new_value', 'another_value' );