WooCommerce限制按国家或地区下载产品

时间:2014-01-25 19:08:23

标签: php wordpress download woocommerce restriction

Wordpress WooCommerce中是否存在限制特定产品在特定区域下载的方法/插件。请记住,这不是在网站范围内,而是在产品与产品的基础上。

我想象的是,在结帐时,如果产品启用了下载限制,则功能会拉出当前用户的位置(国家/地区),并将其与该产品的一系列允许国家/地区进行比较。如果匹配,则检入将继续进行,它将返回一条消息,通知用户他们所请求的产品无法在其所在国家/地区下载。问题是,是否存在插件,功能,功能或SNIPPET,如果有的话?

更新:看到没有答案,我已经开始自己开始创作。我以前没有PHP经验,所以请帮我把这段代码简洁一点。你可以尝试一下。这是正确的吗?

更新(解决方案):Woocommerce现在具有内置功能,可以检查用户位置并将其存储给店主以在自定义功能中使用,随意使用:)

以下代码进入主题的functions.php文件。它会在“常规选项卡”下的产品页面的添加/编辑页面中添加“区域设置”面板。它有两个选项,“限制类型:”,可以设置为“允许”或“拒绝”,以及“区域:”选项,您可以在其中指定将受影响的国家/地区。如果未设置产品的区域设置,则允许每个人访问它。

/**
 *  Mazwi WooCommerce Region Control BETA 
 * ------------------------------------
 *
 *  
 * 
 * Execute code if the user's country (set for each product) is allowed
 *
 * Author: Taf Makura
 * Thanks to Remi Corson's Tutorial 
 */


// Display Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );

// Save Fields
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );

// Display Fields
function woo_add_custom_general_fields() {

  global $woocommerce, $post;

  echo '<div class="options_group">';

  ?>

    <?php
        // Select
            woocommerce_wp_select( 
            array( 
                'id'      => '_restriction-type', 
                'label'   => __( 'Restriction type', 'woocommerce' ), 
                'options' => array(
                'allow'   => __( 'Allow', 'woocommerce' ),
                'deny'   => __( 'Deny', 'woocommerce' ),
        )
    )
);

        // Create Textarea
            woocommerce_wp_textarea_input( 
            array( 
                'id'          => '_regions', 
                'label'       => __( 'Regions', 'woocommerce' ), 
                'placeholder' => '', 
                'desc_tip'    => 'true',
                'description' => __( 'Please enter two letter country codes. Each country code should be followed by a coma Example: ZW, AU, ZA, US ', 'woocommerce' ) 
        )
    );

  echo '</div>';
}


function woo_add_custom_general_fields_save( $post_id ){

        // Select
            $woocommerce_select = $_POST['_restriction-type'];
            if( !empty( $woocommerce_select ) )
                update_post_meta( $post_id, '_restriction-type', esc_attr( $woocommerce_select ) );


        // Textarea
            $woocommerce_textarea = $_POST['_regions'];
            if( !empty( $woocommerce_textarea ) )
                update_post_meta( $post_id, '_regions', esc_html( $woocommerce_textarea ) );

 }

以下代码进入模板.php文件,其中假定条件执行发生。我可以想象,如果您将添加到购物车循环(添加到购物车按钮)放在这里,它将允许您控制在某些国家/地区可以购买的产品。在逐个产品的基础上。

<?php global $woocommerce; 

        // Get restriction type (deny or allow) for current product
        $restriction_type = get_post_meta( $post->ID, '_restriction-type', true );

        // Get region(s) the above restriction type is applied to 
        $regions = get_post_meta( $post->ID, '_regions', true );

        // Turns this string into an array. 
        $regions_array = (explode(',', str_replace('/\s+/','', $regions)));

        // Get users current IP location from WooCommerce 
        $base_country = (..... YOU NEED TO GET THE USER LOCATION ISO COUNTRY CODE ......)

        // If user's current IP location is either allowed, is not denied or is not set in the region settings = success
        if( $restriction_type == 'allow' && in_array($base_country , $regions_array) || $restriction_type == 'deny' && !in_array($base_country , $regions_array) || $restriction_type == '' || $regions == '' ) {

                if ($restriction_type == '' || $regions == '') {

                    //  Code to execute on success if a product is not set (NOTE: It will not be restricted)

                    echo('This product\'s region control has not been set, you can set it in WP Admin');
                }

                // Code to execute on success if a products region settings are set to allow access

                echo('YOU ARE IN'); 

        } else {

                // Code to execute when region is restricted

                echo(' you are restricted,');
        }

?>

1 个答案:

答案 0 :(得分:1)

我不确定你是否看过/试过这个,但根据http://docs.woothemes.com/document/configuring-woocommerce-settings/你可以做你想要的。

  

要配置您的商店,请访问WooCommerce&gt;设置。然后浏览下面的内容以获取有关WooCommerce选项的更多信息。

     

允许的国家/地区

     

在这里,您可以选择是否要出售/运送到国家/地区,或   精选的少数 - 只在您自己的国家/地区进行交易时非常有用   实例。您所在国家/地区以外的客户将无法访问   查看。

     

特定国家

     

定义您愿意出售/运往的国家/地区。你必须设置   “允许的国家”选择“特定国家”。