[未解決] お勧め商品に空白の商品が表示される
-
投稿者投稿
-
2013年2月1日 7:25 AM #52212kazz参加者
動作に関するご質問の場合は必ずご記入ください。
WordPress のバージョン:3.5
Welcart のバージョン:1.2.3
ご利用のテーマ:独自
症状を確認したブラウザ:IE9、Opera12、Chrome24
「先頭に固定表示」としている通常のブログ投稿がお勧め商品に表示されます。
お勧め商品を設定している商品の単独画面を表示すると設定した商品のほかに空白(写真も商品名も価格も表示されない)の商品が一つ表示されます。
この商品をクリックすると「先頭に固定表示」となっているブログ記事が表示されます。
「先頭に固定表示」を外すと空白のお勧め商品が表示されなくなります。
2013年2月2日 11:00 PM #66059nanbuキーマスターこんにちは。
お勧め商品を設定している商品の単独画面とは何のページのことですか?
こちらで、トップページやカテゴリーページを確認してみましたが、「先頭に固定表示」とした記事が表示されるということはありませんでした。
2013年2月5日 8:08 AM #66060kazz参加者現在、wc_templates/wc_item_single.phpをテーマフォルダにコピーし、レイアウトを変更して使用しています。
その中のusces_assistance_itemで表示されるお勧め商品でこの現象が発生しています。
少し追いかけてみたところ、template_func.phpのusces_assistance_item関数内でusces_get_assistance_ids関数が正しくお勧め商品のIDを返しているにも関わらずwp_queryの戻り値には、前述の通り、「先頭に固定表示」としたブログ記事が含まれてしまっている状況です。
wp_queryが内部的に生成しているSQLは
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1 AND wp_posts.ID IN (361) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
ORDER BY wp_posts.post_date DESC LIMIT 0, 10ですが、返ってくる結果はID361の他に固定表示のID469が含まれています。
2013年2月7日 7:14 AM #66061nanbuキーマスターusces_assistance_item()はお勧め商品ではなく、Welcartでは関連商品と呼んでおります。
やはり、こちらではそう言った症状が出ないので確認ができないのですが、template_func.phpのusces_assistance_item()を、以下のコードに入れ替えてみていただけますでしょうか。こちらではこのコードでも問題ないことを確認しています。
function usces_assistance_item($post_id, $title ){
if (usces_get_assistance_id_list($post_id)) :
global $post;
query_posts( array('post__in'=>usces_get_assistance_ids($post_id)) );
if(have_posts()) :
add_filter( 'excerpt_length', 'welcart_assistance_excerpt_length' );
add_filter( 'excerpt_mblength', 'welcart_assistance_excerpt_mblength' );
?>
<div class="assistance_item">
<h3><?php echo $title; ?></h3>
<ul class="clearfix">
<?php
while (have_posts()) :
the_post();
usces_remove_filter();
usces_the_item();
ob_start();
?>
<li>
<div class="listbox clearfix">
<div class="slit">
<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php usces_the_itemImage(0, 100, 100, $post); ?></a>
</div>
<div class="detail">
<div class="assist_excerpt">
<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><h4><?php usces_the_itemName(); ?></h4></a>
<?php the_excerpt(); ?>
</div>
<div class="assist_price">
<?php if (usces_is_skus()) : ?>
<?php _e('$', 'usces'); ?><?php usces_the_firstPrice(); ?>
<?php endif; ?>
</div>
</div>
</div>
</li>
<?php
$list = ob_get_contents();
ob_end_clean();
echo apply_filters('usces_filter_assistance_item_list', $list, $post);
endwhile; ?>
</ul>
</div><!-- end of assistance_item -->
<?php
wp_reset_query();
usces_reset_filter();
remove_filter( 'excerpt_length', 'welcart_assistance_excerpt_length' );
remove_filter( 'excerpt_mblength', 'welcart_assistance_excerpt_mblength' );
endif;
endif;
}2013年2月7日 9:30 AM #66062kazz参加者ご提示頂いたコードで試してみました。
やはり固定表示の記事が含まれてしまいます。
さらに$postが汚れるせいか、商品画像が2重に表示されたりします。
WP_Queryでsticky_postが含まれてくるのはWordPressの仕様として正しい動きのように思うのですがどうでしょうか?
ちなみにこちらで試して効果があったのは次の2つでした。
1.ignore_sticky_postsを追加する
$assistanceposts = new WP_Query( array('post__in'=>usces_get_assistance_ids($post_id), 'ignore_sticky_posts'=>1) );
2.カテゴリーを指定する
$assistanceposts = new WP_Query( array('post__in'=>usces_get_assistance_ids($post_id), 'category_name'=>'item') );
あと蛇足ですが、ループの最後ではwp_reset_query()の他に、wp_reset_postdata()も行った方が良いのではないでしょうか。
2013年2月12日 7:39 AM #66063nanbuキーマスターkazzさん、ありがとうございます。確かにそのようにした方が間違いないかと思います。
ただ合点がいかないのは、こちらの環境ではsticky_postが表示されないということです。まるで関係のない「Hello world!」を固定表示に設定していますが、商品詳細の関連商品欄にはタグ付けされたものしか表示されません。何かWordPressに設定が有りましたでしょうか。
2013年2月12日 8:04 AM #66064kazz参加者確かにそちらの環境で再現できないのが引っ掛かるところですね。
WordPressの設定を見てもそれらしいものが見当たりません。
2013年2月12日 8:30 AM #66065nanbuキーマスターまずは、カテゴリーを指定するよう仕様を変更してみようと思います。ありがとうございました。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。