let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【マニアックなWordPressフック】カテゴリごとに違う記号を、タイトルに自動で入れてみる(title_save_preフック)

更新: 2024/02/05 2270文字

今回は、以前お仕事のWordPress組み込みで使ってみたけど、『別の方法でどうにかなったので、結局ボツになった』というアイデアを紹介します。 内容は『管理画面・投稿ページの$_POST変数の内容で判定して、自動でタイトルに記号を入れる』というもの。しかも、あんまり情報が出てこないフック使用。

フロントでカテゴリ判定してアイコン出力とかでも十分間に合いますが、参考程度に内容をみていっていきましょう。

下準備~カテゴリごとに挙動を変えるため、カテゴリidを押さえておく

まずは、カテゴリを準備します。管理人のテストサイトで、適当に準備しました。『ぶろぐ』のほかに『カテゴリ1~3』を準備。

あとは、カテゴリのidを調べておきます。簡単なのは、管理画面のカテゴリ一覧=>カテゴリーを編集ページに行って、urlパラメータ『taxonomy=category&tag_ID=〇〇』の部分を確認するやり方かと思います。この『カテゴリ2』の場合は、idが54番となりますね。

カテゴリidを押さえておく理由~記事投稿時の$_POSTの形式のため

WordPressでは、『カテゴリのスラッグで判定する』といった方法も多く使われています。しかし、今回はid指定となります。なぜかというと・・・

(*投稿・更新時に管理画面で$_POSTをダンプした例) 投稿・更新時$_POSTをダンプしたところ、入っていたのがカテゴリidだったからです(使うフックの性質上、ここで判定が必要だった)。ここではスラッグ判定はできません。 また『int 53(数値形式)』ではなくて『string(文字列形式)』も押さえておきます。データ型が違って判定に引っかからないみたいなケースは、よくあります。

カテゴリごとに違う記号を、タイトルに自動で入れてみるコードと動作例

以下にコードを記載します。php開始/終了タグの間の部分を、テーマのfunctions.phpに書いて使用します。 テストサイト(PHP7.1.2)の他、この読んどけコラム(WordPress 6.4.3 PHP バージョン8.2.1)でも動作を確認しましたが、使ってみる場合は必ずバックアップなど復旧できる状態にしてから試してください(全部のテーマで動作検証はできませんので)。

コードと注意ポイント

まずはフックの『title_save_pre』ですが、あまり情報が出てきませんでした。検索したところ、『管理画面でタイトル書き換える』のに使っている人がいるようです。動作タイミングは名前の通りタイトルセーブ前かと思います。

$_POSTの中身が ["post_category"]=> array(2) { [0]=> string(1) "0" [1]=> string(2) "53" } となっていたので、===で型も判定するときは数字を引用符で囲んで、文字列扱いにします(数値だと引っかかりませんでした)

また、mb_substr(英語タイトルのときはsubstrでよい)を使って、セットした記号が2個続いたときは、頭の1個を削って出力するようにしました。何回も更新すると『■■■タイトル』みたいになるからです。記号じゃなくて特定の文字列とかの場合は、正規表現を使っても良いでしょう。

動作例

動作はこんな感じになります。 まず、適当に記事を作成して、カテゴリは『カテゴリ2』を指定。あとはいつもの通りに保存します。

こんな感じに、タイトルにfunctions.phpで指定した記号をセットすることができます。

『カテゴリごとの判定』をいれているので、それぞれ別々の記号がセットされます。

案件で結局使わなかった理由2点

で、ちょっとマニアックなフックを使ったり、管理画面の$_POSTで判定したりと、ちょっとテクニカルな真似をしましたが、案件では結局使わず、ボツになりました(笑)理由は主に以下の2点です。

  • アイコンにしろ文字列にしろ、フロントでカテゴリ判定して出力してやったほうが簡単
  • ソート条件がわからなかったサイトで、記号をセットして文字順ソートを変えたが、(wp-meta-queryで取れない)、pdoで独自にSQL書いて解決

なので、あんまり役に立たないかもしれませんが、管理画面の$_POSTの中身を調査できたのはよかったかなと思います。

あとがき・まとめ

  • title_save_preフックはあまりメジャーではないが、タイトル書き換えなどに使われている
  • 管理画面$_POSTのカテゴリを使って、title_save_preと組み合わせてカテゴリ判定もできる
  • 管理画面$_POSTのカテゴリidは、数値形式でなくstring(文字列形式)になっている点に注意
  • 実はフロントでカテゴリ判定して、アイコン・記号出力のほうが簡単

まとめるとこんなところでしょうか。管理人は思いつきませんでしたが、使えそうなアイデアを思い付いたら、ぜひ使ってみてください。


【カテゴリ】- WordPress管理画面カスタマイズ
【タグ】-

関連記事