回答編集履歴

5 補足

flat

flat score 601

2016/05/03 21:50  投稿

> -イベント一覧ページでは全ての情報を表示
カスタムフィールドでの絞り込みなどを行わずにカスタム投稿タイプのアーカイブとして表示させることですべての投稿が取得できます。
> -トップページでは選択した記事のみを表示
> 真偽値を使って、カスタムフィールドで、✔️をはずすとトップページ非表示などできないものでしょうか?
真偽値である必要は無いと思います。
カスタムフィールドに任意のキーと値(キーは`display`、値は`on`など)を与えて、その値を含む投稿を表示するというやり方で良いと思います。
あとは入力するカスタムフィールドの項目をチェックボックスにしておけば切り替えは容易に行えるはずです。
> 以下のようにしたのですが、本日以前も表示されてしまいます。
`date("yy/mm/dd")`という箇所を`date("y/m/d")`などの`meta_value`と同じ適切な形式に修正してください。
現状では、例えば本日2016年4月29日の日付を`date("yy/mm/dd")`で取得すると`1616/0404/2929`となってしまいます。
---
**追記**(一部訂正)
ACFで指定する日付と`date_query`で指定する日付を混同しています。(私も混同しました)
`date()`による書式化した日付の指定の仕方とACFの設定する日付の指定の仕方はフォーマットが異なります。
ACFで設定する「**フォーマットを保存する**」という項目ではデフォルトの`yymmdd`とし、「**表示フォーマット**」という項目では日付を認識しやすいように`yy/mm/dd`としてください。
これはそのまま`echo`などで出力すると`20160502`のような日付の形式になるので`2016/05/02`という形式で表示させたい時は次のようにして下さい。
```PHP
// 日付のフィールドを取得
$field_date = get_field( 'fi_day' );
// 日付の形式を変換
if ( !empty($field_date) ) {
 $view_date = date( 'Y/m/d', strtotime( $field_date ) );
} else {
 // 日付のフィールドが取得出来なかった時の表示
 $view_date = 'date not found.';
}
// 表示
echo $view_date;
```
また、これに合わせて`meta_value`で指定していた日付は`'meta_value' => date( 'Ymd' )`として下さい。
カスタムタクソノミーについては`tax_query`を利用した方が柔軟に対応できると思います。
なお、`tax_query`に渡すカスタムタクソノミーは正確に指定しなければ有効にならないので、よく確認して指定して下さい。
そしてカスタム投稿タイプのアーカイブについてですが、これはカスタム投稿タイプで`has_archive`というパラメータが`true`になっていれば、特に何もしなくとも、そのカスタム投稿タイプのアーカイブのURL(`domain.com/event/`など)にアクセスすることでそのまま通常のループ中にすべて表示されます。
カスタムタクソノミーはプラグインが用意したものということなので、アーカイブページにアクセス出来なければおそらく`has_archive`が有効になっていません。
また、アーカイブページへのアクセスを確認するときは、念の為にパーマリンク設定を更新してからアクセスしてください。
独自のテンプレートにしたい場合はファイル名を**archive-event.php**として作成して下さい。
こちらも投稿の一覧を表示させるループは通常の書き方で大丈夫です。
こちらも投稿の一覧を表示させるループは通常の書き方で大丈夫です。
---
**補足**
WordPress(PHP)に限った話ではないですが「取得する情報の内容」を確認する癖を付けておくと良いです。
```PHP
// ACFのデイトピッカーで設定したカスタムフィールドの日付を取得 yymmdd
$field_date = get_field( 'fi_day' );
// 書式化したローカルの日付を取得 Ymd
$local_date = date( 'Ymd' );
// WordPressで設定した日付のフォーマットで投稿の日付を取得
$wp_date = get_the_date();
// 指定したフォーマットで投稿の日付を取得 Ymd
$wp_date_new = get_the_date( 'Ymd' );
echo '<pre>';
var_dump( $field_date );
var_dump( $local_date );
var_dump( $wp_date );
var_dump( $wp_date_new );
echo '</pre>';
```
4 脱字追加

flat

flat score 601

2016/05/03 00:14  投稿

