WordPress как на ладони

Запись в БД — обновить метаполя для разных постов в одном запросе

Делаю небольшой парсер, нужно сразу несколько значений обновить в БД

использую вот такой метод:

$post_ids = array(3,4);
$post_title = array('title3', 'title4');

wpdb_update( $wpdb->prefix . 'tablename', [ 'meta_value'=> $post_title ], [ 'post_id' => $post_ids ] );

Нужно, одновременно обновить несколько значений

Тоесть в строке:

post_id => 3 обновить meta_value => title3
post_id => 4 обновить meta_value => title4

Это для примера только 2 значения, массивы могут быть и больше. Можно для этого использовать цикл foreach или есть другой метод? Желательно с наглядным примером.

0
lethalblo
1.1 года назад 15
  • 0
    Kama9619

    Тут думаю проще свой запрос создать.

    Чтобы обновить различные значения для различных конкретных идентификаторов (ID) в одном запросе, вы можете использовать оператор CASE в UPDATE запросе:

    UPDATE wp_postmeta
    SET meta_value = 
      CASE
    	WHEN post_id = post1 THEN new_value1
    	WHEN post_id = post2 THEN new_value2
    	...
      END
    WHERE post_id IN (post1, post2, ...) AND meta_key = 'my_meta_key';
    lethalblo 1.1 года назад

    Обхожусь пока вот таким вариантом:

    $array = array('заголовок 1', 'заголовок 2', 'заголовок 3', 'заголовок 4');
    $array_img = array('картинка 1', 'картинка 2', 'картинка 3', 'картинка 4');
    $array_link = array('ссылка 1', 'ссылка 2', 'ссылка 3', 'ссылка 4');
    
    $wpdb->update( $wpdb->prefix . 'tablename', [ 'meta_value' => $array[0], 'meta_key' => $array_img[0], 'meta_link' => $array_link[0]  ], [ 'user_id' => 1 ] );
    $wpdb->update( $wpdb->prefix . 'tablename', [ 'meta_value' => $array[1], 'meta_key' => $array_img[1], 'meta_link' => $array_link[1]  ], [ 'user_id' => 2 ] );
    $wpdb->update( $wpdb->prefix . 'tablename', [ 'meta_value' => $array[2], 'meta_key' => $array_img[2], 'meta_link' => $array_link[2]  ], [ 'user_id' => 3 ] );
    $wpdb->update( $wpdb->prefix . 'tablename', [ 'meta_value' => $array[3], 'meta_key' => $array_img[3], 'meta_link' => $array_link[3]  ], [ 'user_id' => 4 ] );
    lethalblo 1.1 года назад

    Подскажи условие if которое проверит есть ли в бд таблица с названием wp_tablename

    Kama 1.1 года назад

    В WordPress, вы можете проверить существование таблицы в базе данных с помощью функции $wpdb->get_var():

    global $wpdb;
    $table_name = $wpdb->prefix . 'tablename';
    
    if( $wpdb->get_var( "SHOW TABLES LIKE '$table_name'" ) ) {
    	// таблица не существует, выполняем необходимые действия
    }
    else {
    	// таблица существует
    }
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация