Вопрос или проблема
У меня есть несколько метаполей в WordPress, созданных темой, и я хочу обновить их с помощью PHP.
Мета поле хранит URL, и я хочу добавить некоторую строку после текущего URL в пользовательском метаполе.
Я пробовал этот метод
Назначить/обновить значение пользовательского поля для всех постов
и внес изменения
'post_category' => array(14,16,19);
чтобы выбрать определенную категорию, но это редактировало все посты всех категорий.
и использовал этот метод для изменения метаполя, но он удалил URL и изменил поле.
$dealcode = "&deal_code=coupon";
$urlvalue = get_post_meta( $post->ID, 'metakey', false);
$urlvalue = $urlvalue . $dealcode;
update_post_meta( $post->ID, 'metakey', $urlvalue );
Пожалуйста, может кто-то это исправить. Спасибо.
Хорошо, здесь немного предположений, поскольку вы опубликовали только части вашего кода, но… Я предполагаю, что ваш код выглядит так:
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'post_category' => array(14,16,19)
);
$posts = get_posts($args);
foreach ( $posts as $post ) {
$dealcode = "&deal_code=coupon";
$urlvalue = get_post_meta( $post->ID, 'metakey', false);
$urlvalue = $urlvalue . $dealcode;
update_post_meta( $post->ID, 'metakey', $urlvalue );
}
Если это так, проблема заключается в этой строке:
'post_category' => array(14,16,19);
Для WP_Query
нет аргумента post_category
…
Правильный аргумент — category__in
, поэтому ваш код должен выглядеть так:
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'category__in' => array(14,16,19)
);
$posts = get_posts($args);
foreach ( $posts as $post ) {
$dealcode = "&deal_code=coupon";
$urlvalue = get_post_meta( $post->ID, 'metakey', false);
$urlvalue = $urlvalue . $dealcode;
update_post_meta( $post->ID, 'metakey', $urlvalue );
}
PS. Поскольку вы используете только ID, нет смысла получать целые посты. Было бы гораздо эффективнее, если бы вы использовали fields => 'ids'
в вашем запросе.
Ответ или решение
Для обновления метаполей постов в WordPress с учетом специфических категорий вам нужно использовать правильные параметры запроса в функции get_posts()
. Ваша проблема заключается в том, что вы использовали неправильный аргумент post_category
, который не поддерживается в WP_Query. Вместо этого следует использовать category__in
.
Вот пример кода, который поможет вам обновить метаполя для постов, относящихся к определенным категориям:
// Задаем аргументы для получения постов
$args = array(
'post_type' => 'post', // Тип поста
'post_status' => 'publish', // Статус поста
'posts_per_page' => -1, // Получить все посты
'category__in' => array(14, 16, 19), // Указываем ID категорий
'fields' => 'ids' // Получаем только ID постов для повышения производительности
);
// Получаем посты согласно заданным аргументам
$posts = get_posts($args);
// Итерируем по полученным постам
foreach ($posts as $post_id) {
// Определяем строку для добавления
$deal_code = "&deal_code=coupon";
// Получаем текущее значение метаполя
$url_value = get_post_meta($post_id, 'metakey', true); // Используем 'true' для получения одного значения
// Проверяем, если метаполе не пустое
if (!empty($url_value)) {
// Обновляем значение, добавляя новый код
$url_value .= $deal_code;
update_post_meta($post_id, 'metakey', $url_value); // Обновляем метаполе
}
}
Важные моменты:
-
Использование ‘category__in’: Этот параметр позволяет выбирать посты, относящиеся к указанным категориям по их ID.
-
Параметр ‘fields’ => ‘ids’: Это улучшает производительность, так как вы получаете только ID постов, что уменьшает объем данных, передаваемых из базы данных.
-
Проверка на пустое значение: Прежде чем обновлять метаполе, полезно проверить, имеет ли оно текущее значение. Это предотвратит ошибки, если метаполе не существует или пустое.
-
Безопасность: Убедитесь в необходимости и безопасности любого добавляемого кода. Также рекомендуется создавать резервные копии базы данных перед выполнением массовых обновлений.
SEO-оптимизация:
Чтобы ваша страница была более удобной для поиска, включите в заголовок статьи важные ключевые слова, связанные с обновлением метаполей WordPress. Пример заголовка: «Как обновить метаполя постов в WordPress для конкретных категорий». Это повысит вероятность того, что пользователи найдут ваш пост через поисковые системы.
Если у вас возникнут дальнейшие вопросы или проблемы, не стесняйтесь обращаться за помощью!