web-dev-qa-db-ja.com

アルファベット順に投稿(woocommerce製品)を注文するにはどうすればいいですか。

私は私のWordpressの投稿(たぶんWoocommerce製品である)をアルファベット順に並べる必要があるが、私は特定の単語を無視したい。 'The'と 'A'と 'An'。

特定の選択した単語を無視するためにorderby = ASCの上にカスタム投稿クエリを対象とすることができる関数やフィルタはありますか?

<?php
// My custom query
$args = array( 'post_type' => 'product', ... );
$loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post(); ?>
2
Monkey Puzzle

さて、ちょっとした回避策で解決しました。

  1. Woocommerceに新しい並べ替え機能を追加します。 https://Gist.githubusercontent.com/bekarice/0df2b2d54d6ac8076f84/raw/wc-sort-by-postmeta.php はうまく動作しますが、メタ値に関するビットは削除されます)カスタムフィールドでソートしていないので、キーも使用できます(ただし、これも有効な回避策になる可能性があります)。
  2. Orderbyを 'name'に変更してください。例えば投稿タイトルではなくスラグを投稿してください。
  3. / a-childs-storyが/ childs-storyになるように、スラッグ/パーマリンクから問題のある単語を削除するようにすべての製品を変更します。
  4. Woocommerce設定(商品)のデフォルトオプションとして新しい並べ替えオプションを選択します。

これがあなたのfunctions.phpのための最終的なコードです:

 /**
  * Cool orderby function from Monkey Puzzle. Adapted from:
  * Tutorial: http://www.skyverge.com/blog/sort-woocommerce-products-custom-fields/
 **/
function monkey_ordering_args( $sort_args ) {

$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
switch( $orderby_value ) {

    // Name your sortby key whatever you'd like; must correspond to the $sortby in the next function
    case 'slug':
        $sort_args['orderby']  = 'name';
        // Sort by ASC because we're using alphabetic sorting
        $sort_args['order']    = 'asc';
        break;          
}

return $sort_args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'monkey_ordering_args' );


// Add these new sorting arguments to the sortby options on the frontend
function monkey_add_new_orderby( $sortby ) {

// Adjust the text as desired
$sortby['slug'] = __( 'Sort by name', 'woocommerce' );

return $sortby;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'monkey_add_new_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'monkey_add_new_orderby' );
3
Monkey Puzzle

この種の問題を解決する最も簡単な方法は、ソートに使用する関連値を格納するメタデータフィールドを使用することです。 "stackexchange"の場合は "stackexhange"を格納しますが、 "mark kaplun"の場合は "mark kaplun"を格納します。これは書くのが非常に簡単なコードであるべきです。並べ替えの値が決まったら、あとはメタフィールドによる並べ替えだけです。

この方法の最大の利点はパフォーマンスです。この方法では、すべての重いソートをMYSQLに任せることができ、さらにページングや追加のフィルタを実装するのがはるかに簡単になるからです。

1
Mark Kaplun

WordPressはMySQLで動作します。MySQLを使用することは実際には不可能です。 https://stackoverflow.com/questions/3252577/how-to-sort-in-sql-ignoring-articles-the-a-an- etc

https://stackoverflow.com/questions/1285849/custom-order-by-to-ignore-the

すべての良い答えは、WPにとって理想的ではない新しいコラムを示唆しています。

PHPで実行する関数を作成し、それをMySQLの後に実行することができます。それで、それは問題を解決することができるか、あるいはテーブルソーターのようにJSONを使ってあなたの製品/投稿とJavaスクリプトスクリプトをロードすることができます: http://mottie.github.io/tablesorter/docs/example-parsers -ignore-articles.html

0
Leo Caseiro