Как задать значение по умолчанию для нового мета-поля в wordpress?

209
23 февраля 2018, 15:28

Есть сайт на 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 = 'Запчасть'
Answer 1

Более правильно в даном случае использывть средства 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

READ ALSO
C# Чтение из массива

C# Чтение из массива

Помогите понять почему вылетает с ошибкой "SystemFormatException: Входная строка имела неверный формат

342
Дописать текст в файл

Дописать текст в файл

Здраствуйте, я б хотел узнать, возможно ли записать данные в файлtxt формата в определенной позиции, что-то на примере бинарных файлов, где...

235
В потоке с переменной происходит какой-то бред!

В потоке с переменной происходит какой-то бред!

(recvd[0] - текст, recvd[1] - имя), это все работает в отдельном потоке

195
Не редактируются и не удаляются данные в БД, EF6 C# MVC

Не редактируются и не удаляются данные в БД, EF6 C# MVC

Добрый день! Подскажите как решить вопрос с записью в БД измененных данных или удалением ихДанные во view выводятся, в контроллер передаются,...

208