商品一覧ページでの商品の並び順変更

フォーラム 使い方全般 商品一覧ページでの商品の並び順変更

  • このトピックには5件の返信、3人の参加者があり、最後にfolonにより2週、 3日前に更新されました。
6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • 投稿者
    投稿
  • #69543
    gomanome
    参加者

    ——————————————-
    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' );
    
    #69557
    kitamuuu
    参加者

    こんにちは。
    orderbyの指定の仕方が違いますよ。usces_the_itemCode()ではなく

    $query->set( 'orderby', 'title' );

    とすればうまくいくと思います。

    • この返信は10年前にkitamuuuが編集しました。
    #69562
    gomanome
    参加者

    ご返信いただき、ありがとうございます。
    説明が不十分ですみません。「title」を指定した場合の並び順は、
    「商品名」順になると思うのですが、「商品コード」順で並べたいのです。

    どちらにしても、現在、上記の指定部分を title と指定しても、
    「商品名」順には並ばす、よくわからない順番で並んでしまいます。
    取得件数は反映しますのでフックはかかっていると思います。

    「商品コード」はカスタムフィールドなので別の書き方になるのでしょうか?

    #69569
    gomanome
    参加者

    過去のフォーラムを参考にして、解決できたように思われます。
    参考にさせていただいたのは、こちらのトピックです。
    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' );
    

    ありがとうございました。

    #69570
    kitamuuu
    参加者

    すみません。titleは商品名でしたね!
    その記述で正しいはずですよ。

    #101673
    folon
    参加者

    ——————————————-
    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;
        }
    
6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • このトピックに返信するにはログインが必要です。