Welcartのカート画面から在庫状態の列を削除したい
- Welcartのデフォルトテーマのカート画面には、テーブルに在庫状態を表示する列が存在します
- 通常、在庫のある商品をカートに入れるはずなので、カート画面で在庫状態を表示する必要性はあまりないです。なるべく不要な項目は消してしまいたいところ
- しかし、カート画面のテーブルはプラグイン側の関数で出力されており、テンプレートに手を入れるだけでは表示内容が変更できません
- そこで今回は、フィルターフックを利用してテーブルの内容を書き換えてみたいと思います
サンプルコード
wc_cart_page.php
<table cellspacing="0" id="cart_table">
<thead>
<tr>
<th scope="row" class="num">No.</th>
<th class="thumbnail"> </th>
<th><?php _e('item name','usces'); ?></th>
<th class="quantity"><?php _e('Unit price','usces'); ?></th>
<th class="quantity"><?php _e('Quantity','usces'); ?></th>
<th class="subtotal"><?php _e('Amount','usces'); ?><?php usces_guid_tax(); ?></th>
<th class="action"> </th>
</tr>
</thead>
<tbody>
<?php usces_get_cart_rows(); ?>
</tbody>
<tfoot>
<tr>
<th colspan="5" scope="row" class="aright"><?php _e('total items','usces'); ?><?php usces_guid_tax(); ?></th>
<th class="aright"><?php usces_crform(usces_total_price('return'), true, false); ?></th>
<th> </th>
</tr>
</tfoot>
</table>
- テンプレートのテーブル表示に手を加えます。tbodyタグ内の内容については、usces_get_cart_rows関数で出力されているので、ここではそのままにしておきます
- テーブルの見出しとフッターは関数呼び出しではなく、在庫状態用のセルが書かれていますので、適宜削除します
- 上記サンプルコードは、theadタグ内の不要なセルの削除、tfoot内のcolspanによるセル結合を削除した状態のものになります
functions.php
function correct_cart_rows($html) {
$html = preg_replace('/<td class="stock">(.*)<\/td>/', '', $html);
return $html;
}
add_filter('usces_filter_cart_rows', 'correct_cart_rows', 10, 1);
- usces_get_cart_rows関数で出力されるtbodyタグの内容は、フィルターフックを使って削除します
- 「usces_filter_cart_rows」にフックした関数には、引数にtbodyタグの内容が渡されてきます
- tbodyタグの内容を空置換した結果をreturnしてあげれば、在庫状態用のセルを消すことができます
在庫状態以外の列を削除したい
- サムネイルや単価、数量といった在庫情報以外の情報は、注文内容の最終確認ページにも表示しているためそちらの修正も必要です
- テンプレート「wc_confirm_page.php」のthead、tfootを修正し、functions.phpに下記フックへのフィルターを追加します
add_filter('usces_filter_confirm_rows', 'correct_cart_rows', 10, 1);
- あとは、消したい項目に応じた下記の置換用コードを追加すればOKです
No.
$html = preg_replace('/<td class="num">(.*)<\/td>/', '', $html);
サムネイル
$html = preg_replace('/<td class="thumbnail">(.*)<\/td>/', '', $html);
商品名
$html = preg_replace('/<td class="aleft productname">(.*)<\/td>/', '', $html);
単価
$html = preg_replace('/<td class="aright unitprice">(.*)<\/td>/', '', $html);
数量
$html = preg_replace('/<td class="quantity">(.*)<\/td>/', '', $html);
金額
$html = preg_replace('/<td class="aright subtotal">(.*)<\/td>/', '', $html);
削除ボタン
$html = preg_replace('/<td class="action">(.*)<\/td>/', '', $html);
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。