私は私の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(); ?>
さて、ちょっとした回避策で解決しました。
これがあなたの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' );
この種の問題を解決する最も簡単な方法は、ソートに使用する関連値を格納するメタデータフィールドを使用することです。 "stackexchange"の場合は "stackexhange"を格納しますが、 "mark kaplun"の場合は "mark kaplun"を格納します。これは書くのが非常に簡単なコードであるべきです。並べ替えの値が決まったら、あとはメタフィールドによる並べ替えだけです。
この方法の最大の利点はパフォーマンスです。この方法では、すべての重いソートをMYSQLに任せることができ、さらにページングや追加のフィルタを実装するのがはるかに簡単になるからです。
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