Welcart1.0βを解析する(wc_item_single.php編)
Welcartの1.0βがダウンロードできるようになっていました。
色々新機能が増えていますが、その中でも旧バージョンと大幅に変わったのがwc_templatesという機能です。
これはどうも、今までフィルターでテンプレートファイルを弄っていたのが、wc_templatesというフォルダに入っている
特定のファイル名のファイルを読み取り、Wordpressのテンプレートの用に扱える仕組みのようです。
*参考 http://www.welcart.com/community/archives/2878
今まではテンプレートを改造するときも $html.=なんとかと、全て変数に入力して出力だったのでエラーチェックが大変でしたが
これで大幅に楽になりそうです。
とはいえ、Wordpressと同じノリでページが作成できるかといえばそうでもなく、Welcartの関数もふんだんにつかわれているので
マニュアルがそろっていない現状ではなかなか難しそうです。
というわけで、現在マニュアルがそろっていないので独自で調査してデフォルトテンプレートファイルを解析していこうかと思います。
あくまで自分で解析したものなので、正確性は保証できませんが、何かの参考になってもらえれば幸いです。
とりあえず一回目は商品詳細ページ(wc_item_single.php)からいこうかとおもいます。
<?php /** * <meta content="charset=UTF-8"> * @package Welcart * @subpackage Welcart Default Theme */ get_header(); get_sidebar( 'other' ); ?> <div id="content" class="two-column"> <div class="catbox"> <?php if (have_posts()) : the_post(); ?> <div <?php post_class() ?> id="post-<?php the_ID(); ?>"> <h1 class="item_page_title"><?php the_title(); ?></h1> <div class="storycontent"> <?php usces_remove_filter(); ?> <?php usces_the_item(); ?> <div id="itempage"> <div class="itemimg"> <a href="<?php usces_the_itemImageURL(0); ?>" <?php echo apply_filters('usces_itemimg_anchor_rel', NULL); ?>><?php usces_the_itemImage(0, 300, 300, $post); ?></a> </div>
20行目 usces_remove_filter();
Welcartのフィルターを取り除いている模様。おそらくこのテンプレートを使用しないときに使われるsingle_item.php
まわりのフィルターを排除していると思われる。
21行目 usces_the_item();
グローバル変数 $usces にskuデータを読み込んでいると思われれる。
26行目
usces_the_itemImageURL(0);
usces_the_itemImageURL($number = 0, $out = ” )
商品ページに関連づけられた$number番の画像のURLを表示する。$outにreturnを入れるとphpで扱えるデータとして返ってくる。
echo apply_filters(‘usces_itemimg_anchor_rel’, NULL);
商品画像に対するhref以外の属性をつける場合に使うと思われるフィルターフック。
usces_the_itemImage(0, 300, 300, $post);
usces_the_itemImage($number = 0, $width = 60, $height = 60, $post = ”, $out = ” )
$postに関連づけられた画像の$nunber番を横$width、縦$heightで出力する。$outにreturnを入れるとphp形式で返る。
この$postは$post->IDではなく$postそのものを指定するために、もし現在のページ以外のPOSTデータを使う場合には注意が必要。
<?php if(usces_sku_num() === 1) : usces_have_skus(); ?> <!--1SKU--> <h2 class="item_name"><?php usces_the_itemName(); ?> (<?php usces_the_itemCode(); ?>)</h2> <div class="exp"> <div class="field"> <?php if( usces_the_itemCprice('return') > 0 ) : ?> <div class="field_name"><?php _e('List price', 'usces'); ?><?php usces_guid_tax(); ?></div> <div class="field_cprice"><?php usces_the_itemCpriceCr(); ?></div> <?php endif; ?> <div class="field_name"><?php _e('selling price', 'usces'); ?><?php usces_guid_tax(); ?></div> <div class="field_price"><?php usces_the_itemPriceCr(); ?></div> </div> <div class="field"><?php _e('stock status', 'usces'); ?> : <?php usces_the_itemZaiko(); ?></div> <?php if( $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' ) ) : ?> <div class="field"><?php echo $item_custom; ?></div> <?php endif; ?> <?php the_content(); ?> </div><!-- end of exp --> <form action="<?php echo USCES_CART_URL; ?>" method="post"> <?php usces_the_itemGpExp(); ?> <div class="skuform" align="right"> <?php if (usces_is_options()) : ?> <table class='item_option'> <caption><?php _e('Please appoint an option.', 'usces'); ?></caption> <?php while (usces_have_options()) : ?> <tr><th><?php usces_the_itemOptName(); ?></th><td><?php usces_the_itemOption(usces_getItemOptName(),''); ?></td></tr> <?php endwhile; ?> </table> <?php endif; ?> <?php if( !usces_have_zaiko() ) : ?> <div class="zaiko_status"><?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('Sold Out', 'usces')); ?></div> <?php else : ?> <div style="margin-top:10px"><?php _e('Quantity', 'usces'); ?><?php usces_the_itemQuant(); ?><?php usces_the_itemSkuUnit(); ?><?php usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0); ?></div> <div class="error_message"><?php usces_singleitem_error_message($post->ID, usces_the_itemSku('return')); ?></div> <?php endif; ?> </div><!-- end of skuform --> <?php echo apply_filters('single_item_single_sku_after_field', NULL); ?> <?php do_action('usces_action_single_item_inform'); ?> </form>
28行目skuが一つしか無いときの処理。skuがあるならデータをセットする。
30行目商品名(usces_the_itemName)と商品コード(usces_the_itemCode)を出力
33-36行目 通常価格(定価)がある場合は表示
37-38行目 売値(販売価格)を表示
40行目 在庫状態を表示
41-43行目 カスタムフィールドが存在する場合は表示する。
usces_get_item_custom( $post->ID, ‘list’, ‘return’ )
$post->IDの投稿のカスタムフィールド(ただし先頭がwccs_の物に限る)を出力する。
出力方式はlistとtableとnotagの三種類。また出力前にusces_filter_item_customのフィルターで
結果を編集できる。
45行目 本文を出力
51-57行目 オプションが設定されている場合はオプションを表示
59-64行目 在庫がない場合の処理と在庫がある場合の処理。usces_filters_single_sku_zaiko_messageフィルターで
売り切れのメッセージを変更できる。
usces_the_itemQuant() 購入数を入力するボックスを表示
usces_the_itemSkuUnit() 単位の表示
usces_the_itemSkuButton() カートに入れるボタンを追加
66行目 usces_singleitem_error_messageフィルターフック(単体skuだったときの処理)の設置
67行目 usces_action_single_item_informアクションフック(商品詳細フォームの最後に実行)の設置
<?php elseif(usces_sku_num() > 1) : usces_have_skus(); ?> <!--some SKU--> <h2 class="item_name"><?php usces_the_itemName(); ?> (<?php usces_the_itemCode(); ?>)</h2> <div class="exp"> <?php the_content(); ?> <?php if( $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' ) ) : ?> <div class="field"> <?php echo $item_custom; ?> </div> <?php endif; ?> </div><!-- end of exp --> <form action="<?php echo USCES_CART_URL; ?>" method="post"> <div class="skuform"> <table class="skumulti"> <thead> <tr> <th rowspan="2" class="thborder"><?php _e('order number', 'usces'); ?></th> <th colspan="2"><?php _e('Title', 'usces'); ?></th> <?php if( usces_the_itemCprice('return') > 0 ) : ?> <th colspan="2">(<?php _e('List price', 'usces'); ?>)<?php _e('selling price', 'usces'); ?><?php usces_guid_tax(); ?></th> <?php else : ?> <th colspan="2"><?php _e('selling price', 'usces'); ?><?php usces_guid_tax(); ?></th> <?php endif; ?> </tr> <tr> <th class="thborder"><?php _e('stock status', 'usces'); ?></th> <th class="thborder"><?php _e('Quantity', 'usces'); ?></th> <th class="thborder"><?php _e('unit', 'usces'); ?></th> <th class="thborder"> </th> </tr> </thead> <tbody> <?php do { ?> <tr> <td rowspan="2"><?php usces_the_itemSku(); ?></td> <td colspan="2" class="skudisp subborder"><?php usces_the_itemSkuDisp(); ?> <?php if (usces_is_options()) : ?> <table class='item_option'> <caption><?php _e('Please appoint an option.', 'usces'); ?></caption> <?php while (usces_have_options()) : ?> <tr> <th><?php usces_the_itemOptName(); ?></th> <td><?php usces_the_itemOption(usces_getItemOptName(),''); ?></td> </tr> <?php endwhile; ?> </table> <?php endif; ?> </td> <td colspan="2" class="subborder price"> <?php if( usces_the_itemCprice('return') > 0 ) : ?> <span class="cprice">(<?php usces_the_itemCpriceCr(); ?>)</span> <?php endif; ?> <span class="price"><?php usces_the_itemPriceCr(); ?></span> <br /><?php usces_the_itemGpExp(); ?> </td> </tr> <tr> <td class="zaiko"><?php usces_the_itemZaiko(); ?></td> <td class="quant"><?php usces_the_itemQuant(); ?></td> <td class="unit"><?php usces_the_itemSkuUnit(); ?></td> <?php if( !usces_have_zaiko() ) : ?> <td class="button"><?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('Sold Out', 'usces')); ?></td> <?php else : ?> <td class="button"><?php usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0); ?></td> <?php endif; ?> </tr> <tr> <td colspan="5" class="error_message"><?php usces_singleitem_error_message($post->ID, usces_the_itemSku('return')); ?></td> </tr> <?php } while (usces_have_skus()); ?> </tbody> </table> </div><!-- end of skuform --> <?php echo apply_filters('single_item_multi_sku_after_field', NULL); ?> <?php do_action('usces_action_single_item_inform'); ?> </form> <?php endif; ?>
70行目 Skuが複数ある場合の処理
72行目商品名(usces_the_itemName)と商品コード(usces_the_itemCode)を出力
74行目 本文を出力
75-79行目 カスタムフィールドが存在する場合は表示する。
usces_get_item_custom( $post->ID, ‘list’, ‘return’ )
$post->IDの投稿のカスタムフィールド(ただし先頭がwccs_の物に限る)を出力する。
出力方式はlistとtableとnotagの三種類。また出力前にusces_filter_item_customのフィルターで
結果を編集できる。
84-102行目 テーブルの項目部分を表示、
103-141行目 skuがある間ループ
105行目 skuコードを表示
106行目 sku表示名を表示
107-117行目 オプションが設定されている場合はオプションを表示
120-122行目 通常価格(定価)がある場合は表示
123-124行目 売値(販売価格)を表示
128行目 在庫状態を表示
129行目 購入数を入力するボックスを表示
130行目 単位の表示
131-135行目 在庫がない場合の処理と在庫がある場合の処理。usces_filters_single_sku_zaiko_messageフィルターで
売り切れのメッセージを変更できる。
134行目 カートに入れるボタンを追加
145行目 single_item_multi_sku_after_fieldフィルターフック(複数skuだったときの処理)の設置
146行目 usces_action_single_item_informアクションフック(商品詳細フォームの最後に実行)の設置
<div class="itemsubimg"> <?php $imageid = usces_get_itemSubImageNums(); ?> <?php foreach ( $imageid as $id ) : ?> <a href="<?php usces_the_itemImageURL($id); ?>" <?php echo apply_filters('usces_itemimg_anchor_rel', NULL); ?>><?php usces_the_itemImage($id, 135, 135, $post); ?></a> <?php endforeach; ?> </div><!-- end of itemsubimg --> <?php usces_assistance_item( $post->ID ); ?> </div><!-- end of itemspage --> </div><!-- end of storycontent --> </div> <?php else: ?> <p><?php _e('Sorry, no posts matched your criteria.'); ?></p> <?php endif; ?> </div><!-- end of catbox --> </div><!-- end of content --> <?php get_footer(); ?>
151-154行目 商品に関連付けられたその他の画像を表示
157行目 usces_assistance_item( $post->ID );
$post->IDの関連商品の表示。
これは$post->IDの商品ページの投稿タグに、表示したい商品の商品コードを入力すると出力されます。
例として、商品コードsample001の商品を関連項目にしたい場合には
表示したい商品の投稿タグにsample001を追加してください。
以上。おおざっぱですが商品詳細ページの説明でした。次回はカートページの解析でもしようかと思います。