優良会員限定のシークレットセールを行う方法

スポンサーリンク

Welcartの会員ランクを利用した、優良会員だけのシークレットセール(割引キャンペーン)を行う方法です。

functions.phpに割引条件を上書きするコードを書くので、キャンペーン期間外でも割引が可能ですし、キャンペーン中でも「優待会員様は特別に○○%OFF」なんてすることも可能です。

もくじ

  1. 利用するフック
  2. functions.phpにコードを記述
  3. カスタマイズのアレンジ
  4. まとめ

1. 利用するフック

  • フックの記述・・・usces_order_discount
  • フックの場所・・・usc-e-shop/classes/usceshop.class.php

2. functions.phpにコードを記述

functions.phpに、以下のコードを記述します。

//会員優待割引20%
add_filter('usces_order_discount', 'special_member_order_discount', 10, 2);
function special_member_order_discount($discount, $cart){
    global $usces;
    $entry = $usces->cart->get_entry();
    $total_items_price = $usces->get_total_price();
    if( usces_is_login() && usces_the_member_status('return') == '優良会員'){
        $discount = ceil($total_items_price * 0.2 * -1);
    }
    return $discount;
}

7行目で、「会員がログインしている場合」且つ「会員ランクが「優良会員」の場合」という条件をつけ、条件に合致した時のみ、8行目で「商品合計金額から20%引き」の計算を行っています。

割引率を変える場合は、8行目の0.2を、任意の割合に直して下さい。

3. カスタマイズのアレンジ

3-1. 優良会員は20%OFF・VIP会員は30%OFFとしたい場合

会員ランクによって段階的に割引を行う場合は、先ほどのコードの7行目以降の条件を少し変えます。

まず、ログインしているかどうかを判定(7行目)し、その上で優良会員の場合(8~9行目)、VIP会員の場合(10~11行目)と、更に細かく条件の判別を行っています。

//会員優待割引(優良:20%、VIP:30%)
add_filter('usces_order_discount', 'special_member_order_discount', 10, 2);
function special_member_order_discount($discount, $cart){
    global $usces;
    $entry = $usces->cart->get_entry();
    $total_items_price = $usces->get_total_price();
    if( usces_is_login() ){
        if( usces_the_member_status('return') == '優良会員'){
            $discount = ceil($total_items_price * 0.2 * -1);
        } elseif (usces_the_member_status('return') == 'VIP会員'){
            $discount = ceil($total_items_price * 0.3 * -1);
        }
    }
    return $discount;
}

$discountの式の中の数字も変わっていることにご注意下さい。

3-2. 優良会員もVIP会員もまとめて20%OFFの場合

先述のコードの7行目の会員ランクの判別の前に、割引対象にしたい会員を予め一つの変数としてまとめておきます。次の行での条件分岐の判別で「そのどれか」に当てはまるようなPHPコードin_arrayを使います。

//会員優待割引20%
add_filter('usces_order_discount', 'special_member_order_discount', 10, 2);
function special_member_order_discount($discount, $cart){
    global $usces;
    $entry = $usces->cart->get_entry();
    $total_items_price = $usces->get_total_price();
    $member_status = array( '優良会員', 'VIP会員');
    if( usces_is_login() && in_array(usces_the_member_status('return'), $member_status) ){
        $discount = ceil($total_items_price * 0.2 * -1);
    }
    return $discount;
}

更に会員種別を増やしたい場合は、7行目のarrayのカッコの中に、半角カンマで区切って会員名を追加して下さい。

3-3. キャンペーン期間と連動させたい場合

Welcartの「営業日設定」で設定できるキャンペーン期間と、この優待割引を連動させる場合は、割引のコードを「キャンペーン中を判別する条件分岐」で挟みます。

//キャンペーン期間中だけ優良会員割引20%
$options=get_option('usces');
if('Promotionsale'==$options['display_mode']){
    add_filter('usces_order_discount', 'special_member_order_discount', 10, 2);
    function special_member_order_discount($discount, $cart){
        global $usces;
        $entry = $usces->cart->get_entry();
        $total_items_price = $usces->get_total_price();
        if( usces_is_login() && usces_the_member_status('return') == '優良会員'){
            $discount = ceil($total_items_price * 0.2 * -1);
        }
        return $discount;
    }
}

「基本設定」で、キャンペーンそのものの設定を「割引率0%」等にして一般会員に影響が出ないようにすれば、優良会員のみに期間を区切った割引が行えます。

4. まとめ

リピーターは売上の8割を担うと、よく言われています。私も、よく利用するお店から「会員限定の先行セール!値札には書かれていませんので、一般のお客様にはわかりません。割引率は店員にお尋ね下さい」といったようなセールのハガキを受け取ると、ついつい足を運んでしまいます。

