Welcartをアップデートしたら商品詳細ページにテンプレートが割り当てられない状態に

  • 更新日:
  • 公開日:

Welcartをバージョン1.9.3にアップデートしたら商品詳細ページに専用テンプレート「wc_item_single.php」が割り当てられない状態になりました。

デバッグしてみるとsingle.phpが割り当てられており、コンテンツ部分にWelcartのフォールバックテンプレートが表示されていることを発見。色々調べた結果、私の状況では以下の方法で解決できました。

商品詳細ページに「wc_item_single.php」を割り当てる

以下が対応したコードです。テーマのfunctions.phpに記述します。

// 無名関数バージョン(PHP5.3以上で可能です)
add_filter( 'usces_filter_template_redirect', function() { return false; } );

// 無名関数を使わないバージョン(サーバーのPHPバージョンが5.3未満の場合)
function my_usces_filter_template_redirect() {
    return false;
}
add_filter( 'usces_filter_template_redirect', 'my_usces_filter_template_redirect' );

2つ関数を書いていますが、1つ目の1行コードで対応できます。もしサーバーのPHPバージョンが5.3未満の場合は無名関数が使えないので後者で対応します。

商品詳細ページのテンプレートをリダイレクトしているプログラム

同じ現象に遭遇したとしても別のことが原因の可能性もあるので、リダイレクトしているコアプログラムを一部貼り付けておきます。「usc-e-shop\classes\usceshop.class.php」クラスのtemplate_redirect()メソッドです。(Welcartのバージョンは1.9.3、商品詳細ページをリダイレクトしている部分のみ切り取ってます)

function template_redirect () {
    global $wpdb, $wp_version, $post, $usces_entries, $usces_carts, $usces_members, $usces_gp, $member_regmode;
    
    if ( version_compare( $wp_version, '4.4-beta', '>' ) && is_embed() ) {
        return;
    }
    
    
    if ( apply_filters( 'usces_action_template_redirect', false ) ) {
        return;
    }//Deprecated
    if ( apply_filters( 'usces_filter_template_redirect', false ) ) {
        return;
    }
    
    $parent_path = get_template_directory() . '/wc_templates';
    $child_path  = get_stylesheet_directory() . '/wc_templates';
    
    if ( is_single() && 'item' == $post->post_mime_type ) {
        
        if ( file_exists( $child_path . '/wc_item_single.php' ) ) {
            if ( ! post_password_required( $post ) ) {
                include( $child_path . '/wc_item_single.php' );
                exit;
            }
        } elseif ( file_exists( $parent_path . '/wc_item_single.php' ) && ! defined( 'USCES_PARENT_LOAD' ) ) {
            if ( ! post_password_required( $post ) ) {
                include( $parent_path . '/wc_item_single.php' );
                exit;
            }
        }
    }
}

私の場合は9行目のフックusces_filter_template_redirectが原因でした。今回紹介したコードで直らない場合、他の条件分岐の部分でテンプレートが割り当てられない状況に陥っているかもしれません。

書いた人

Symbol Mark

Ryoichi(しつ)

除菌ティッシュを買い込んで使いきれずによく乾かす人。

療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。

※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。

うぇぶ: @s_ryone