Welcartを使ったサイトで商品ランキングを表示することになりました。
テーマはWelcart Basicを使っています。
商品ランキングは、Welcartにあるベストセラーウィジェットを使えば表示できそうです。
表示のカスタマイズをするときにトラブったのでメモしておきます。
Welcart Basicは『usces_widget_bestseller_auto_text』が効かない
usces_widget_bestseller_auto_textでカスタマイズすればいいよ、という記事を見かけたのですが、いくらフックを書いても全く反映されませんでした。
Welcart Basicのテーマを調べて見ると、すでにフックが使われており上書きされていました。
add_filter( 'usces_filter_bestseller', 'welcart_basic_filter_bestseller', 10, 3 );
ということなので、Welcart Basicを使う場合は、usces_filter_bestseller
でカスタマイズする必要があります。
usces_filter_bestsellerがremove_filterできない
Welcart Basicで設定されているusces_filter_bestsellerをremove_filterしようとしましたが、うまくremoveできませんでした。
親テーマで定義されているフックを子テーマからremove_filterする場合は、別途作法がありました。
function parent_hook_remove_filter(){
remove_filter( 'usces_filter_bestseller', 'welcart_basic_filter_bestseller', 10 );
}
add_action('after_setup_theme','parent_hook_remove_filter');
子テーマでwelcart_basic_filter_bestseller関数をカスタマイズ
Welcart Basicにあるwelcart_basic_filter_bestseller関数をそのままコピーして名前を変えて、中身をカスタマイズすれば、いかようにもカスタマイズできます。
<?php
/***********************************************************
* Explanation : bestseller
***********************************************************/
function _welcart_basic_filter_bestseller( $list, $post_id, $i ) {
global $usces;
$post = get_post( $post_id );
$list = '<li>'."\n";
$list .= '<div class="itemimg"><a href="'.get_permalink($post_id).'">'.usces_the_itemImage( 0, 192, 192, $post, 'return' ).'</a></div>'."\n";
$list .= '<div class="itemname"><a href="'.get_permalink($post_id).'">'.get_the_title($post_id).'</a></div>'."\n";
if( usces_have_zaiko_anyone( $post_id ) ) {
$list .= '<div class="itemprice">' . usces_the_firstPriceCr( 'return', $post ) . usces_guid_tax('return') . '</div>'."\n";
$list .= usces_crform_itemPriceCr_taxincluded( $post_id );
} else {
$skus = $usces->get_skus( $post_id );
$num = $skus[0]['stock'];
$list .= '<div class="itemsoldout">'.$usces->zaiko_status[$num].'</div>'."\n";
}
$list .= '</li>'."\n";
return $list;
}
add_filter( 'usces_filter_bestseller', '_welcart_basic_filter_bestseller', 10, 3 );
まとめ
Welcart BasicはWelcartプラグインのフックを使っていることがあるので、Welcartプラグインのフックが上手く動かないことがあります。
その場合は、Welcart Basicのテーマを調べた方がよいでしょう。