勉強したことのメモ

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

  関連記事

WordPressにてAdvanced Custom Fieldsを用いて連載(シリーズ)記事機能を実装する方法

先日「Series」プラグインで連載(シリーズ)記事機能の実装方法をメモしたが、 ...

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

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

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

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

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

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

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

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