サポート » 使い方全般 » WP_Query カスタムフィールドの値でソート

  • カスタム投稿タイプ:store のカスタム分類:newyork の投稿をカスタムフィールドの値:list−position で絞り込み、カスタムフィールドの値:list-numberでソートしたいですがうまくデータが絞り込めないようです、、、

    $args = array(
    	'post_type' => 'store',
    	'meta_query' => array(
    		array(
    			'key' => 'list-position',
    			'value' => 'left',
    			),
    			array(
    				'order' => 'ASC',
    				'orderby' => 'meta_value',
    				'meta_key' => 'list_number',
    				'tax_query' => array(
    				array(
    					'taxonomy' => 'network-list',
    					'field' => 'slug',
    					'terms' => 'newyork',
    					)
    				)
    			)
    		)
    	);
    $the_query = new WP_Query( $args );

    ‘value’ => ‘left’ に該当するデータが表示されています。
    ご教示いただけましたら幸いです。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • ノーチェックですが、こんな感じじゃないですかね。
    list_numberは数字が入っているならmeta_value_numを使ったほうがよさそうです。

    $args = array(
    	'post_type' => 'store',
    	'tax_query' => array(
    		array(
    			'taxonomy' => 'network-list',
    			'field' => 'slug',
    			'terms' => 'newyork'
    		)
    	),
    	'order' => 'ASC',
    	'orderby' => 'meta_value',
    	'meta_value_num' => 'list_number',
    	'meta_query' => array(
    		array(
    			'key' => 'list-position',
    			'value' => 'left'
    		)
    	)
    );
    $the_query = new WP_Query( $args );

    ちょと間違えてました。

    $args = array(
    	'post_type' => 'store',
    	'tax_query' => array(
    		array(
    			'taxonomy' => 'network-list',
    			'field' => 'slug',
    			'terms' => 'newyork'
    		)
    	),
    	'order' => 'ASC',
    	'orderby' => 'meta_value_num',
    	'meta_key' => 'list_number',
    	'meta_query' => array(
    		array(
    			'key' => 'list-position',
    			'value' => 'left'
    		)
    	)
    );
    $the_query = new WP_Query( $args );
    トピック投稿者 kazykazy

    (@kazykazy)

    ikaring 様
    ありがとうございます。

    試させていただきましたが、うまく動かないようです。
    試しに、カスタムフィールドだけの絞り込みに限定してみたのですが、指定したキーの数値による並べ替えが機能しないようです。

    $args = array(
    	'post_type' => 'clinic',
    	'meta_query' => array(
    		array(
    			'key' => 'list-position',
    			'value' => 'left',
    		),
    		array(
                           'order' => 'ASC'
    			'orderby' => 'meta_value_num',
                            'meta_key' => 'list_number',
    		)
    	)
     );
    $query = new WP_Query( $args );

    値:left のデータが表示されますが、並べ替えができないようです。

    最小限のクエリーにもかかわらず機能しないため、データベースのデータが問題かもしれません、、、
    カスタムフィールドのデータはadvance customfield プラグインを使用して項目を増やしたり減らしたり色々していたもので、、、

    mた、環境をリセットして試してみたいと思います。

    list-positionやnetwork-listはハイフンですが、list_numberはアンダースコアになっていますが、そのあたり打ち間違いとかないですかね?

    トピック投稿者 kazykazy

    (@kazykazy)

    ikaring 様
    ありがとうございます。

    今回フォーラムに掲載ましたコードはフォーラム上で書き込みまして、、、
    実際のサイトではその辺りじっくり検証しておりました。

    混乱させて貴重なお時間を奪ってしまいまして申し訳ありません。

    先ほどのコード中、orderとかはmeta_queryの外にないといけないんじゃないですかね。

    $args = array(
    	'post_type' => 'clinic',
    	'order' => 'ASC',
    	'orderby' => 'meta_value_num',
    	'meta_key' => 'list_number',
    	'meta_query' => array(
    		array(
    			'key' => 'list-position',
    			'value' => 'left',
    		)
    	)
    );
    $query = new WP_Query( $args );
    モデレーター gatespace

    (@gatespace)

    横からですが、別の考え方ってことで。

    そもそもはカスタム投稿タイプの投稿(カスタム分類で絞るけど)を、「カスタムフィールド」の順番で並び替えたいってことですよね?

    並べ替え、カスタムフィールドではなく、
    カスタム投稿タイプ作成時に、hierarchical => true にして、’supports’ パラメータに ‘page-attributes’ を加えておけば、「固定ページ」と同じ扱いになるので、「順序」を指定することができます(ただ、固定ページと同じなので、階層もつくろうと思えばできますが)

    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type#.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF

    そのうえで、並べ替えしたいときは

    'order' => 'ASC',
      'orderby' => 'menu_order',

    にればオケです。

    (あくまで、別の方法ってことで)

    モデレーター Takuro Hishikawa

    (@hissy)

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「WP_Query カスタムフィールドの値でソート」には新たに返信することはできません。