自动启用虚拟和可下载产品设置

Posted

技术标签:

【中文标题】自动启用虚拟和可下载产品设置【英文标题】:Automatically enable virtual and downloadable product settings 【发布时间】:2017-06-29 18:45:21 【问题描述】:

在 WooCommerce 中,我使用了一个供应商插件,允许人们上传自己的产品。

但我只希望他们上传虚拟和可下载的产品。

有没有办法在普通的 woocommerce“添加产品页面”上删除(甚至隐藏)这些选项并自动检查它们?

不需要因为我审核所有提交而无法规避 - 只是想让提交过程尽可能简单。

谢谢

【问题讨论】:

我不知道如何自动检查VirtualDownload复选框,但你可以隐藏选项,检查this link。 谢谢,主要问题是实际上自动选择。如果我可以自动选择,隐藏会很棒 【参考方案1】:

使用这个简单的解决方案

add_filter( 'product_type_options', 'autocheck_vd');

function autocheck_vd( $arr )
    $arr['virtual']     ['default'] = "yes"; 
    $arr['downloadable']['default'] = "yes"; 
    return $arr;

【讨论】:

【参考方案2】:

对于虚拟产品,仅在最后查看更新

这是可能的,但测试和解释的时间很长,而且很复杂...您必须通过 2 种方式来定位这些用户,一个特定的用户角色或他们用户角色的特定能力。

然后可以通过注入的 CSS 隐藏一些设置并使用 javascript/jQuery 来设置这些隐藏设置...

在下面的工作示例中,我使用 jQuery 启用了 'virtual''downloadable' 设置复选框,并且我几乎完全使用 opacity CSS 规则隐藏它们…… p>

我在 woocommerce_product_options_general_product_data 动作钩子中使用了一个自定义函数,这样:

add_action( 'woocommerce_product_options_general_product_data', 'hiding_and_set_product_settings' );
function hiding_and_set_product_settings()

    ## ==> Set HERE your targeted user role:
    $targeted_user_role = 'administrator';

    // Getting the current user object
    $user = wp_get_current_user();
    // getting the roles of current user
    $user_roles = $user->roles;

    if ( in_array($targeted_user_role, $user_roles) )

        ## CSS RULES ## (change the opacity to 0 after testing)
        // HERE Goes OUR CSS To hide 'virtual' and 'downloadable' checkboxes
        ?>
        <style>
            label[for="_virtual"], label[for="_downloadable"] opacity: 0.2; /* opacity: 0; */ 
        </style>
        <?php

        ## JQUERY SCRIPT ##
        // Here we set as selected the 'virtual' and 'downloadable' checkboxes
        ?>

        <script>
            (function($)
                $('input[name=_virtual]').prop('checked', true);
                $('input[name=_downloadable]').prop('checked', true);
            )(jQuery);
        </script>

        <?php
    


代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

您必须将“管理员”用户角色替换为您的特定目标用户角色。 您必须将不透明度设置为 0,才能完全隐藏该复选框。

经过测试并且可以工作


对于许多用户角色的添加:

    替换这一行:

    $targeted_user_role = '管理员';

…通过这一行:

$targeted_user_roles = array( 'administrator', 'shop_manager' );

    并替换这一行:

    if ( in_array($targeted_user_role, $user_roles) )

…通过这一行:

if ( array_intersect( $targeted_user_roles, $user_roles ) )

现在代码将适用于许多用户定义的用户角色


默认设置 VIRTUAL 选项(并隐藏它):

要隐藏和设置默认虚拟选项,您将使用:

add_action( 'woocommerce_product_options_general_product_data', 'hide_and_enable_virtual_by_default' );
function hide_and_enable_virtual_by_default()
    ?>
    ## HERE Goes OUR CSS To hide 'virtual & downloadable'
    <style>
        label[for="_virtual"], label[for="_downloadable"] opacity: 0; 
    </style>
    <?php
    ## JQUERY SCRIPT ##
    // Here we set as selected the 'virtual' checkboxes by default
    ?>
    <script>
        (function($)
            $('input[name=_virtual]').prop('checked', true);
        )(jQuery);
    </script>
    <?php

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。经过测试并且可以工作。

【讨论】:

啊解决了-愚蠢的我忘了关闭PHP?>谢谢 @LoicTheAztec:以上对我有用,但我尝试让这个也适用于库存选项卡上的单独销售复选框。恕我直言,在一个订单中出售超过 1 个可下载文件的副本是没有意义的。将 _sold_individually 添加到脚本部分不会对其进行检查。有什么想法吗?

以上是关于自动启用虚拟和可下载产品设置的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce - 如何在新产品管理页面中禁用可下载和虚拟复选框?

如何捕获部分金额

如何在使用 PayPal 购买和重定向后使用 IPN/PDT 显示收据和数字和/或可下载产品

Magento - 购买可下载产品时删除帐单和运输信息

java基础

在 Heroku 中构建可下载的站点地图 zip 文件