> -イベント一覧ページでは全ての情報を表示
カスタムフィールドでの絞り込みなどを行わずにカスタム投稿タイプのアーカイブとして表示させることですべての投稿が取得できます。
> -トップページでは選択した記事のみを表示
> 真偽値を使って、カスタムフィールドで、✔️をはずすとトップページ非表示などできないものでしょうか?
真偽値である必要は無いと思います。
カスタムフィールドに任意のキーと値(キーは`display`、値は`on`など)を与えて、その値を含む投稿を表示するというやり方で良いと思います。
あとは入力するカスタムフィールドの項目をチェックボックスにしておけば切り替えは容易に行えるはずです。
> 以下のようにしたのですが、本日以前も表示されてしまいます。
`date("yy/mm/dd")`という箇所を`date("y/m/d")`などの`meta_value`と同じ適切な形式に修正してください。
現状では、例えば本日2016年4月29日の日付を`date("yy/mm/dd")`で取得すると`1616/0404/2929`となってしまいます。
---
**追記**(一部訂正)
ACFで指定する日付と`date_query`で指定する日付を混同しています。(私も混同しました)
`date()`による書式化した日付の指定の仕方とACFの設定する日付の指定の仕方はフォーマットが異なります。
「**フォーマットを保存する**」という項目ではデフォルトの`yymmdd`とし、「**表示フォーマット**」という項目では日付を認識しやすいように`yy/mm/dd`としてください。
ACFで設定する「**フォーマットを保存する**」という項目ではデフォルトの`yymmdd`とし、「**表示フォーマット**」という項目では日付を認識しやすいように`yy/mm/dd`としてください。
これはそのまま`echo`などで出力すると`20160502`のような日付の形式になるので`2016/05/02`という形式で表示させたい時は次のようにして下さい。
```PHP
// 日付のフィールドを取得
$field_date = get_field( 'fi_day' );
// 日付の形式を変換
if ( !empty($field_date) ) {
 $view_date = date( 'Y/m/d', strtotime( $field_date ) );
} else {
 // 日付のフィールドが取得出来なかった時の表示
 $view_date = 'date not found.';
}
// 表示
echo $view_date;
```
また、これに合わせて`meta_value`で指定していた日付は`'meta_value' => date( 'Ymd' )`として下さい。
カスタムタクソノミーについては`tax_query`を利用した方が柔軟に対応できると思います。
なお、`tax_query`に渡すカスタムタクソノミーは正確に指定しなければ有効にならないので、よく確認して指定して下さい。
そしてカスタム投稿タイプのアーカイブについてですが、これはカスタム投稿タイプで`has_archive`というパラメータが`true`になっていれば、特に何もしなくとも、そのカスタム投稿タイプのアーカイブのURL(`domain.com/event/`など)にアクセスすることでそのまま通常のループ中にすべて表示されます。
カスタムタクソノミーはプラグインが用意したものということなので、アーカイブページにアクセス出来なければおそらく`has_archive`が有効になっていません。
また、アーカイブページへのアクセスを確認するときは、念の為にパーマリンク設定を更新してからアクセスしてください。
独自のテンプレートにしたい場合はファイル名を**archive-event.php**として作成して下さい。
こちらも投稿の一覧を表示させるループは通常の書き方で大丈夫です。
3 修正

flat

flat score 601

2016/05/03 00:13  投稿

