[解決済み] Welcart1.3.1で会員ランクを判別するスクリプトが動かなくなった

フォーラム テンプレート(テーマ) [解決済み] Welcart1.3.1で会員ランクを判別するスクリプトが動かなくなった

  • このトピックには11件の返信、3人の参加者があり、最後にsteve-nにより9年前に更新されました。
12件の投稿を表示中 - 1 - 12件目 (全12件中)
  • 投稿者
    投稿
  • #52502
    sebastian
    参加者

    WordPress のバージョン:3.5.1

    Welcart のバージョン:1.3.1

    ご利用のテーマ:デフォルトテーマをカスタマイズ


    Welcartで会員のランクを判別する為に以下のスクリプトを導入しました。

    http://tukuruder.com/archives/1424(こちらのサイトを参考にしました)

    function usces_the_member_status() {<br />
    global $usces,$wpdb;</p>
    <p> if( !$usces->is_member_logged_in() ) return $res = -1;</p>
    <p> $member = $usces->get_member();<br />
    $ID = $member[ID];</p>
    <p> $tableName = $wpdb->prefix . "usces_member";<br />
    $query = $wpdb->prepare("SELECT * FROM $tableName WHERE ID = %d", $ID);<br />
    $data = $wpdb->get_row( $query, ARRAY_A );<br />
    $res = $data[mem_status];</p>
    <p> return $res;<br />
    }

    以前のバージョンの記憶が定かでは無いのですが、WordPress、Welcart共に最新バージョンにしました所、上記のスクリプトを削除しないとカスタマイズしたテーマが適用できなくなりました。アップグレードする前は問題なく稼働していました。(最新のWelcartデフォルトテーマのfunctions.phpに記述した場合も同様に動かなくなりました)

    Welcart1.3.1でもこのスクリプトを動かすにはどこを修正すればいいのでしょうか?

    #66446
    yskysmr
    キーマスター

    こんにちは。

    「動かなくなった」というのは、具体的に、どういう症状になったのでしょうか。

    参考にされたサイトのほうを拝見しました。こちらは、usces_the_member_status() が搭載されていないバージョンのWelcartに、usces_the_member_status() を埋め込んでしまう方法のようですが、sebastian さまも、usces_the_member_status() 自体を定義されましたでしょうか。

    (最新のWelcartデフォルトテーマのfunctions.phpに記述した場合も同様に動かなくなりました)

    とありますが、これをすると関数の二重定義になってしまいます。最新バージョンのWelcartには、usces_the_member_status() が既に搭載されていますので、ご利用になるときは、この関数を呼ぶだけで使えると思います。

    よろしくお願いいたします。

    #66447
    sebastian
    参加者

    yskysmr様

    早速の回答ありがとうございます。

    まず、動かないという症状ですが以下のエラーメッセージが出ます。

    サーバー エラー

    http://xxx.com/ を取得中にウェブサイトでエラーが発生しました。 ウェブサイトがメンテナンスのために停止しているか、正しく設定されていない可能性があります。

    ヒント:

    このウェブページを後で読み込んでください。

    HTTP エラー 500(Internal Server Error): サーバーによるリクエストの実行中に、予期しない状況が発生しました。

    usces_the_member_status() 自体を定義されましたでしょうか。

    はい、カスタマイズしたテーマのfunctions.phpに記述しました。

    usces_the_member_status() が既に搭載されているということなので自分で定義した部分を削除しましたところエラーは出なくなりましたが今度は余計な表示が出てしまいます。こちらもアドバイスを頂けましたら助かります。

    まず以下の様なスクリプトをカスタマイズしたテーマのfunctions.phpに会員ランクにわけて記述していますが、限定したページの左上に会員ランクをがテキストで表示されて忌まします。

    /***********************************************************

    * 会員専用ページの設定

    0 >> 通常会員

    is_page(1425)は限定したいページ、get_permalink(1495)は飛ばしたいページ

    ***********************************************************/

    add_action('template_redirect', 'member_page0');

    function member_page0(){

    if(is_page(array(1425,1431)) && usces_the_member_status() != 0 ){

    wp_redirect(get_permalink(1495));

    exit;

    }

    }

    この他に、会員ランク別に同じパターンで記述しています。

    もう一つ、会員ページに会員ランクや会員ランクによって別々のページリンクを表示させていますが、こちらも複数の会員ランクがテキストで表示されてしまいます。

    <div class="vip_contents">

    <div class="member_lank alert alert-info">

    <span>お客様の会員ランク:

    <?php if (usces_is_login()) : ?>

    <?php if (usces_the_member_status()==0) : ?>通常メンバー<?php endif; ?>

    <?php if (usces_the_member_status()==1) : ?>優良メンバー<?php endif; ?>

    <?php if (usces_the_member_status()==2) : ?>VIPメンバー<?php endif; ?>

    <?php endif; ?>

    </span>

    </div>

    <div class="member_info">

    <?php if (usces_is_login()) : ?>

    <?php if (usces_the_member_status()==0) : ?>

    /member" target="_blank>" >通常メンバー様専用ページ

    <?php endif; ?>

    <?php if (usces_the_member_status()==1) : ?>

    /excellent" target="_blank>" >優良メンバー様専用ページへ

    <?php endif; ?>

    <?php if (usces_the_member_status()==2) : ?>

    /vip" target="_blank>" >VIPメンバー様専用ページ

    <?php endif; ?>

    <?php endif; ?>

    </div>

    </div>

    分かり辛いかもしれませんがよろしくお願いいたします。

    会員ランク別にコンテンツやページリンクなどを表示するマニュアルなどがあれば助かります。

    #66448
    yskysmr
    キーマスター

    usces_the_member_status( ‘return’ )

    としてみてください。引数が空白の場合 echo されます。

    #66449
    sebastian
    参加者

    yskysmr様

    修正しましたところ表示が正常に戻りました。ランク別に表示していたページの左上に表示されていた会員ランクのテキストも消えました。ありがとうございます。

    しかし、どのランクでログインしてもランク0(通常会員)で表示されているようです…。

    usces_the_member_status('return')==0

    usces_the_member_status('return')==1

    usces_the_member_status('return')==2

    が実際の会員ランクと連動していないようにみえるのですが。

    #66450
    yskysmr
    キーマスター

    失礼しました。

    「usces_the_member_status」は、「ランク名」を返す関数でした。「ランク名」を表示するために作った関数です。

    ということで、

    usces_the_member_status(‘return’) == ‘通常会員’

    というふうに、使用していただけますでしょうか。

    よろしくお願いいたします。

    #66451
    sebastian
    参加者

    ありがとうございます!無事解決致しました!

    #66452
    sebastian
    参加者

    すみません。

    確認ですが、ログインしていないユーザーのランク名は「ログインしていないユーザー」なのでしょうか?それともランク名自体がないのでしょうか?

    #66453
    yskysmr
    キーマスター

    会員システムを使っていない、もしくはログインしていないときの、「ランク名」は存在しません。

    よって、

    empty( usces_the_member_status(‘return’) )

    のときとしてみてください。

    #66454
    sebastian
    参加者

    ありがとうございました!

    #73877
    steve-n
    参加者

    ありがとうございます

    <?php if (usces_the_member_status( ‘return’ )== ‘特別会員’) : ?>
    特別会員への内容ここに表示
    <?php endif; ?>

    上記の記事を参考にすると
    こういうことでしょうか?
    上記では会員ランクしか表示されません
    よろしくお願いします

    ※以前、welcartレスキューで会員ランクによる割引を設定していただき、特別会員という名前になっています。

    #73878
    steve-n
    参加者

    すいません上記間違ってコメントしてしましました。

12件の投稿を表示中 - 1 - 12件目 (全12件中)
  • このトピックに返信するにはログインが必要です。