Welcartでは「優待会員」にランクをつけるには手動で行う必要があるので若干面倒ではありますが、リピーターに対する細やかな販促活動が出来るようになるので、使い甲斐はありそうです。

8 Responses to “優良会員限定のシークレットセールを行う方法”

  1. sato より:

    こんにちはこれをfunction.phpに入れるとログアウト時にエラーが出ませんか?

    Warning: Cannot modify header information – headers already sent by (output started at /home/plazagolf/www/plaza/test/zaiko/wp-content/themes/welcart_default/functions.php:197) in /home/plazagolf/www/plaza/test/zaiko/wp-includes/pluggable.php on line 1196

    • まめ子(管理人) より:

      こんにちは。念のため現時点での最新の環境(WordPress4.2.4+Welcart1.4.20)で検証してみましたが、エラーが確認出来ませんでした。pluggable.phpでのエラーとのことですので、例えばこのあたりの記事などがご参考になりませんでしょうか??

  2. […] こちらのサイトに事例が載っています。 優良会員限定のシークレットセールを行う方法 […]

  3. gell より:

    いつもお世話になっております。
    本内容も大変参考になり、ありがとうございます。

    最近のwelcartは、キャンペーン対象の選択ができるようになっていますが、本内容のカスタマイズをすると、キャンペーン対象が全商品の合計金額に対する割引になってしまいます。
    キャンペーン対象商品を保持したまま、会員限定のキャンペーンにすることは可能でしょうか?
    usces_order_discountの内容を見て試行錯誤してみましたがうまくいきませんでした。
    お分かりでしたらご教示いただきたいと思います。

    • まめ子(管理人) より:

      $total_items_price = $usces->get_total_price();
      のところで全金額を取得し、それから割引処理を行っているので、それが当カスタマイズの問題ですね。
      独自関数usces_order_recalculation(item_post.php内)の中に、total_full_priceなど、カート内の数字の計算が色々載っています。その辺りの計算式を参考にすれば、必要となる数字を取得できそうです。
      実は最近はWelcartを殆ど触らない業務が中心になってしまい、ブログも放置状態で申し訳なく存じております。あまりお力になれずに済みません。

      • gell より:

        ご返信ありがとうございます。
        一度usces_order_recalculationの中も見てみます。
        今まで掲載して頂いた記事だけでも、かなりのカスタマイズを可能にしているので、本当に助かっています。
        また少しずつでも更新して頂けると嬉しいです。
        今後ともよろしくお願いいたします。

      • gell より:

        教えて頂いたusces_order_recalculationの中を拝見しまして、いろいろと触ってみた結果、無事に求めていたことができました!
        合っているかどうかは分かりませんが、下記のカスタマイズになります。

        $options=get_option('usces');
        if('Promotionsale'==$options['display_mode']){
        add_filter('usces_order_discount', 'special_member_order_discount', 10, 3);
        function special_member_order_discount($discount, $cart, $order_id ){
        global $usces;
        if( !empty($order_id) ) {
        $data = $usces->get_order_data( $order_id, 'direct' );
        $condition = unserialize( $data['order_condition'] );
        } else {
        $condition = $usces->get_condition();
        }
        $entry = $usces->cart->get_entry();
        $discount = 0;
        if( usces_is_login() && usces_the_member_status('return') == '優良会員'){
        if( $condition['campaign_privilege'] == 'discount' ) {
        if ( 0 === (int)$condition['campaign_category'] ) {
        $discount = $total_items_price * $condition['privilege_discount'] / 100;
        } else {
        foreach( $cart as $cart_row ) {
        if( in_category( (int)$condition['campaign_category'], $cart_row['post_id']) ) {
        $discount += $cart_row['price'] * $cart_row['quantity'] * $condition['privilege_discount'] / 100;
        }
        }
        }
        }
        if( 0 < $discount ) $discount = ceil($discount * -1);
        }
        return $discount;
        }
        }

        挙動としてはまず、営業日設定で設定したキャンペーン・スケジュールに対応。
        基本設定でキャンペーン対象と割引率を指定したものが反映されます。(ポイントは対応していません。)
        その上で、優良会員のみのシークレットキャンペーンの適応となります。

        とりあえずうまく動いてくれていますので、これで解決とさせて頂きます。
        もし上記カスタマイズが合っているのであれば本文に追記して頂いて結構です。(違っているところは訂正願います。)

        ご返答いただきありがとうございました!

        • まめ子(管理人) より:

          わざわざお作りになったコードを投稿頂き、ありがとうございます。きっと同様のカスタマイズをお探しの方のお役に立つと思います!また余裕が出来たら検証してみますね!

Copyright© 2017 Welcart カスタマイズ ブログ All Rights Reserved.