> -イベント一覧ページでは全ての情報を表示
カスタムフィールドでの絞り込みなどを行わずにカスタム投稿タイプのアーカイブとして表示させることですべての投稿が取得できます。
> -トップページでは選択した記事のみを表示
> 真偽値を使って、カスタムフィールドで、✔️をはずすとトップページ非表示などできないものでしょうか?
真偽値である必要は無いと思います。
カスタムフィールドに任意のキーと値(キーは`display`、値は`on`など)を与えて、その値を含む投稿を表示するというやり方で良いと思います。
あとは入力するカスタムフィールドの項目をチェックボックスにしておけば切り替えは容易に行えるはずです。
> 以下のようにしたのですが、本日以前も表示されてしまいます。
`date("yy/mm/dd")`という箇所を`date("y/m/d")`などの`meta_value`と同じ適切な形式に修正してください。
現状では、例えば本日2016年4月29日の日付を`date("yy/mm/dd")`で取得すると`1616/0404/2929`となってしまいます。
---
**追記**
**追記**(一部訂正)
すみません、`date("yy/mm/dd")`をそのまま`echo`すると`1616/0404/2929`となるので勘違いしていましたが、日付のフォーマットは`yymmdd`で良いみたいです。
ACFで指定する日付と`date_query`で指定する日付を混同しています。(私も混同しました)
`date()`による書式化した日付の指定の仕方とACFの設定する日付の指定の仕方はフォーマットが異なります。
「**フォーマットを保存する**」という項目ではデフォルトの`yymmdd`とし、「**表示フォーマット**」という項目では日付を認識しやすいように`yy/mm/dd`としてください。
これはそのまま`echo`などで出力すると`20160502`のような日付の形式になるので`2016/05/02`という形式で表示させたい時は次のようにして下さい。
```PHP
// 日付のフィールドを取得
$field_date = get_field( 'fi_day' );
// 日付の形式を変換
if ( !empty($field_date) ) {
 $view_date = date( 'Y/m/d', strtotime( $field_date ) );
} else {
 // 日付のフィールドが取得出来なかった時の表示
 $view_date = 'date not found.';
}
// 表示
echo $view_date;
```
また、これに合わせて`meta_value`で指定していた日付は`'meta_value' => date( 'Ymd' )`として下さい。
カスタムタクソノミーについては`tax_query`を利用した方が柔軟に対応できると思います。
なお、`tax_query`に渡すカスタムタクソノミーは正確に指定しなければ有効にならないので、よく確認して指定して下さい。
そしてカスタム投稿タイプのアーカイブについてですが、これはカスタム投稿タイプで`has_archive`というパラメータが`true`になっていれば、特に何もしなくとも、そのカスタム投稿タイプのアーカイブのURL(`domain.com/event/`など)にアクセスすることでそのまま通常のループ中にすべて表示されます。
カスタムタクソノミーはプラグインが用意したものということなので、アーカイブページにアクセス出来なければおそらく`has_archive`が有効になっていません。
また、アーカイブページへのアクセスを確認するときは、念の為にパーマリンク設定を更新してからアクセスしてください。
独自のテンプレートにしたい場合はファイル名を**archive-event.php**として作成して下さい。
こちらも投稿の一覧を表示させるループは通常の書き方で大丈夫です。
2 コードの一部を修正

flat

flat score 601

2016/05/02 23:52  投稿

> -イベント一覧ページでは全ての情報を表示
カスタムフィールドでの絞り込みなどを行わずにカスタム投稿タイプのアーカイブとして表示させることですべての投稿が取得できます。
> -トップページでは選択した記事のみを表示
> 真偽値を使って、カスタムフィールドで、✔️をはずすとトップページ非表示などできないものでしょうか?
真偽値である必要は無いと思います。
カスタムフィールドに任意のキーと値(キーは`display`、値は`on`など)を与えて、その値を含む投稿を表示するというやり方で良いと思います。
あとは入力するカスタムフィールドの項目をチェックボックスにしておけば切り替えは容易に行えるはずです。
> 以下のようにしたのですが、本日以前も表示されてしまいます。
`date("yy/mm/dd")`という箇所を`date("y/m/d")`などの`meta_value`と同じ適切な形式に修正してください。
現状では、例えば本日2016年4月29日の日付を`date("yy/mm/dd")`で取得すると`1616/0404/2929`となってしまいます。
---
**追記**
すみません、`date("yy/mm/dd")`をそのまま`echo`すると`1616/0404/2929`となるので勘違いしていましたが、日付のフォーマットは`yymmdd`で良いみたいです。
「**フォーマットを保存する**」という項目ではデフォルトの`yymmdd`とし、「**表示フォーマット**」という項目では日付を認識しやすいように`yy/mm/dd`としてください。
これはそのまま`echo`などで出力すると`20160502`のような日付の形式になるので`2016/05/02`という形式で表示させたい時は次のようにして下さい。
```PHP
// 日付のフィールドを取得
$field_date = get_field( 'fi_day' );
// 日付の形式を変換
$view_date = date( 'Y/m/d', strtotime( $field_date ) );
if ( !empty($field_date) ) {
 $view_date = date( 'Y/m/d', strtotime( $field_date ) );
} else {
 // 日付のフィールドが取得出来なかった時の表示
 $view_date = 'date not found.';
}
// 表示
echo $view_date;
```
また、これに合わせて`meta_value`で指定していた日付は`'meta_value' => date( 'Ymd' )`として下さい。
カスタムタクソノミーについては`tax_query`を利用した方が柔軟に対応できると思います。
なお、`tax_query`に渡すカスタムタクソノミーは正確に指定しなければ有効にならないので、よく確認して指定して下さい。
そしてカスタム投稿タイプのアーカイブについてですが、これはカスタム投稿タイプで`has_archive`というパラメータが`true`になっていれば、特に何もしなくとも、そのカスタム投稿タイプのアーカイブのURL(`domain.com/event/`など)にアクセスすることでそのまま通常のループ中にすべて表示されます。
カスタムタクソノミーはプラグインが用意したものということなので、アーカイブページにアクセス出来なければおそらく`has_archive`が有効になっていません。
また、アーカイブページへのアクセスを確認するときは、念の為にパーマリンク設定を更新してからアクセスしてください。
独自のテンプレートにしたい場合はファイル名を**archive-event.php**として作成して下さい。
こちらも投稿の一覧を表示させるループは通常の書き方で大丈夫です。
1 追記

