Есть сайт на wordpress с большим количеством объявлений (тип записи, созданный темой). Я добавил для объявлений новое произвольное мета-поле cp_wholespare, которое имеет только 2 значения (Запчасть|автомобиль целиком), которое при редактировании выбирается радиокнопкой. Проблема в том, что в теле объявления хоть и выбрано активным первое из имеющихся значений по умолчанию (запчасть), но в базе данных оно не прописано и соответственно при фильтрации по этому полю не ищет.
Если устанавливать переключатель вручную, то в поиске по мета-полю в таблице находит значения согласно структуры
SELECT * FROM `wp_postmeta`
meta_id post_id meta_key meta_value
459584 20025 cp_wholespare автомобиль целиком
459621 20018 cp_wholespare Запчасть
Вопрос: как задать значение по умолчанию для этого поля сразу для всех объявлений?
Все объявления у меня получилось выбрать вот так:
SELECT *
FROM wp_posts
INNER JOIN wp_postmeta
ON wp_posts.ID = wp_postmeta.post_id
WHERE 1=1
AND wp_posts.post_type = 'ad_listing'
AND wp_posts.post_status = 'publish'
AND wp_postmeta.meta_key = 'cp_category'
А как теперь всем присвоить мета-поле 'cp_wholespare' со значением 'Запчасть'? Так?
UPDATE *
FROM wp_posts
INNER JOIN wp_postmeta
ON wp_posts.ID = wp_postmeta.post_id
WHERE 1=1
AND wp_posts.post_type = 'ad_listing'
AND wp_posts.post_status = 'publish'
AND wp_postmeta.meta_key = 'cp_category'
ON wp_postmeta.meta_key = 'cp_wholespare'
SET wp_postmeta.meta_value = 'Запчасть'
Более правильно в даном случае использывть средства WP, тем более функцию добавления поля можно выполнить в будущем. Принцип:
Выбриаем нужные посты с БД запросом
$args = [
'post_type' => 'ad_listing',
'posts_per_page' => -1,
'meta_query' => [
'key' => 'cp_category',
'compare' => 'EXIST'
]
];
Далее запускаем цикл проверки метаключа на существование и обновляем его если есть, если нету то добавляем. Запускаем нашу функцию один раз с темой например(вставляем код ниже в functions.php темы и раз обновляем страницу, потом код можно убрать):
function custom_upd_meta(){
$args = [
'post_type' => 'ad_listing',
'posts_per_page' => -1,
'meta_query' => [
'key' => 'cp_category',
'compare' => 'EXIST'
]
];
$post_list = new WP_Query($args);
if($post_list->have_posts()) : while ($post_list->have_posts()) : $post_list->the_post();
$id = get_the_ID();
if(get_post_meta($id,'cp_wholespare',true)==false) :
add_post_meta($id,'cp_wholespare', 'Запчасть');
endif;
endwhile;
endif;
}
add_action('update_my_meta','custom_upd_meta');
do_action('update_my_meta');
Код добавит ключ к посту если он не существует, если нужно обновить, то вместо add_post_meta просто используйте update_post_meta
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости