Добавьте флажок как вариант продукта администратора Woocommerce, который скрывает связанные продукты - PullRequest
2 голосов
/ 02 мая 2019

Чтобы сделать это максимально простым и легким, я пытаюсь добавить этот флажок в верхнем ряду рядом с селектором типа продукта, где вы обычно находите Virtual и Download.

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

Вот что я пробовал:

add_action( 'woocommerce_product_type_options', 'remove_related_products_checkbox' );        
function remove_related_products_checkbox() {           
    woocommerce_wp_checkbox( array( 
        'id' => '_remove_related_products', 
        'class' => '', 
        'label' => 'Remove Related Products?'
    ) );      
}

add_action( 'save_post_product', 'related_products_checkbox_save' );
function remove_related_products_checkbox_save( $product_id ) {
    global $pagenow, $typenow;

    if ( 'post.php' !== $pagenow || 'product' !== $typenow ) return;

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

    if ( isset( $_POST['_remove_related_products'] ) ) {
        update_post_meta( $product_id, '_remove_related_products', $_POST['_remove_related_products'] );
    } else 
        delete_post_meta( $product_id, '_remove_related_products' );
}

add_action( 'woocommerce_after_single_product_summary', 'remove_related_products_checkbox_display', 1 );
function remove_related_products_checkbox_display() {
    global $product;

    if ( ! empty ( get_post_meta( $product->get_id(), '_remove_related_products', true ) ) ) {
        remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );
    }
}

Но это не работает ... Любой совет, пожалуйста?

1 Ответ

1 голос
/ 02 мая 2019

Ваш код немного устарел с WooCommerce 3, и есть некоторые ошибки.

Попробуйте вместо этого следующее:

add_filter( 'product_type_options', 'hide_related_products_option' );
function hide_related_products_option( $fields ) {
    $fields['hide_related'] = array(
        'id'                => '_hide_related',
        'wrapper_class'     => '',
        'label'             => __('Remove Related Products'),
        'description'   => __( 'Remove/Hide related products.', 'woocommerce' ),
        'default'           => 'no'
    );
    return $fields;
}

add_action( 'woocommerce_admin_process_product_object', 'hide_related_products_option_save' );
function hide_related_products_option_save( $product ) {
    $product->update_meta_data( '_hide_related', isset( $_POST['_hide_related'] ) ? 'yes' : 'no' );
}

add_action( 'woocommerce_after_single_product_summary', 'remove_related_products_checkbox_display', 1 );
function remove_related_products_checkbox_display() {
    global $product;

    if ( $product->get_meta('_hide_related') === 'yes' ) {
        remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );
    }
}

Код входит в файл function.php вашей активной дочерней темы (активной темы).Протестировано и работает.

Связано: Установите флажок для опции типа продукта на страницах редактирования бэкэнда Woocommerce

...