Welcart で、商品詳細の出力位置をカートに入れるボタンより下に出す

以前の記事で商品詳細ページに在庫数を表示するという修正をご紹介させていただきました。私のところでは Twenty Ten というテーマのまま運用しています関係上 Welcart の掲示板を見てもなかなか一発で回答に着かないことが多いです。今回修正したかった内容は、商品の説明文の表示位置を、「カートに入れる」ボタンよりも下に表示したくなったというものです。調査の結果、前回同様 single_item.php を修正すればいけそうということで、コードの修正したところうまい具合にいけたので OK です。

wordpress のディレクトリ/wp-content/plugins/usc-e-shop/templates/ のファイルを修正しているので、更新やパッチを当てた場合は、この作業も都度しなければなりません。これは注意ですね。ここらへんの表示位置などはカスタマイズ対応されるといいですね。

$ cat single_item.php.patch
*** single_item.php.orig        2013-07-25 14:48:18.541764200 +0900
--- single_item.php     2013-07-25 14:52:15.426313200 +0900
*************** if(usces_sku_num() === 1) { //1SKU
*** 28,34 ****
        $html .= '<div class="field_name">' . apply_filters('usces_filter_sellingprice_label', $usces_sellingprice, __('selling price', 'usces'), usces_guid_tax('return')) . '</div>'."\n";
        $html .= '<div class="field_price">' . usces_the_itemPriceCr('return') . '</div>'."\n";
        $html .= '</div>'."\n";
!       $singlestock = '<div class="field">' . __('stock status', 'usces') . ' : ' . esc_html(usces_get_itemZaiko( 'name' )) . '</div>'."\n";
        $html .= apply_filters('single_item_stock_field', $singlestock);
        $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
        if($item_custom){
--- 28,34 ----
        $html .= '<div class="field_name">' . apply_filters('usces_filter_sellingprice_label', $usces_sellingprice, __('selling price', 'usces'), usces_guid_tax('return')) . '</div>'."\n";
        $html .= '<div class="field_price">' . usces_the_itemPriceCr('return') . '</div>'."\n";
        $html .= '</div>'."\n";
!       $singlestock = '<div class="field">' . __('stock status', 'usces') . ' : ' . esc_html(usces_get_itemZaiko( 'name' )) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</div>'."\n";
        $html .= apply_filters('single_item_stock_field', $singlestock);
        $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
        if($item_custom){
*************** if(usces_sku_num() === 1) { //1SKU
*** 37,43 ****
                $html .= '</div>'."\n";
        }

!       $html .= $content."\n";
        $html .= '</div><!-- end of exp -->'."\n";
        $html .= usces_the_itemGpExp('return');
        $html .= '<div class="skuform" align="right">'."\n";
--- 37,43 ----
                $html .= '</div>'."\n";
        }

! //    $html .= $content."\n";
        $html .= '</div><!-- end of exp -->'."\n";
        $html .= usces_the_itemGpExp('return');
        $html .= '<div class="skuform" align="right">'."\n";
*************** if(usces_sku_num() === 1) { //1SKU
*** 50,56 ****
                $html .= "</table>\n";
        }
        if( !usces_have_zaiko() ){
!               $html .= '<div class="zaiko_status">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . '</div>'."\n";
        }else{
                $html .= '<div style="margin-top:10px">'.__('Quantity', 'usces').usces_the_itemQuant('return') . esc_html(usces_the_itemSkuUnit('return')) . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</div>'."\n";
                $html .= '<div class="error_message">' . usces_singleitem_error_message($post->ID, usces_the_itemSku('return'), 'return') . '</div>'."\n";
--- 50,56 ----
                $html .= "</table>\n";
        }
        if( !usces_have_zaiko() ){
!               $html .= '<div class="zaiko_status">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</div>'."\n";
        }else{
                $html .= '<div style="margin-top:10px">'.__('Quantity', 'usces').usces_the_itemQuant('return') . esc_html(usces_the_itemSkuUnit('return')) . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</div>'."\n";
                $html .= '<div class="error_message">' . usces_singleitem_error_message($post->ID, usces_the_itemSku('return'), 'return') . '</div>'."\n";
*************** if(usces_sku_num() === 1) { //1SKU
*** 63,69 ****
        usces_have_skus();
        $html .= '<h3>' . usces_the_itemName( 'return' ) . '&nbsp; (' . usces_the_itemCode( 'return' ) . ') </h3>'."\n";
        $html .= '<div class="exp clearfix">'."\n";
!       $html .= $content."\n";
        $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
        if($item_custom){
                $html .= '<div class="field">'."\n";
--- 63,69 ----
        usces_have_skus();
        $html .= '<h3>' . usces_the_itemName( 'return' ) . '&nbsp; (' . usces_the_itemCode( 'return' ) . ') </h3>'."\n";
        $html .= '<div class="exp clearfix">'."\n";
! //    $html .= $content."\n";
        $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
        if($item_custom){
                $html .= '<div class="field">'."\n";
*************** if(usces_sku_num() === 1) { //1SKU
*** 117,127 ****
                $html .= '<span class="price">' . usces_the_itemPriceCr('return') . '</span><br />' . usces_the_itemGpExp('return') . '</td>'."\n";
                $html .= '</tr>'."\n";
                $html .= '<tr>'."\n";
!               $html .= '<td class="zaiko">' . usces_get_itemZaiko( 'name' ) . '</td>'."\n";
                $html .= '<td class="quant">' . usces_the_itemQuant('return') . '</td>'."\n";
                $html .= '<td class="unit">' . usces_the_itemSkuUnit('return') . '</td>'."\n";
                if( !usces_have_zaiko() ){
!                       $html .= '<td class="button">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . '</td>'."\n";
                }else{
                        $html .= '<td class="button">' . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</td>'."\n";
                }
--- 117,127 ----
                $html .= '<span class="price">' . usces_the_itemPriceCr('return') . '</span><br />' . usces_the_itemGpExp('return') . '</td>'."\n";
                $html .= '</tr>'."\n";
                $html .= '<tr>'."\n";
!               $html .= '<td class="zaiko">' . usces_get_itemZaiko( 'name' ) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</td>'."\n";
                $html .= '<td class="quant">' . usces_the_itemQuant('return') . '</td>'."\n";
                $html .= '<td class="unit">' . usces_the_itemSkuUnit('return') . '</td>'."\n";
                if( !usces_have_zaiko() ){
!                       $html .= '<td class="button">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</td>'."\n";
                }else{
                        $html .= '<td class="button">' . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</td>'."\n";
                }
*************** if(usces_sku_num() === 1) { //1SKU
*** 134,139 ****
--- 134,141 ----
        $html .= '</div><!-- end of skuform -->'."\n";
        $html .= apply_filters('single_item_multi_sku_after_field', NULL);
  }
+
+ $html .= "\n".$content."\n";

  $html .= '<div class="itemsubimg">'."\n";
  $imageid = usces_get_itemSubImageNums();

Welcart の商品ページに在庫数表示

Welcart の商品ページには在庫状態という欄がありまして、在庫有り・無しは表示されるのですが、数量は表示されません。Wordpress のテンプレートに Welcart のデフォルトテーマ使ってる場合は WordPress のテーマ管理からテンプレートのphpファイル修正すれば出来るようですが、私の所では未だに Twenty Ten を使っていまして、そこにショップングカートを載せています。なので、プラグインの中を直接いじります。

サポートページなど見てますと、single_item.php を修正すれば出来るとありましたのでコードを修正し表示テストして OK となりました。プラグインの更新がかかると上書きされて消えると思われるので diff 貼っておく次第。

*** single_item.php.orig	2013-07-11 11:38:32.008441000 +0900
--- single_item.php	2013-07-11 11:38:43.734111600 +0900
*************** if(usces_sku_num() === 1) { //1SKU
*** 28,34 ****
  	$html .= '<div class="field_name">' . apply_filters('usces_filter_sellingprice_label', $usces_sellingprice, __('selling price', 'usces'), usces_guid_tax('return')) . '</div>'."\n";
  	$html .= '<div class="field_price">' . usces_the_itemPriceCr('return') . '</div>'."\n";
  	$html .= '</div>'."\n";
! 	$singlestock = '<div class="field">' . __('stock status', 'usces') . ' : ' . esc_html(usces_get_itemZaiko( 'name' )) . '</div>'."\n";
  	$html .= apply_filters('single_item_stock_field', $singlestock);
  	$item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
  	if($item_custom){
--- 28,34 ----
  	$html .= '<div class="field_name">' . apply_filters('usces_filter_sellingprice_label', $usces_sellingprice, __('selling price', 'usces'), usces_guid_tax('return')) . '</div>'."\n";
  	$html .= '<div class="field_price">' . usces_the_itemPriceCr('return') . '</div>'."\n";
  	$html .= '</div>'."\n";
! 	$singlestock = '<div class="field">' . __('stock status', 'usces') . ' : ' . esc_html(usces_get_itemZaiko( 'name' )) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</div>'."\n";
  	$html .= apply_filters('single_item_stock_field', $singlestock);
  	$item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
  	if($item_custom){
*************** if(usces_sku_num() === 1) { //1SKU
*** 50,56 ****
  		$html .= "</table>\n";
  	}
  	if( !usces_have_zaiko() ){
! 		$html .= '<div class="zaiko_status">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . '</div>'."\n";
  	}else{
  		$html .= '<div style="margin-top:10px">'.__('Quantity', 'usces').usces_the_itemQuant('return') . esc_html(usces_the_itemSkuUnit('return')) . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</div>'."\n";
  		$html .= '<div class="error_message">' . usces_singleitem_error_message($post->ID, usces_the_itemSku('return'), 'return') . '</div>'."\n";
--- 50,56 ----
  		$html .= "</table>\n";
  	}
  	if( !usces_have_zaiko() ){
! 		$html .= '<div class="zaiko_status">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</div>'."\n";
  	}else{
  		$html .= '<div style="margin-top:10px">'.__('Quantity', 'usces').usces_the_itemQuant('return') . esc_html(usces_the_itemSkuUnit('return')) . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</div>'."\n";
  		$html .= '<div class="error_message">' . usces_singleitem_error_message($post->ID, usces_the_itemSku('return'), 'return') . '</div>'."\n";
*************** if(usces_sku_num() === 1) { //1SKU
*** 117,127 ****
  		$html .= '<span class="price">' . usces_the_itemPriceCr('return') . '</span><br />' . usces_the_itemGpExp('return') . '</td>'."\n";
  		$html .= '</tr>'."\n";
  		$html .= '<tr>'."\n";
! 		$html .= '<td class="zaiko">' . usces_get_itemZaiko( 'name' ) . '</td>'."\n";
  		$html .= '<td class="quant">' . usces_the_itemQuant('return') . '</td>'."\n";
  		$html .= '<td class="unit">' . usces_the_itemSkuUnit('return') . '</td>'."\n";
  		if( !usces_have_zaiko() ){
! 			$html .= '<td class="button">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . '</td>'."\n";
  		}else{
  			$html .= '<td class="button">' . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</td>'."\n";
  		}
--- 117,127 ----
  		$html .= '<span class="price">' . usces_the_itemPriceCr('return') . '</span><br />' . usces_the_itemGpExp('return') . '</td>'."\n";
  		$html .= '</tr>'."\n";
  		$html .= '<tr>'."\n";
! 		$html .= '<td class="zaiko">' . usces_get_itemZaiko( 'name' ) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</td>'."\n";
  		$html .= '<td class="quant">' . usces_the_itemQuant('return') . '</td>'."\n";
  		$html .= '<td class="unit">' . usces_the_itemSkuUnit('return') . '</td>'."\n";
  		if( !usces_have_zaiko() ){
! 			$html .= '<td class="button">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</td>'."\n";
  		}else{
  			$html .= '<td class="button">' . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</td>'."\n";
  		}

当ブログに Welcart プラグイン導入

ちょっと思い付きで 日本初 WordPress 専用ショッピングカート Welcart for WordPress というのをインストールしていろいろ実験していました。

プラグインを入れてテスト的にカートが動くなぁというところで約半日。マスタに相当するところをいじりつつ関連がハッキリしてきたところで1日。PayPal の PDT にチャレンジするも、PayPal での決済は OK。プラグインのログも Success になっているけどカートがエラー出すのが原因わからず挫折。PayPal 請求決済で十分でしょということにしたところで2日。

商品を登録すると、それが Blog のエントリになるので、登録直後 Blog の最初の画面に表示されちゃうという仕様ですがこれは放置する方向で考えちう。

にしても、個人がちょろっとカート運用するだけなら十分な機能です。有償オプションは、ダウンロード販売や定期購入で繰替えし請求発生するものとかなので今の私には必要ないと。