Как использовать запросы update и delete в WordPress
Сначала я написал вручную запросы update, delete, insert и select и выполнил их с помощью функции mysql_query
Вот так:
Запрос Select
$prefix = $wpdb->prefix;
$postSql = "SELECT DISTINCT post_id
FROM " . $prefix . "postmeta As meta
Inner Join " . $prefix . "posts As post
On post.ID = meta.post_id
Where post_type = 'product'
And post_status = 'publish'
And meta_key Like '%product_img%'";
$postQry = mysql_query($postSql);
while ($postRow = mysql_fetch_array($postQry)) {
$post_id = $postRow['post_id'];
}
Запрос Insert
$insert_images = "Insert Into " . $prefix . "postmeta(post_id,meta_key,meta_value) Value('$post_id','$meta_key','$data_serialize')";
mysql_query($insert_images);
Запрос Update:
$update_price = "Update " . $prefix . "postmeta
Set meta_key = 'wpc_product_price'
Where post_id = $supportMetaID
And meta_key Like '%product_price%'";
mysql_query($update_price);
Запрос Delete
mysql_query("Delete From " . $prefix . "postmeta Where meta_key IN ('product_img1','product_img2','product_img3')");
Все запросы работают отлично... но теперь я хочу встроить все запросы в WordPress-запросы.
Я также могу использовать WordPress-запросы такого вида
$wpdb->get_results( "SELECT id, name FROM mytable" );
$wpdb->insert(
'table',
array(
'column1' => 'value1',
'column2' => 123
),
);
$wpdb->update(
'table',
array(
'column1' => 'value1', // строка
'column2' => 'value2' // целое число
),
array( 'ID' => 1 )
);
$wpdb->delete( 'table', array( 'ID' => 1 ) );
Но как видите, в моих запросах используются условия and / or
. Может кто-нибудь помочь, как мне встроить мои запросы в WordPress?

О функции UPDATE+INSERT:
Я создал для себя функцию, которая может быть полезна и вам, например:
UPDATE_OR_INSERT('wp_users', array('gender'=>'female'), array('name'=>'Monika') );
Эта функция ОБНОВЛЯЕТ ЗНАЧЕНИЕ в колонке (где name=monika
), но если такого значения не существует, то она создает новую запись в БД.
Почему это необходимо? Потому что, насколько я знаю, в WordPress нет встроенной функции, которая обновляла бы данные в БД (если значение существует) или вставляла данные (если значения нет). Вместо этого мы используем: $wpdb->update()
или $wpdb->insert()
.
Вот сама функция, которая поможет:
function UPDATE_OR_INSERT($tablename, $NewArray, $WhereArray){ global $wpdb; $arrayNames= array_keys($WhereArray);
//преобразуем массив в СТРОКУ
$o=''; $i=1; foreach ($WhereArray as $key=>$value){ $o .= $key . ' = \''. $value .'\''; if ($i != count($WhereArray)) { $o .=' AND '; $i++;} }
//проверяем существование записи
$CheckIfExists = $wpdb->get_var("SELECT ".$arrayNames[0]." FROM ".$tablename." WHERE ".$o);
if (!empty($CheckIfExists)) { return $wpdb->update($tablename, $NewArray, $WhereArray );}
else { return $wpdb->insert($tablename, array_merge($NewArray, $WhereArray) ); }
}
