Я написал функцию для циклического просмотра всех продуктов, поиска вариантов, которых нет в наличии, а затем удаления варианта и атрибутов, связанных с переменными продуктами, чтобы любые плагины фильтров продуктов не отображали конкретные варианты, когда их нет в наличии..
Моя функция отлично работает на моем тестовом сайте, но я ищу несколько советов о том, как сделать это более эффективным, поскольку у меня есть некоторые опасения по поводу запуска его на живом сайте, который имеет сотни продуктов с примерно 15 вариантами вproduct.
Вот мой код функции:
function wpmad_purge_variations_not_in_stock(){
echo 'Purging products...<br><br>';
$args = array( 'status' => 'publish', 'limit' => -1 );
$products = wc_get_products( $args );
foreach ( $products as $product ){
if ( $product->is_type( 'variable' ) ){
$product_id = $product->id;
// Get all available product variations for current product/item
$variations = $product->get_available_variations();
// Loop through each of the available variations
foreach ( $variations as $variation ){
// Check if variation is no longer in stock
if ( $variation['is_in_stock'] == '' ){
$variation_id = $variation['variation_id'];
// Attribute counter
$count = 1;
// For each variation attribute
foreach ( $variation['attributes'] as $att_name => $att_value ){
$atts[$count]['name'] = str_replace( 'attribute_', '', $att_name );
$atts[$count]['value'] = $att_value;
$count++; // Increase counter for each loop
}
// Delete product variation post
echo 'Deleted product variation ID #' . $variation_id . '<br>';
wp_delete_post( $variation_id, true );
// For each attribute
foreach ( $atts as $att ){
// Remove attribute from main product
echo 'Deleted product attribute (' . $att['name'] . ' - ' . $att['value'] . ') for product ID #' . $product_id . '<br><br>';
wp_remove_object_terms( $product_id, $att['value'], $att['name'] );
}
}
}
}
}
echo 'Product variations have now been purged if out of stock';
}
Можно ли использовать функцию wc_get_products()
только для того, чтобы возвращать переменные продукты, и есть ли какие-либо улучшения эффективности / производительности, которые могут быть сделаны длямой код?
Заранее спасибо!