カスタムフィールドの投稿一覧への表示
この記事は公開または最後に更新されてから2494日が経過しています。情報が古くなっている可能性があるのでご注意下さい。
さて、『カスタムフィールドの投稿入力フォームへの表示』においてカスタムフィールド入力フォームを投稿入力フォームに表示することはできました。
あと、投稿一覧へのカスタムフィールドのリスト表示と、クイック編集フォームにおいても入力フォームが表示出来ればプラグインがやってくれていた必要なことはすべて出来るようになります。
と、まずは投稿一覧へのリスト表示から。
フィルターフック "manage_posts_columns" を使って一覧のカラムにカスタムフィールドの項目を追加しておいて、アクションフック "manage_posts_custom_column" において実際に表示するhtml を生成するという手順ということです。
一覧のカラムの項目の配列 $columuns は、キーにカラムID (codexにはcolumn name となっていて説明はThe name is passed to functions to identify the column. です)、値に見出しとして表示させるタイトルの連想配列となっています。一覧のカラムにカスタムフィールドの項目を追加するのはキーにID、タイトルを値にして配列に追加すれば良いわけです。
で、追加出来るということは削除も出来るということではないかと。"manage_posts_columns"のcodex を見ると $columuns のキーがリストしてあります。
cb | Checkbox for bulk actions. |
title | Post title. |
author | Post author. |
categories | Categories the post belongs to. |
tags | Tags for the post. |
comments | Number of pending comments. |
date |
たとえば自分だけが投稿しているブログであれば"投稿者"の項目などは必要ありません。ならば配列のリストから"author" の要素を削除してしまえば良いということです。
ここのサイトは通常投稿post にカスタム投稿diys でカスタムフィールドを使用しています。表示させる内容が全く同じであればカスタム投稿用を用意する必要は無いのですが、post においてはサムネイル画像を表示させようと思っていまして、カスタム投稿には画像は無いのでその項目は表示させたくありません。ゆえにカスタム投稿表示用も用意する必要があるようです。
post 用の "add_postlist_cf_column()" ではあらかじめ追加する要素、サムネイル用の"firstimg"とカスタムフィールド用の"customfield"の配列をそれぞれ作成しておきます。別にしているのは表示させたい場所が右から3番目と6番目というように離れているからです。で、array_slice() で$columns を分解し、挿入したいところ(表示させたいところ)にそれぞれの配列を加えて、ついでに"author" の要素を抜いて配列を合成し直しています。
そして、カスタム投稿diys では追加したサムネイル用の要素"firstimg" は表示したくないので、配列からunset() 関数を使って削除しています。
次に実際にhtml を出力する"add_column()" ですが、パラメータの$column_name によって"customfield" 用と"firstimg" 用に処理を分岐させています。
カスタムフィールド用のデータは "get_post_custom($post_id)" で、その投稿に設定してあるカスタムフィールドのデータをまとめて取得しています。が、この時取得しているデータというのは wp_postmeta テーブルにあるフィールドpost_id の値が $post_id のデータを全てです。というのは、取得した値にはカスタムフィールドのデータだけではなくwordpress が処理用に作っている _edit_lock や_edit_lock、_pingme、_encloseme 等があり、それらのデータには先頭に"_ (アンダーライン)"があるのでそれを正規表現で判別してカスタムフィールドのデータだけを出力するようにしています。
で、そのままカスタムフィールド名では出力せずに、ラベル用のタイトルに変えるための連想配列を用意しておいてそれを出力しています。
サムネイル画像表示用においては、実は私はアイキャッチ画像の設定をしていなくてそれを使うことが出来ません。なのでその投稿にアップしてある画像の情報を "get_children()" で全て取得し、一番始めの画像を "wp_get_attachment_image_src()" で得て、表示するようにしています。
※そしてここでちょっと修正した内容のことを。
ブロックエディタが採用されてクラッシックエディタとの使い分けにおいて、それをカスタムフィールドで保存しているようになりました。各投稿にいつの間にかカスタムフィールドの値が増えてしまったんですね。
それによって、既存のカスタムフィールドの値をすべて取得すると当然のことながらそのエディタ設定値も入ってきてしまうので、それを分別するようにしないとエラーが出てしまうようになってしまいました。
で、それを回避するために加えたのが23行目のif文となります。カスタムフィールド名をいれた連想配列を使って、その配列にある値だけということで判断させているわけです。あれっ?でも元々それを使って分別させればよかったわけで、上述の頭に_(アンダーライン)のついたデータも正規表現なんぞを使用しなくても良かったわけですな。正規表現を使わない分だけ、軽くなるはずだし。なんで気が付かなかったのだろうか。と、いうわけで正規表現の箇所も不必要となります。消してもよいのですが、一応、わかるようにコメントアウトしてあります。
Post : 2014/11/07 09:47
Comments feed
Trackback URL : https://strix.main.jp/wp-trackback.php?p=48237