Есть сайт на 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
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Помогите понять почему вылетает с ошибкой "SystemFormatException: Входная строка имела неверный формат
Здраствуйте, я б хотел узнать, возможно ли записать данные в файлtxt формата в определенной позиции, что-то на примере бинарных файлов, где...
(recvd[0] - текст, recvd[1] - имя), это все работает в отдельном потоке
Добрый день! Подскажите как решить вопрос с записью в БД измененных данных или удалением ихДанные во view выводятся, в контроллер передаются,...