WordPressにてACFで設定したカスタムフィールドの値を元に記事を並べ替える方法
2024/02/20
WordPressにてAdvanced Custom Fieldsで設定したカスタムフィールドの値を元に記事のソートしたい。具体的には記事毎にYoutubeのようにGood / Badボタンがあり、Good / Badの多い順で記事をソートしたかった。また、Good / Badの数値が同じ場合は投稿日時でソートしたい。以下に対応方法をメモ。
WP_Queryの場合
<?php
$args = array(
'post_type' => 'post',
'paged' => $paged,
'posts_per_page' =>10,
'meta_key' => 'good', //ACFで設定するフィールド名を指定
'orderby' => array(
'meta_value_num' => 'DESC', //Good順でソート
'date' => 'DESC', //投稿日時でソート
),
);
$my_query = new WP_Query($args);
?>
<?php
$args = array(
'post_type' => 'post',
'paged' => $paged,
'posts_per_page' =>10,
'meta_key' => 'good', //ACFで設定するフィールド名を指定
'orderby' => array(
'meta_value_num' => 'DESC', //Good順でソート
'date' => 'DESC', //投稿日時でソート
),
);
$my_query = new WP_Query($args);
?>
<?php $args = array( 'post_type' => 'post', 'paged' => $paged, 'posts_per_page' =>10, 'meta_key' => 'good', //ACFで設定するフィールド名を指定 'orderby' => array( 'meta_value_num' => 'DESC', //Good順でソート 'date' => 'DESC', //投稿日時でソート ), ); $my_query = new WP_Query($args); ?>
meta_value_numと指定することでカスタムフィールドを数値としてソートしてくれる。meta_valueだと文字列としてソートされるので注意。
$query->setの場合
$query->set('post_type', 'post' );
$query->set('post_status', 'publish');
$metaquery[] = array(
'meta1' => array(
'key' => 'good', //ACFで設定するフィールド名を指定
'type' => 'NUMERIC'
),
);
$query->set('meta_query',$metaquery);
$query->set( 'order', 'DESC' );
$query->set('orderby',
array(
'meta1' => 'DESC', //Good順にソート
'date' => 'DESC', //投稿日時でソート
)
);
$query->set('post_type', 'post' );
$query->set('post_status', 'publish');
$metaquery[] = array(
'meta1' => array(
'key' => 'good', //ACFで設定するフィールド名を指定
'type' => 'NUMERIC'
),
);
$query->set('meta_query',$metaquery);
$query->set( 'order', 'DESC' );
$query->set('orderby',
array(
'meta1' => 'DESC', //Good順にソート
'date' => 'DESC', //投稿日時でソート
)
);
$query->set('post_type', 'post' ); $query->set('post_status', 'publish'); $metaquery[] = array( 'meta1' => array( 'key' => 'good', //ACFで設定するフィールド名を指定 'type' => 'NUMERIC' ), ); $query->set('meta_query',$metaquery); $query->set( 'order', 'DESC' ); $query->set('orderby', array( 'meta1' => 'DESC', //Good順にソート 'date' => 'DESC', //投稿日時でソート ) );
所感
WP_Queryの方は直感的に分かりやすいが$query->setの方はイマイチよく分からりづらい……。
関連記事
-
-
WordPressで記事毎に設定したバナー広告を表示させる方法
WordPressでGoogleアドセンスのようなクリック広告ではなく、商品を指 ...
-
-
WordPressでカスタムフィールドとCSVファイル投稿する方法
WordPressでカスタムフィールド設定している環境に、CSVファイルアップロ ...
-
-
Advanced Custom Fieldsで設定した項目を条件に記事一覧を取得する方法
WordPressでAdvanced Custom Fieldsにて設定した項目 ...
-
-
Advanced Custom FieldsでGoogleMapの使用する方法
Advanced Custom FieldsでGoogleMapを使用したかった ...
-
-
Advanced Custom Fieldsでセレクトメニューを動的に生成する方法
WordPressでカスタムフィールド設定用のプラグインAdvanced Cus ...