みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

wordpressで、質問です。

投稿画面にAdvanced Custom Fields のプラグインを入れて、カスタム投稿ページeventに
日付の入力エリアをJQのデータピッカーで表示させました。
開催場所も、同じプラグインでテキストエリアで設置して入力するようにしました。

日付は、データピッカーから入力したら「2015/06/15」の形でデータベースのwp_postmetaのmeta_key「event」の
meta_valueに入ります。
開催場所をテキストで入力すると「▽□△ホール」という形でデータベースのwp_postmetaのmeta_key「scene」の
meta_valueに入ります。

例えば、カスタム投稿記事でwp_posts の ID88 post_type が event の記事にたいして
wp_postmeta に meta_id に 220、 post_id が 88 、meta_key に event 、meta_value に 2015/06/15 。
meta_id に 220、 post_id が 88 、meta_key に scene 、meta_value に ▽□△ホール
と入ります。

この場合に、カスタム投稿でeventに投稿した、post_id88の記事情報に開催場所と日付のデータをくっつけて詳細ページに表示するには
どのようにしたら良いのでしょうか。

sqlでSELECTで一回目、wp_posts でデータをとり、
二回目、wp_postmeta で開催日をとり
三回目、wp_postmeta で場所をとり
表示する
と考えましたらなんだかナンセンスで、長々しくなってしまいました。
まとめて書こうと、しましたらデータが1件の投稿につき2個づつ出てしまい、困っています。

また、meta_valueはlongtxt型なのですが、入っている2015/06/15のデータをDATE型にして絞り込みや並べ替えをしたいのですが
どのようにしたら良いでしょうか。

投稿日時 - 2015-06-15 11:58:30

QNo.8994672

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

WordPressにAdvanced Custom Fieldsプラグインを追加すると、テンプレートタグも追加される。

the_content()で取得されたpost_id88を表示する際に
<?php the_field('scene'); ?> にてこの場所に「場所」が表示される。
<?php echo get_the_field('scene'); ?> でも同様。こちらは生データなので加工した後でフィルターかけて表示すべきだ。
<?php the_field('event') ?>で「日付」を表示だ。

Advanced Custom Fieldsプラグインを導入したら追加されるテンプレートタグの一覧は
http://www.advancedcustomfields.com/resources/
のページ中ほど「Functions」を参照の事。
ただし、これらのテンプレートタグはAdvanced Custom Fieldsプラグインを無効にしたりアンインストールすると使えなくなる。

~~~~

ところでwp_postsの中からカスタム投稿タイプの投稿をSQLで得ようとしている理由はなんだ?
WordPress本体の中ではWP_Query()という機能でSQL文を書かずにいろんな情報を得る事ができる。
<?php $query = new WP_Query( 'p=88' ); ?>
とか
<?php $query = new WP_Query( 'post_type=event' ); ?>
とか。

カスタムフィールドの値で取得する投稿を並び替えるとかは
<?php $query = new WP_Query( array(
'orderby' => 'meta_value', // カスタムフィールドの値で並び替え
'order' => 'DESC', // (日付で言うところの)新しいものから古いものへ
'post_type' => 'event', // カスタム投稿タイプイベントの方のevent
'posts_per_page' => 5, // MAX5件
'meta_key' => 'event' // カスタムフィールド日付の方のevent
) );
?>
で行けるんじゃないか。
絞りこみもWP_Queryに meta_value => '2015/10/10' とかすればできるかも。ただ、日付型としてがんばってくれるかどうかは分からない。

投稿日時 - 2015-06-23 17:26:51

あなたにオススメの質問