Intereting Posts
Можете ли вы экспортировать настройки темы из WordPress Multisite? Отключить плагин от обновления? Выполнение перенаправления после действия пользователя список элементов дочерних страниц (1 уровень с мета-ключами) Разработка плагинов – загрузка Javascript и Flash Экспорт базы данных WP для импорта с использованием WP-CLI в Vagrant Box Написание менее ненужного кода с помощью WordPress «Мастер» WordPress Multisite – Синхронизация базы данных Отображать последнее сообщение в зависимости от содержимого Meta Box Производительность при получении метаданных для почты, полученной с помощью метазначения За исключением необработанного SQL, могу ли я запросить несколько метаданных вложений, имеющих данный массив? Вложенные короткие коды не работают на моей странице WordPress 4.8 Указанное количество столбчатых сообщений, которые не отображаются правильно Кто-нибудь использовал плагин wordpress w3-total-cache на Dreamhost VPS успешно? Как мы можем распечатать общее количество сообщений, отфильтрованных по типу и типу сообщений?

Как написать: $ wpdb-> update с WHERE NOT value pair в массиве

Мне нужно обновить все мета-ключи в таблице postmeta, которые имеют значение, отличное от 0, до значения 0.

Я пробовал это .. нет любви (хотя я не могу понять, почему ….):

$status = $wpdb->query("UPDATE {$wpdb->prefix}postmeta SET meta_value=0 WHERE meta_key = _wti_like_count AND meta_value <> '0'"); 

Я придерживаюсь этой концепции, но как сказать «! 0» НЕ 0 в списке клавиш?

 $wpdb->update('wp_postmeta', array('_wti_like_count' => '0'), array('_wti_like_count' => '0')); 

Благодаря тонну!

UPDATE: я исправил свой $wpdb->query следующим образом, и он работает:

 $status = $wpdb->query("UPDATE {$wpdb->prefix}postmeta SET meta_value='0' WHERE meta_key = '_wti_like_count' AND meta_value <> '0'"); 

Тем не менее, мне все равно хотелось бы узнать, есть ли способ передать массив пар ключей в параметр WHERE параметра $wpdb->update и запросить значение a != .

Solutions Collecting From Web of "Как написать: $ wpdb-> update с WHERE NOT value pair в массиве"

$wpdb класса $wpdb

Вы можете использовать все таблицы WordPress по умолчанию:

  • $GLOBALS['wpdb']->postmeta

поэтому нет необходимости использовать prefix и т. д.

meta_query

Как видно из документации по параметрам поля Custom , нет ничего похожего на оператор <> (или, другими словами: «не равно»). Эквивалентный оператор в WP должен быть != (Человеческие слова: «нет») или NOT LIKE .

Поэтому просто сделайте следующее:

 $query = new WP_Query( array( 'meta_query' => array( array( 'key' => '_wti_like_count', 'value' => '0', 'compare' => 'NOT LIKE', # 'type' => 'numeric' ) ) ) ); 

Это будет запрашивать все ваши сообщения с этим метазначением. Меня удивляет, почему вы получили string как integer . Я бы этого не сделал, особенно если я использую счетчик. Посмотрите, что я прокомментировал: type , который позволит вам – в дальнейшем – более конкретные запросы.

Обновление мета-записей

Затем просто пропустите их и обновите значения.

 if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); # Do debugging, logging or sleep() here to avoid timeouts update_post_meta( '_wti_like_count', '0', true ); # I still believe it should be an INTeger update_post_meta( '_wti_like_count', 0, true ); } } 

Не похоже, что можно использовать! = В том месте. Вот соответствующий код метода update() :

 $where_formats = $where_format = (array) $where_format; foreach ( (array) array_keys( $where ) as $field ) { if ( !empty( $where_format ) ) $form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0]; elseif ( isset( $this->field_types[$field] ) ) $form = $this->field_types[$field]; else $form = '%s'; $wheres[] = "`$field` = {$form}"; } 

$wheres[] сообщает. Он показывает только = когда-либо. Этот массив используется позже:

 $sql = "UPDATE `$table` SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres ); 

В вашем случае запрос мог бы работать без проверки того, что значение не равно 0 . Результат был бы таким же (хотя было бы затронуто больше строк), но похоже, что этот метод ограничен только = в предложениях WHERE.

 add_filter( 'query', 'query_report', 10000 ); function query_report($sql){ var_dump($sql); return $sql; }