flat

flat score 601

2016/05/02 23:45  投稿

> -イベント一覧ページでは全ての情報を表示
カスタムフィールドでの絞り込みなどを行わずにカスタム投稿タイプのアーカイブとして表示させることですべての投稿が取得できます。
> -トップページでは選択した記事のみを表示
> 真偽値を使って、カスタムフィールドで、✔️をはずすとトップページ非表示などできないものでしょうか?
真偽値である必要は無いと思います。
カスタムフィールドに任意のキーと値(キーは`display`、値は`on`など)を与えて、その値を含む投稿を表示するというやり方で良いと思います。
あとは入力するカスタムフィールドの項目をチェックボックスにしておけば切り替えは容易に行えるはずです。
> 以下のようにしたのですが、本日以前も表示されてしまいます。
`date("yy/mm/dd")`という箇所を`date("y/m/d")`などの`meta_value`と同じ適切な形式に修正してください。
現状では、例えば本日2016年4月29日の日付を`date("yy/mm/dd")`で取得すると`1616/0404/2929`となってしまいます。
現状では、例えば本日2016年4月29日の日付を`date("yy/mm/dd")`で取得すると`1616/0404/2929`となってしまいます。
---
**追記**
すみません、`date("yy/mm/dd")`をそのまま`echo`すると`1616/0404/2929`となるので勘違いしていましたが、日付のフォーマットは`yymmdd`で良いみたいです。
「**フォーマットを保存する**」という項目ではデフォルトの`yymmdd`とし、「**表示フォーマット**」という項目では日付を認識しやすいように`yy/mm/dd`としてください。
これはそのまま`echo`などで出力すると`20160502`のような日付の形式になるので`2016/05/02`という形式で表示させたい時は次のようにして下さい。
```PHP
// 日付のフィールドを取得
$field_date = get_field( 'fi_day' );
// 日付の形式を変換
$view_date = date( 'Y/m/d', strtotime( $field_date ) );
// 表示
echo $view_date;
```
また、これに合わせて`meta_value`で指定していた日付は`'meta_value' => date( 'Ymd' )`として下さい。
カスタムタクソノミーについては`tax_query`を利用した方が柔軟に対応できると思います。
なお、`tax_query`に渡すカスタムタクソノミーは正確に指定しなければ有効にならないので、よく確認して指定して下さい。
そしてカスタム投稿タイプのアーカイブについてですが、これはカスタム投稿タイプで`has_archive`というパラメータが`true`になっていれば、特に何もしなくとも、そのカスタム投稿タイプのアーカイブのURL(`domain.com/event/`など)にアクセスすることでそのまま通常のループ中にすべて表示されます。
カスタムタクソノミーはプラグインが用意したものということなので、アーカイブページにアクセス出来なければおそらく`has_archive`が有効になっていません。
また、アーカイブページへのアクセスを確認するときは、念の為にパーマリンク設定を更新してからアクセスしてください。
独自のテンプレートにしたい場合はファイル名を**archive-event.php**として作成して下さい。
こちらも投稿の一覧を表示させるループは通常の書き方で大丈夫です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る