私のカテゴリページのメインのWordPressループを以下のように修正しようとしています。
add_filter('parse_query', 'my_modified_query');
function my_modified_query( $q ) {
if (!is_admin() && is_category()) {
$q->set( 'orderby', 'meta_value' );
$q->set( 'meta_key', 'my_key' );
}
return $q;
}
しかしうまくいかないようです。
しかし、他に何かを修正する:
$q->set( 'order','title' );
$q->set( 'orderby', 'DESC');
完璧に動作します。ではない
$q->set( 'orderby', 'meta_value' );
$q->set( 'meta_key', 'my_key' );
何か考えているのはなぜ?
最終的に、すべてのメタクエリは_get_meta_sql
を介して実行されます。
_get_meta_sql
関数の402行目から403行目
次の条件付きステートメントは、メタクエリに対して実行されます。
if ( empty( $meta_key ) && empty( $meta_value ) )
continue;
ここには、私たちができることの概要を示すチケットがあります。
http://core.trac.wordpress.org/ticket/16735
ただし、できることは、意図的にクエリにmeta_value
を渡して、!=
(等しくない)比較を使用することです。技術的には、正しい投稿を取得できます.
$q->set( 'meta_key', 'my_key' );
$q->set( 'meta_value', 'WPSE_RULES!' );
$q->set( 'meta_compare', '!=' );
$q->set( 'orderby', 'meta_value' );
ただし、もう1つ問題があります。これらは以前とは逆の方法です。
$q->set( 'order','title' );
$q->set( 'orderby', 'DESC');
order
は、結果を並べる方向を設定します。有効な値は、asc
またはdesc
(大文字または小文字)です。
orderby
は、結果の順序を設定します。日付、タイトル、メタ値など。
meta_query
パラメータを使用して、メタに基づいて投稿をクエリする新しいメソッドが実際にあることは言及しませんでしたが、それでも、上記の問題と古いメタパラメータを回避することはできません(でとにかくmeta_query
に変換されます。いくつかの例へのリンクを提供します。
http://scribu.net/wordpress/advanced-metadata-queries.html
すべてが役立つことを願っています.. :)
あなたが投稿してからほぼ1年が経ったので、あなたはおそらく解決策を得ました。私は数時間前に同じ問題を抱えていましたが、数字を使用していることが判明するまで、meta_value_num
の代わりにmeta_value
を使用していました。
サーバス・サラ。これはあなたのenvato-shopテーマの1つだと思いますか?すでに次のようなクエリを印刷しようとしましたか(戻る前):echo '<pre>'; print_r($q); echo '</pre>';
。
これをテーマfunctions.phpに追加していると思いますか?
$q->set( 'oderby', 'DESC' );
は動作しますが、$q->set( 'oderby', 'meta_value' );
は動作しませんか?スペースで区切られた2つの基本的なorderbyパラメーターを使用して、デフォルトの動作がすべて機能するかどうかを確認してください。はいの場合、スペルミスが発生する可能性があります。 「my_key」以外の値は「meta_key」に対して機能しますか?そうでない場合は、「meta_value」パラメーターが欠落している可能性があります。これについてはわかりませんが、これを見てください: http://codex.wordpress.org/Function_Reference/WP_Query#Parameters またはそれ以上コアファイル内の関数を直接確認します。