学んだこと、気をつけたことまとめ
- 既存の属性を元に算出した、新しい値をアクセサを使用し返す
- フロント側で投稿ステータスの値を判定して対応する日本語を表示、というようなことは絶対に行わない。ビューにロジックが入り込んでしまい読みづらく複雑になってしまうし、同じ内容を必要な回数分コピペしなければならなくなるため。
- 投稿ステータスの日本語名は、定数ファイル (例えば config/const.php) に入れるのではなく、投稿モデル (app/Models/Wp/PostType/Post.php) に持たせた。投稿ステータスを調べたい、加工修正したい時に最も知っているべきで存在しても違和感のないしっくりくる場所が投稿モデルなため。
やりたいこと
- フロント側に投稿 (Post) の投稿ステータス (post_status) の日本語を表示したい。
コード
app/Models/Wp/PostType/Post.php
- get_post_statuses() | Function | WordPress Developer Resources を見て。
- この関数は、 "post_status values and descriptions" を返すとあったので、自分の作成する関数の説明は、 "説明を返します。" とし、関数名にも "Description" を付けた。
- この関数は、 ‘draft’, ‘pending’, ‘private’, ‘publish’ の 4 種類のみしか返さないのが気になる。 WordPress がデフォルトで使用する 8 つの投稿ステータスの残りの 4 つの ‘future’, ‘trash’, ‘auto-draft’, ‘inherit’ はどうしたのだろうか? 残り 4 つのうち、 ‘auto-draft’, ‘inherit’ は WordPlace 管理画面にも出てこないのでわかる。 ‘future’, ‘trash’ が含まれないが、自分の関数には欲しいのでとりあえずこれら ‘future’, ‘trash’ を加えておく。
<?php
namespace App\Models\Wp\PostType;
use App\Models\Wp\Post as WpPost;
use Illuminate\Database\Eloquent\Builder;
class Post extends WpPost
{
... 略 ...
/**
* 投稿ステータスの説明を返します。
*
* @return string
*/
public function getPostStatusDescriptionAttribute(): string
{
$statuses = [
'draft' => '下書き',
'future' => '予約済み',
'pending' => 'レビュー待ち',
'private' => '非公開',
'publish' => '公開済み',
'trash' => 'ゴミ箱',
];
return $statuses[$this->post_status];
}
}
resources/views/admin/posts/index.blade.php
- 前回 との差分のみを表示
diff --git a/resources/views/admin/posts/index.blade.php b/resources/views/admin/posts/index.blade.php
index 1e92eb4..13bb7eb 100644
--- a/resources/views/admin/posts/index.blade.php
+++ b/resources/views/admin/posts/index.blade.php
@@ -26,7 +26,7 @@
@foreach ($posts as $post)
<tr>
<th scope="row">{{ $post->ID }}</th>
- <td>{{ $post->post_title }}</td>
+ <td>{{ $post->post_title }} - {{ $post->post_status_description }}</td>
<td>{{ $post->post_author }}</td>
<td>categories</td>
<td>tags</td>
確認
https://localhost/admin/posts
おわりに
カテゴリーとタグを DB から取得して動的に表示するのが次の作業と思っていましたけれども、今回の点に気がつきましたのでその前に作業いたしました。
次の作業こそはと思いましたけれども、 投稿の作成者が現在 ID となっているけれども、これを作成者の名前にする のを先にしようかと思っています。
以上です。