質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2306閲覧

pre_get_postsで出力した記事一覧をカスタムフィールドの日時で並び替えたい

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/07/23 07:01

編集2019/07/24 02:09

前提・実現したいこと

pre_get_postsで定義した記事を一覧として出力しています。

その記事をAdvanced Custom Fieldsのカスタムフィールドで設定した日時で並び替えたいですが、うまく並び替わりません。

カスタムフィールドは下記のように3つに分かれています。

  • 開催日(例:2019/1/1)
  • 開始グループの時間(例:9)
  • 開始グループの分(例:30)

※上記の場合、2019/1/1 9時30分

function.php

function twpp_change_sort_order( $query ) { if(is_admin() || ! $query->is_main_query()){ return; } if($query->is_tax('seminar-category')) { $query->set('order', 'DESC' ); $query->set('orderby', array( '開催日' => 'DESC', '開始_時' => 'DESC', '開始_分' => 'DESC', )); $query->set('posts_per_page', 5); ); } } add_action('pre_get_posts', 'twpp_change_sort_order');

記事一覧を出力している箇所

<?php if(have_posts()): while(have_posts()): the_post(); ?> // タイトルなど <?php endwhile; endif; ?>

追記(7/24 11:01)

下記コードに修正したら思うどおりに動いたのですが、、、

function twpp_change_sort_order( $query ) { if(is_admin() || ! $query->is_main_query()){ return; } if($query->is_tax('seminar-category')) { $query->set('posts_per_page', 5); $query->set('meta_query', array( 'relation' => 'AND', 'my_custom_filed_date' => array( 'key' => '開催日' ), 'my_custom_filed_hour' => array( 'key' => '開始_時', ), 'my_custom_filed_min' => array( 'key' => '開始_分', ), ) ); $query->set('orderby', array( 'my_custom_filed_date' => 'ASC', 'my_custom_filed_hour'=>'ASC', 'my_custom_filed_min'=>'ASC', ) ); } } add_action('pre_get_posts', 'twpp_change_sort_order');

ここにさらに、「開催日時より後の記事(今が7/24 13:00の場合、7/24 13:10以降の開催日の記事)は出力しない」という処理を追加したいので下記のようにコードを変えたら、開催日以降の記事は出力されないのですが、開始時間と分の条件が効きませんでした。

どうすればいいでしょうか。

function twpp_change_sort_order( $query ) { if(is_admin() || ! $query->is_main_query()){ return; } if($query->is_tax('seminar-category')) { $query->set('posts_per_page', 5); $query->set('meta_query', array( 'relation' => 'AND', 'my_custom_filed_date' => array( 'key' => '開催日' ), 'my_custom_filed_hour' => array( 'key' => '開始_時', ), 'my_custom_filed_min' => array( 'key' => '開始_分', ), array( 'key' => '開催日', 'value' => date_i18n('Ymd'), 'compare' => '<=', array( 'key' => '開始_時', 'value' => date_i18n('G'), 'compare' => '<=', array( 'key' => '開始_分', 'value' => date_i18n('i'), 'compare' => '<=' ), ), ), ) ); $query->set('orderby', array( 'my_custom_filed_date' => 'ASC', 'my_custom_filed_hour'=>'ASC', 'my_custom_filed_min'=>'ASC', ) ); } } add_action('pre_get_posts', 'twpp_change_sort_order');

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/24 02:11

ありがとうございます。ご教授頂いた記事を参考に並び替えの処理はうまくいきました。 しかし、並び替えと当時に、開催日時以降の記事は出力しないという処理を加えたら思うように動きませんでした。 質問を追記したので再度アドバイス頂けないでしょうか?
yukikp

2019/07/24 05:05

array( 'relation' => 'AND', array( 'relation' => 'OR', array( /* OR でつなげたい条件1 */ ), array( /* OR でつなげたい条件2 */ ), array( /* OR でつなげたい条件3 */ ), ), array( /* AND でつなげたい条件 */ ) ) という形にすると、ANDとORを両方とも使えるので、最後に「開催日時以降の記事は出力しない」の条件を入れてあげればOK (https://codex.wordpress.org/Class_Reference/WP_Meta_Query#Initializing_WP_Meta_Query)
guest

回答1

0

ベストアンサー

絞り込み条件を入れ子でなく並列にすれば良いと思います。

array( 'key' => '開催日', 'value' => date_i18n('Ymd'), 'compare' => '<=', ), array( 'key' => '開始_時', 'value' => date_i18n('G'), 'compare' => '<=', ), array( 'key' => '開始_分', 'value' => date_i18n('i'), 'compare' => '<=' ),

投稿2019/07/24 02:13

rmrmnrm

総合スコア139

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問