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
が原因でした。今回紹介したコードで直らない場合、他の条件分岐の部分でテンプレートが割り当てられない状況に陥っているかもしれません。