Я настраиваю многосайтовую сеть WordPress с помощью WooCommerce и пытаюсь сделать так, чтобы все атрибуты продукта автоматически выбирались и добавлялись в продукт при его создании.
Я протестировал решение, найденное здесь : Автоматическое добавление всех атрибутов товара при добавлении нового товара в Woocommerce
Это решение отлично работало, когда я тестировал его на одном сайте.
Однако, когда я поместил это в многосайтовую сеть, он перестал работать правильно.
В многосайтовой сети при создании нового продукта он добавляет атрибуты и правильно устанавливает флажки, однако он не добавляет «Значения» для каждого атрибута.
В идеале все параметры, доступные в разделе «Значения», будут также автоматически выбраны.
Опять же, это сработало отлично на одном экземпляре сайта, но как только я скопировал его в многосайтовую среду, он перестал работать.
Примечание. Я сделал несколько других настроек, чтобы упростить работу конечного пользователя. , Эти другие настройки, по-видимому, не мешали и не конфликтовали с моим тестом на одном сайте. Я скопировал все те же настройки в многосайтовую сеть. Поскольку все настройки одинаковы для отдельного экземпляра сайта и экземпляра многосайтовой сети, я считаю, что главная проблема заключается в том, что необходимо внести изменения, поскольку это многосайтовая сеть. Вот ссылки на другие настройки, которые я сделал на случай, если вы захотите просмотреть:
Вот окончательный код, который я вставил в свои функции. php файл для справки:
## --- HIDE PRODUCT TABS IN WOOCOMMERCE --- ##
function remove_linked_products($tabs){
unset($tabs['general']);
unset($tabs['inventory']);
unset($tabs['shipping']);
unset($tabs['linked_product']);
unset($tabs['advanced']);
return($tabs);
}
add_filter('woocommerce_product_data_tabs', 'remove_linked_products', 10, 1);
## --- HIDE PRODUCT TYPES IN WOOCOMMERCE --- ##
add_filter( 'product_type_selector', 'remove_product_types' );
function remove_product_types( $types ){
unset( $types['grouped'] );
unset( $types['external'] );
unset( $types['simple'] );
return $types;
}
## --- AUTOMATICALLY SELECT ALL ATTRIBUTES --- ##
add_action( 'save_post', 'auto_add_product_attributes', 50, 3 );
function auto_add_product_attributes( $post_id, $post, $update ) {
## --- Checking --- ##
if ( $post->post_type != 'product') return; // Only products
// Exit if it's an autosave
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return $post_id;
// Exit if it's an update
if( $update )
return $post_id;
// Exit if user is not allowed
if ( ! current_user_can( 'edit_product', $post_id ) )
return $post_id;
## --- The Settings for your product attributes --- ##
$visible = ''; // can be: '' or '1'
$variation = '1'; // can be: '' or '1'
## --- The code --- ##
// Get all existing product attributes
global $wpdb;
$attributes = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}woocommerce_attribute_taxonomies" );
$position = 0; // Auto incremented position value starting at '0'
$data = array(); // initialising (empty array)
// Loop through each exiting product attribute
foreach( $attributes as $attribute ){
// Get the correct taxonomy for product attributes
$taxonomy = 'pa_'.$attribute->attribute_name;
$attribute_id = $attribute->attribute_id;
// Get all term Ids values for the current product attribute (array)
$term_ids = get_terms(array('taxonomy' => $taxonomy, 'fields' => 'ids'));
// Get an empty instance of the WC_Product_Attribute object
$product_attribute = new WC_Product_Attribute();
// Set the related data in the WC_Product_Attribute object
$product_attribute->set_id( $attribute_id );
$product_attribute->set_name( $taxonomy );
$product_attribute->set_options( $term_ids );
$product_attribute->set_position( $position );
$product_attribute->set_visible( $visible );
$product_attribute->set_variation( $variation );
// Add the product WC_Product_Attribute object in the data array
$data[$taxonomy] = $product_attribute;
$position++; // Incrementing position
}
// Get an instance of the WC_Product object
$product = wc_get_product( $post_id );
// Set the array of WC_Product_Attribute objects in the product
$product->set_attributes( $data );
$product->save(); // Save the product
}
Я не программист и сделал это, скопировав инструкции по настройке других людей. Любая помощь будет оценена. Спасибо!