商品一覧ページでの商品の並び順変更
-
投稿者投稿
-
2014年4月3日 5:04 PM #69543gomanome参加者
——————————————-
WordPress のバージョン:3.7.1
Welcart のバージョン:1.3.13
ご利用のテーマ:Welcart Default を親テーマとするオリジナル子テーマ
症状を確認したブラウザ:Firefox
サーバー(会社名、サービス名):CPI PHPバージョン5.2.6
SSLの利用: あり
WordPress のパーマリンク設定: カスタム構造 /%category%/%post_id%.html
——————————————–
はじめまして、すばらしいプラグインを開発してくださりありがとうございます。
商品登録等もほぼ終了したところで思うようにできない部分があり、ご相談させていただきます。商品一覧ページの表示をカスタマイズするため、子テーマ側に「archive.php」をコピーし、それをカスタマイズしています。
表示内容自体は、商品ページへのリンクつきの商品名のみの表示にするだけですので、
問題なく実現していますが、並び順を変更したいと思い、functions.phpにpre_get_postsフックを使った以下のような指定をしたのですが反映しません。
実は、反映できていたと思うのですが、諸事情があり、全商品を再登録したところ、反映しなくなってしまったのです。
全商品の再登録を行なう前と後で変更したところはありません。
何か見落としているところがありますでしょうか? もしくは、管理画面で指定できたりするのでしょうか?
アドバイスいただけますと助かります。よろしくお願いいたします。function getcatorder( $query ) { if ( is_admin() || ! $query->is_main_query() ) return; if ( $query->is_category() ) { $query->set( 'posts_per_page', '-1' ); $query->set( 'orderby', 'usces_the_itemCode()' ); // 商品コードで並び替え $query->set( 'order', 'ASC' ); return; } } add_action( 'pre_get_posts', 'getcatorder' );
2014年4月3日 7:44 PM #69557kitamuuu参加者こんにちは。
orderbyの指定の仕方が違いますよ。usces_the_itemCode()ではなく$query->set( 'orderby', 'title' );
とすればうまくいくと思います。
- この返信は10年、 7ヶ月前にkitamuuuが編集しました。
2014年4月4日 9:53 AM #69562gomanome参加者ご返信いただき、ありがとうございます。
説明が不十分ですみません。「title」を指定した場合の並び順は、
「商品名」順になると思うのですが、「商品コード」順で並べたいのです。どちらにしても、現在、上記の指定部分を
title
と指定しても、
「商品名」順には並ばす、よくわからない順番で並んでしまいます。
取得件数は反映しますのでフックはかかっていると思います。「商品コード」はカスタムフィールドなので別の書き方になるのでしょうか?
2014年4月4日 12:48 PM #69569gomanome参加者過去のフォーラムを参考にして、解決できたように思われます。
参考にさせていただいたのは、こちらのトピックです。
https://www.welcart.com/community/forums/topic/%E5%95%86%E5%93%81%E3%81%AE%E4%B8%A6%E3%81%B9%E6%9B%BF%E3%81%88#post-61624$query->set( 'orderby', 'title' );
を指定してタイトル順に並んでいるように見えていたのは、
「たまたま」商品の作成順が希望と同じだったからではないかと思われます。このコードで正しいのか自信はないのですが、とりあえず希望の実装になりました。
function getcatorder( $query ) { if ( is_admin() || ! $query->is_main_query() ) return; if ( $query->is_category() ) { $query->set( 'posts_per_page', '-1' ); $query->set( 'orderby', 'meta_value' ); $query->set( 'meta_key', '_itemCode' ); $query->set( 'order', 'ASC' ); return; } } add_action( 'pre_get_posts', 'getcatorder' );
ありがとうございました。
2014年4月4日 1:22 PM #69570kitamuuu参加者すみません。titleは商品名でしたね!
その記述で正しいはずですよ。2024年4月2日 10:12 AM #101673folon参加者——————————————-
WordPress のバージョン:6.0.7
Welcart のバージョン:2.9.14
PHP のバージョン:7.4.33
Welcart専用の拡張プラグインとバージョン : WCEX SKU Select 1.4.5
ご利用の親テーマとバージョン :Welcart Basic1.8.3
ご利用の子テーマとバージョン :自作の子テーマ
症状を確認したブラウザ:どれでも
サーバー【重要】:WADAX/WPスタンダードプラン
——————————————–以前このトピックを拝見し、私も商品コードの並びで表示できることができました。
先日welcartのバージョンを最新にしたので、この方法が使えなくなってしまいました。「Welcart 2.7 のためのカスタマイズ修正」を確認して、functions.phpに下記を記述しましたが表示の並び順に変化がありません。
初心者で、質問の仕方が間違っているかもしれませんが、アドバイスどうぞよろしくお願いいたします。function sort_by_itemname( $query ) { if ( is_admin() || ! $query->is_main_query() ) { return; } if ( $query->is_category ) { $cat_id = get_cat_ID( get_query_var( 'category_name' ) ); $cat_id2 = get_query_var( 'cat' ); if ( usces_is_cat_of_item( $cat_id ) || usces_is_cat_of_item( $cat_id2 ) ) { add_filter( 'posts_join', 'my_join' ); add_filter( 'posts_orderby', 'my_orderby'); } } } add_action( 'pre_get_posts', 'sort_by_itemcode’ ); function my_join( $join ) { global $wpdb; $item_table = usces_get_tablecode( 'usces_item' ); $join .= " INNER JOIN {$item_table} AS welitem ON {$wpdb->posts}.ID = welitem.post_id"; return $join; } function my_orderby( $orderby ) { $orderby = 'welitem.itemCode ASC'; return $orderby; }
-
投稿者投稿
- このトピックに返信するにはログインが必要です。