タイトル通り複数のカスタムフィールドの値で投稿をソートする

デジタルドリームワークスからHigaです。

タイトル通り複数のカスタムフィールドの値で投稿をソートする方法について。
良く出てくる案件と思いますので、メモしておきます。

 

1. クエリの書き換え(ソート)について(通常のソート)

WordPressで投稿の並び替えをする際には「orderby」や「order」などクエリのパラメータを指定して変更出来ます。

例:最近の投稿をタイトル順に並べる

[php]
10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ( $postslist as $post ) :
setup_postdata( $post ); ?>





[/php]

※Wordpress Codexより
https://wpdocs.osdn.jp/テンプレートタグ/get_posts

 

2. クエリの書き換え(ソート)について(pre_get_postsについて)

また自分は単純にメインループのクエリをかえる場合は「pre_get_posts」のアクションフックを使用してfunction.phpに記述しちゃいます。
その方がそれぞれのテーマに記述する必要が無く、function.phpの1ファイルで管理出来るので便利です。
こんな感じになります。

[php]
is_home() && $query->is_main_query() ) {
$query->set( 'posts_per_page', 10 );
$query->set( 'order', 'ASC' );
$query->set( 'orderby', 'title' );
}
}
add_action( 'pre_get_posts', 'get_post10by_title' );
?>
[/php]

 

3. クエリの書き換え(ソート)について(1つのカスタムフィールド値でソート)

さて前置きが長くなりました。
今回複数のカスタムフィールドでソートをする場合についてです。
通常1つのカスタムフィールドでソートする場合は、以下のように簡単にできます。
しかしこれでは2つのカスタムフィールドではソート出来ませんでした。

カスタムフィールドKey:「custom_key01」でソート

[php]
is_home() && $query->is_main_query() ) {
$query->set( 'order','ASC' );
$query->set( 'orderby','meta_value_num' );
$query->set( 'meta_key','custom_key01' );
}
}
add_action( 'pre_get_posts', 'get_post_sortby_customkey' );
?>

[/php]

 

4. クエリの書き換え(ソート)について(複数のカスタムフィールド値でソート)

2つのカスタムフィールドでソートする場合は以下のように記述する必要がありました。

カスタムフィールドKey:「custom_key01」、「custom_key02」でソート

[php]
is_home() && $query->is_main_query() ) {
$query->set( 'orderby', array(
'meta_custom_key01' => 'ASC',
'meta_custom_key02' => 'ASC'
)
);
$query->set('meta_query',
array(
'meta_custom_key01' => array(
'key' => 'custom_key01',
'type'=>'DATE' //それぞれに合うタイプを指定
),
'meta_custom_key02' => array(
'key' => 'custom_key02',
'type'=>'TIME' //それぞれに合うタイプを指定
)
)
);
}
}
add_action( 'pre_get_posts', 'get_post_sortby_customkey2' );
?>
[/php]

という感じでキーを「meta_query」でキーを指定してあげると良いようです。
かなり端折ったので例では上手く動作するか不安ですが、考え方が分かればこのような感じで出来ます。

実は別件でtaxonomyでソートも行いたかったのですが、どうしても上手くいかず、時間の都合上断念。
色々と便利なWordpressですので、出来ないことはないはず…
こちらはまた検証してみます。

記事情報の誤りや、別の方法でのやり方などありましたらコメントいただけると嬉しいです!
またtaxonomyでソートについてもコメントいただけると!

関連記事

  1. CPUの異常チェックの仕方

  2. WordPress 動的にIDを振る方法(移動ナビ用)

  3. WordPressの利点

  4. WooCommerce 支払い方法 追加(その1)

  5. Woocommerce メモ

  6. Mac DICOM ViewerのOsiriX(オザイリクス)

最近の記事

  1. NFCカード
  2. vcard形式 qrコード
  3. FileMakerとTwilio連携がSMS配信を劇的に変える理由
  4. FileMaker QRコード
  5. phantom4pro
  6. 2017.06.07

    iPad Pro 新型
  7. wwdc2017

カテゴリー


  1. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    @美浜から

  2. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    Appleのように「デザインのある会社!」

  3. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    Books

  4. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    DX戦略

  5. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    EC-CUBE

  6. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    googleのように「オープンに働ける会社!」

  7. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    IDEOのように「発想する会社!」

  8. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    Server

  9. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    Swift

  10. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    Wordpressを使いこなせ!【developer編】

  11. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    アップル

  12. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    ウェブサイト

  13. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    オープンソース

  14. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    パタゴニアのように「環境を考える会社!」

  15. Warning: Trying to access array offset on false in /var/www/vhosts/ddwnet.com/httpdocs/ddwnet/wp-content/themes/source_tcd045/widget/category_list.php on line 60
    ファイルメーカー