2015-10-28 3 views
0

Я хочу обновить (изменить) значение настраиваемого поля (логотипа), только если другое пользовательское поле имеет указанное условие, тогда только если пользовательское поле «магазин» является «Amazon». У меня есть этот запрос,Wordpress обновить настраиваемое поле с условием

UPDATE `wp_postmeta` SET `meta_key`="logo",`meta_value`="http://www.mywebsite.com/wp-content/uploads/logo-amazon.png" WHERE `meta_key` LIKE 'shop' AND `meta_value` LIKE 'Amazon' 

, но он не работает, он добавляет новую строку в таблице (я не знаю, как если я скажу, обновление ...). Не могли бы вы помочь? Заранее спасибо

ответ

0

Логика в вашем запросе неверна: вы пытаетесь изменить ключ и значение мета, хранящее значение магазина.

Что вы хотите сделать это:

UPDATE 
    `wp_postmeta` p1 
    INNER JOIN `wp_postmeta` p2 
    ON p1.post_id = p2.post_id 
SET 
    p2.meta_value="http://www.mywebsite.com/wp-content/uploads/logo-amazon.png" 
WHERE 
    p2.meta_key LIKE 'shop' AND p2.meta_value LIKE 'Amazon' AND 
    p1.meta_key = "logo" 

Он будет делать внутреннее соединение на обновление, чтобы получить сообщения идентификаторы, которые имеют мета shop набор для Amazon в p2, и обновить все мета от p1 есть мета ключ logo.

Хотя учитывая, что вы используете Wordpress, то вы могли бы сделать это с гораздо более простым способом:

$posts = get_posts(array(
    'meta_query' => array(
    array(
     'key' => 'shop', 
     'value' => 'Amazon', 
    ) 
) 
)); 
foreach($posts as $post) { 
    update_post_meta($post->ID, 'logo', 'http://www.mywebsite.com/wp-content/uploads/logo-amazon.png'); 
} 
+0

спасибо, это работает! – advalue

Смежные вопросы