Как добавить вкладку Variations в пользовательский тип продукта в Woocommerce?

  • I've installed a plugin for "Gift Cards", which is basically adding a product type "Gift card".
    • I need to enhance its functionality.
    • Для этого доступны другие вкладки, а вкладка «Варианты» - нет.
    • Как я могу добавить эту вкладку, чтобы мой пользовательский тип продукта также мог вести себя как переменный продукт.
    • Снимок экрана: http://prntscr.com/ekogwd
    • И я должен использовать свой собственный тип продукта, что означает, что я не могу изменить его на переменный тип продукта.
    • Есть ли какой-нибудь крючок, действие или фильтр для добавления этой вкладки вручную в мой пользовательский тип продукта «Подарочная карта» с помощью woocommerce?

person Esar-ul-haq Qasmi    schedule 16.03.2017    source источник


Ответы (1)


Я предполагаю, что вы уже добавили подарочную карту в средство выбора типа продукта. Однако я добавляю его здесь для полноты и потому, что вы можете использовать то же имя во второй функции.

add_filter( 'product_type_selector', 'so_42835590_add_product_type' );
function so_42835590_add_product_type( $types ){

    // Key should be exactly the same as in the class product_type parameter
    $types[ 'gift-card' ] = __( 'Gift Card', 'your-plugin' );

    return $types;

}

Вы можете добавить свои собственные вкладки, отфильтровав woocommerce_product_data_tabs, но вы также можете добавить классы к существующим вкладкам. Классы - это то, что использует javascript метабокса, чтобы решить, что показывать, а что скрывать при изменении типа продукта.

add_filter( 'woocommerce_product_data_tabs', 'so_42835590_product_data_tabs' );
function so_42835590_product_data_tabs( $tabs ) {

    $product_type = 'gift-card'; // must match array key in previous snippet

    // Add an additional class to an existing tab, ex: Variations.
    $tabs[ 'variations' ][ 'class' ][] = 'show_if_' . $product_type;  

    return $tabs;
}

Изменить, вам необходимо добавить JavaScript, чтобы контролировать видимость вкладки «Включено для вариантов» в существующих атрибутах, а также при добавлении атрибутов. Это должно помочь:

jQuery( function ( $ ) {

    // Variable type options are valid for variable workshop.
    $( '.show_if_variable:not(.hide_if_gift-card)' ).addClass( 'show_if_gift-card' );

    // Trigger change
    $( 'select#product-type' ).change();

    // Show variable type options when new attribute is added.
    $( document.body ).on( 'woocommerce_added_attribute', function(e) {

        $( '#product_attributes .show_if_variable:not(.hide_if_gift-card)' ).addClass( 'show_if_gift-card' );

        var $attributes     = $( '#product_attributes' ).find( '.woocommerce_attribute' );

        if ( 'gift-card' == $( 'select#product-type' ).val() ) {
            $attributes.find( '.enable_variation' ).show();
        }
    });

});
person helgatheviking    schedule 16.03.2017
comment
Спасибо @helgatheviking, все работает. Не могли бы вы добавить более подробную информацию, как отобразить поле флажка, используемое для вариаций, на вкладке атрибутов? prntscr.com/el16t1 Это отображается, только когда тип продукта - переменный продукт. - person Esar-ul-haq Qasmi; 17.03.2017
comment
См. Сценарий, который я добавил. - person helgatheviking; 17.03.2017
comment
Большое спасибо @helgatheviking - person Esar-ul-haq Qasmi; 20.03.2017
comment
Я следовал руководству здесь, похоже, он работает нормально, за исключением того, что вкладка «Варианты» теперь скрыта, когда я выбираю переменный тип продукта. Что я должен делать? - person ; 04.03.2019
comment
@Ethan, который должен обрабатываться вторым сниппетом, фильтрующим woocommerce_product_data_tabs. Я изменил его, чтобы сделать его более читабельным ... gift-card необходимо заменить на тип вашего продукта и он должен совпадать во всех фрагментах. - person helgatheviking; 06.03.2019
comment
@helgatheviking Вот где у меня проблема: когда добавляется мой новый класс show_if_abc, вкладка продукта становится скрытой, когда я выбираю любые типы продуктов, отличные от abc. - person ; 06.03.2019
comment
@Ethan Это ожидаемое поведение. Если вы создаете настраиваемую вкладку специально для типа продукта, она должна отображаться только для этого типа продукта, не так ли? Вы бы применили подход, отличный от того, что я изложил в этом ответе, если вы не создаете пользовательский тип продукта, а вместо этого создаете вкладку, которая актуальна для нескольких типов продуктов. - person helgatheviking; 08.03.2019
comment
Думаю, мое объяснение было непонятным. Итак, у меня есть новый тип продукта, сделайте, как вы описали, чтобы на вкладке «Варианты» отображалось, когда тип продукта является моим новым типом. Но после этого для других переменных товаров вкладка "Варианты" исчезнет. Я не говорю ни о каких новых вкладках. - person ; 08.03.2019
comment
@Ethan Я не уверен, что предложить, потому что я не могу это воспроизвести. Я бы дважды проверил, что вы добавляете новый класс в массив $tabs['variations']['class'] и не заменяете существующие значения. Пока существует исходный show_if_variable, вкладка должна отображаться для переменных продуктов. Вы можете попробовать добавить error_log(json_encode($tabs)); после github.com/woocommerce/woocommerce/blob/master/includes/admin/, чтобы взглянуть на массив $ tabs после его фильтрации. - person helgatheviking; 16.03.2019
comment
@helgatheviking, спасибо за фрагмент, которым вы поделились. Однако я получаю Этот продукт в настоящее время отсутствует в наличии. для моего продукта, хотя я ввел цены для всех вариантов. Я также скопировал шаблон добавления в корзину переменного продукта и переименовал его в giftcard.php, и я не получаю атрибуты продукта подарочной карты? - person booota; 11.07.2020