在 WooCommerce 常规设置页面上插入复选框以用于购买过滤器

Insert Checkbox on WooCommerce general settings page for purchase filter

我正在尝试在 General settings WooCommerce 页面上创建一个额外的选项,但无法正常工作,所以我尝试使用 advanced tab,这似乎有效。

这里的目标是创建一个复选框选项,通过应用 is_purchasable 的过滤器来启用目录模式。

但是,我无法弄清楚的是,如果复选框被标记为已保存设置,如何应用和保存 woocommerce_is_purchasable 的过滤器。

这是我目前得到的结果:

add_filter( 'woocommerce_get_sections_advanced', 'catalog_mode_add_section' );
add_filter( 'woocommerce_get_settings_advanced', 'catalog_mode_all_settings', 10, 2 );

function catalog_mode_add_section( $sections ) {

    $sections['catalog-mode'] = __( 'Catalog Mode', 'text-domain' );
    return $sections;

}

function catalog_mode_all_settings( $settings, $current_section ) {

    if ( $current_section == 'catalog-mode' ) {
        $settings_catalog_options = array();

        // Add Title to the Settings
        $settings_catalog_options[] = array( 'name' => __( 'WooCommerce Catalog Mode', 'text-domain' ), 'type' => 'title', 'desc' => __( 'This turns WooCommerce into a catalog.', 'text-domain' ), 'id' => 'catalog_mode' );

        // Add second text field option
        $settings_catalog_options[] = array(
            'name'     => __( 'Catalog Mode', 'text-domain' ),
            'id'       => 'catalog_mode',
            'type'     => 'checkbox',
        );

        $settings_catalog_options[] = array( 'type' => 'sectionend', 'id' => 'catalog_mode' );
        return $settings_catalog_options;

    } else {
        return $settings;
    }
}

我现在迷路了.. 有人吗?

您的代码中有一个小错误,每个设置组件都需要一个唯一标识符(id)…我已经更新了您的代码,现在您的自定义选项已保存。

add_filter( 'woocommerce_get_sections_advanced', 'catalog_mode_add_section' );
function catalog_mode_add_section( $sections ) {
    $sections['catalog-mode'] = __( 'Catalog Mode', 'text-domain' );

    return $sections;

}

add_filter( 'woocommerce_get_settings_advanced', 'catalog_mode_all_settings', 10, 2 );
function catalog_mode_all_settings( $settings, $current_section ) {

    if ( $current_section == 'catalog-mode' ) {

        $settings_catalog_options = array();

        // Add Title to the Settings
        $settings_catalog_options[] = array(
            'name' => __( 'WooCommerce Catalog Mode', 'text-domain' ),
            'type' => 'title',
            'desc' => __( 'This turns WooCommerce into a catalog.', 'text-domain' ),
            'id'   => 'wc_catalog_mode_title'
        );

        // Add second text field option
        $settings_catalog_options[] = array(
            'name' => __( 'Catalog Mode', 'text-domain' ),
            'type' => 'checkbox',
            'id'   => 'wc_catalog_mode',
        );

        $settings_catalog_options[] = array(
            'type' => 'sectionend',
            'id'   => 'wc_catalog_mode_end'
        );

        return $settings_catalog_options;
    }
    return $settings;
}

然后在woocommerce_is_purchasablewoocommerce_variation_is_purchasable过滤器中,你将这样使用它:

add_filter('woocommerce_is_purchasable', 'product_is_purchasable_filter_callback', 10, 2 );
add_filter( 'woocommerce_variation_is_purchasable', 'product_is_purchasable_filter_callback', 10, 2 );
function product_is_purchasable_filter_callback( $purchasable, $product ) {
    if( 'yes' === get_option('wc_catalog_mode') ) {
        $purchasable = false;
    }
    return $purchasable;
}

代码进入活动子主题(或活动主题)的 function.php 文件。已测试并有效。

You could use "products" section instead of "advanced" replacing your hooks with:

  • woocommerce_get_sections_products
  • woocommerce_get_settings_products