Meta_compareは、予想通り整数の代わりに値を文字列として扱っているようです

wordpress.stackexchange https://wordpress.stackexchange.com/questions/3737

質問

Meta_compareを使用しようとしています コーデックスで示唆されているように:

query_posts('meta_key=miles&meta_compare=<=&meta_value=22');

これが私のコードです:

global $wp_query;
query_posts(
array_merge(
    array(
        'category__and' => $mycatsarray,
        'meta_key' => 'price',
        'meta_compare' => '>=',
        'meta_value' => 8500000,
        'orderby' => meta_value_num,
        'order'=>DESC
    ),
    $wp_query->query
)

);

array_mergeを使用して、元のクエリを保持しています。したがって、Meta_compareとMeta_Valueに推奨される構文( '&name = value')をどのように使用するかを理解できませんでした。とにかく、私のコードでは、Meta_Valueは文字列のように扱われ、予想どおり整数ではないようです。

これは、カスタム投稿からの典型的な価格カスタムフィールドの例です。

  • 8500000
  • 600
  • 15000
  • 900
  • 750
  • 9000000

文字列の問題でない場合、WordPressが次のようにこれらのカスタムフィールドを注文している(DESC)である可能性があります。

  1. 9000000
  2. 900
  3. 8500000
  4. 750
  5. 600
  6. 15000

次のように注文(DESC)を注文してほしいと思います。

  1. 9000000
  2. 8500000
  3. 15000
  4. 900
  5. 750
  6. 600

ここで何か間違ったことをしていますか?

役に立ちましたか?

解決

この質問と私の答えを見てください query_posts-> meta_compare /を使用して、メタ値が小さいか大きいか、等しいかを使用してください。

基本的にメタ比較のために値は常に文字列として扱われます。なぜなら、それはそのように渡されるため $wpdb->prepare() 方法。

ライセンス: CC-BY-SA帰属
所属していません wordpress.stackexchange
scroll top