TOPページでif ( usces_is_item() )の条件分岐が出来ない

フォーラム 使い方全般 TOPページでif ( usces_is_item() )の条件分岐が出来ない

  • このトピックには2件の返信、2人の参加者があり、最後にfujiwaraにより13年、 3ヶ月前に更新されました。
3件の投稿を表示中 - 1 - 3件目 (全3件中)
  • 投稿者
    投稿
  • #50174
    fujiwara
    参加者

    いつもお世話になっております。

    TOPページが表示された時だけ<?php if ( usces_is_item() ) : ?>を使用した

    条件分岐が効きません。

    ソースを確認してみると、フッターで吐き出されているスクリプトが、

    どうみても商品詳細ページの様なスクリプトになってます。

    どうやらトップページも商品ページとして認識されている感じです。

    トップページでは、query_postsを使って登録商品の画像と一部SKU情報を取得してます。

    その他は特に特別な事はしておりません。

    試しに使用中のプラグインを全て停止してみましたが、症状は変わらずでした。

    どうかお力をお貸しください。

    宜しくお願い致します。


    ご利用中のバージョン:0.9-beta

    症状を確認したブラウザ:Safari Chrome

    サーバー(会社名、サービス名):sixcore

    SSLの利用:  専用SSL 独自ドメイン

    テーマはwpのDefault 1.7.2をカスタマイズしております。


    #61177
    nanbu
    キーマスター

    こんにちは。

    query_posts() を実行するとglobal $posts が書き換わります。更にthe_post() を実行するとglobal $post が書き換わてしまいます。usces_is_item() はこのglobal $post を見て商品かどうかを判断しています。

    つまり、これらのテンプレートタグを実行すると、ここまで表示してきた記事データとは別の記事の内容が表示されてしまうのです。ですのでusces_is_item() を実行しても正しい判断ができなくなると言うことになります。

    本来、他の記事(商品)データを取得するには新しいオブジェクト(new WP_Query)を生成する方法をWordPress Codex でも推奨しています。

    http://wpdocs.sourceforge.jp/The_Loop

    しかし、Welcart のテンプレートタグはこの新しいオブジェクトからデータを取得するようにはできていません。(難しくは無いので近々対応したいと思います)

    そこで、今回の目的がusces_is_item() での条件分岐であるなら、この様にして応急処置を取ることができます。

    テーマのheader.php の冒頭でusces_is_item() の結果を保存します。

    global $isitem;
    $isitem = usces_is_item();

    代入する変数名は何でも構いません、global 宣言しておくことでボディーの部分でもこの変数が使えます。

    ボディーでの条件分岐はこの様になります。

    if( $isitem ){
    echo '商品です';
    }else{
    echo '商品以外です';
    }

    footer.php で使用するには、冒頭にglobal $isitem;を置いてfooter でも global 宣言します。

    ほとんどの場合はこれで商品かどうかの判断ができると思います。

    #61178
    fujiwara
    参加者

    nanbu様

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

    教えていただいた方法で分岐出来ました!

    有難うございました。

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