勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

WordPressにてACFで設定したカスタムフィールドの値を元に記事を並べ替える方法

   2024/02/20  WordPress CMS

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);
?>

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', //投稿日時でソート
    )
);

 

所感

WP_Queryの方は直感的に分かりやすいが$query->setの方はイマイチよく分からりづらい……。

 - WordPress CMS

  関連記事

Advanced Custom FieldsでGoogleMapの使用する方法

Advanced Custom FieldsでGoogleMapを使用したかった ...

Advanced Custom Fieldsで設定した項目を条件に記事一覧を取得する方法

WordPressでAdvanced Custom Fieldsにて設定した項目 ...

WordPressで記事毎に設定したバナー広告を表示させる方法

WordPressでGoogleアドセンスのようなクリック広告ではなく、商品を指 ...

Advanced Custom Fieldsでセレクトメニューを動的に生成する方法

WordPressでカスタムフィールド設定用のプラグインAdvanced Cus ...

Advanced Custom Fieldsでチェックボックスの記事を取得

Advanced Custom Fieldsでチェックボックス設定しているカスタ ...