Разрешить администратору сбрасывать запасы продуктов WooCommerce во внешнем интерфейсе.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Разрешить администратору сбрасывать запасы продуктов WooCommerce во внешнем интерфейсе.

Сообщение Anonymous »

Я добавляю кнопку для товаров на странице магазина только при подключении администратора. При нажатии этой кнопки запас продукта обнуляется (0). Иногда бывает проще удалить товары со склада с веб-сайта, используя изображения продуктов, чем искать их по их артикулу. Я сделал этот код на основе ответа @LoicTheAztec и @Víctor González SO для обновления таблиц базы данных в этом смысле, и он работает как шарм. Ниже приведен рабочий код

Код: Выделить всё

function createStockZeroButton(){
global $product;
$theId = $product-> get_id();
if(current_user_can( 'administrator' )){
echo "
set Stock To 0 for id".$theId."
";
if(isset($_POST["name".$theId])){
$con = mysqli_connect($server, $username, $password, $database);
$database_request = "UPDATE wp_postmeta pm
INNER JOIN wp_wc_product_meta_lookup pml
ON pm.post_id =  pml.product_id
SET pm.meta_value = '0', pml.stock_quantity = '0'
WHERE pm.meta_key = '_stock' AND pm.post_id = '$theId'";
$database_query = mysqli_query($con, $database_request);
$database_request ="UPDATE wp_postmeta pm
INNER JOIN wp_wc_product_meta_lookup pml
ON pm.post_id =  pml.product_id
SET pm.meta_value = 'outofstock', pml.stock_status = 'outofstock'
WHERE pm.meta_key = '_stock_status' AND pm.post_id = '$theId'";
$database_query = mysqli_query($con, $database_request);
$database_query = "INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id)
SELECT pml.product_id, (SELECT term_id FROM wp_terms WHERE slug = 'outofstock')
FROM wp_wc_product_meta_lookup pml
WHERE pml.stock_status = 'outofstock' AND pm.post_id = '$theId'";
$database_query = mysqli_query($con, $database_request);
}
}
}

add_action('woocommerce_shop_loop_item_title','createStockZeroButton');
Теперь я хотел бы использовать для этого класс $wpdb. Я попробовал этот код ниже «в соответствии» с этим ответом SO, но не смог заставить его работать.

Код: Выделить всё

function createStockZeroButton(){
global $product;
$theId = $product-> get_id();
if(current_user_can( 'administrator' )){
echo "
set Stock To 0 for id".$theId."
";
if(isset($_POST["name".$theId])){
$update1 = $wpdb->query($wpdb->prepare("UPDATE wp_postmeta pm
INNER JOIN wp_wc_product_meta_lookup pml
ON pm.post_id =  pml.product_id
SET pm.meta_value = '0', pml.stock_quantity = '0'
WHERE pm.meta_key = '_stock' AND pm.post_id = '$theId'"));

$update2 = $wpdb->query($wpdb->prepare("UPDATE wp_postmeta pm
INNER JOIN wp_wc_product_meta_lookup pml
ON pm.post_id =  pml.product_id
SET pm.meta_value = 'outofstock', pml.stock_status = 'outofstock'
WHERE pm.meta_key = '_stock_status' AND pm.post_id = '$theId'"));

$update3 = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id)
SELECT pml.product_id, (SELECT term_id FROM wp_terms WHERE slug = 'outofstock')
FROM wp_wc_product_meta_lookup pml
WHERE pml.stock_status = 'outofstock' AND pm.post_id = '$theId'"));
}
}
}

add_action('woocommerce_shop_loop_item_title','createStockZeroButton');
Как мы можем добиться правильного запроса, используя INNER JOIN и $wpdb, как в этом случае?
Посмотрел также официальную ссылку на документ, но не смог проясните это в моей голове.

Подробнее здесь: https://stackoverflow.com/questions/790 ... e-frontend
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»