うるおいらんど【WordPress】投稿ページに追記欄を追加するプラグインを作ってみたyoWordPressプラグイン記事2件目です。前回の記事「【WordPress】カスタム投稿タイプを自作プラグインで追加してみよう!」では、自作プラグインでカスタム投稿タイプを追加する方法を紹介しました。今回は、投稿ページに追記欄を追加するプラグインを作ってみようと思います。うるおいらんどではここに追記を書くとこんな感じで表示されるようにしています。プラグインを作成するさて、まずはプラグインのフォルダを作成します。additional-post-pluginというフォルダを作成。いうファイルを追加して、以下を記述。);同じフォルダ内にclass.additional-post.phpを追加します。class.addtional-post.phpに以下を記述します。}}これでとりあえずプラグインの準備ができました。ダッシュボードからプラグインを有効化できるか確認しておきましょう。有効化できれば準備はおkです。内に記述していきます。カスタムフィールドを追加する投稿ページに追記欄を追加するには「カスタムフィールド」を使います。Additional_Postに以下を追記します。}}add_meta_boxを使って通常の投稿ページにカスタムフィールドを設置しています。add_meta_boxは管理画面でのみ呼び出されるようにadd_actionで登録しています。add_meta_boxについてざっくりと。第2引数ラベル名です。idとラベル名はクラス内で定数で制限しましたが全然直打ちでいいと思います。実際に表示する内容を記述した関数名を書きます。プラグインなのでここは配列にして$this指定をしています。表示させたい投稿タイプを指定します。現在postを指定しているので通常の投稿欄でのみ表示されます。複数の投稿タイプで表示させたい場合は、配列で設定すればおkです。advanced);この場合は通常投稿・固定ページ・カスタム投稿のニュースで追記欄を表示します。normalとadvancedの場合は投稿の下にボックスが追加されます。sideの場合はサイドに配置されます。normalとadvancedの違いってなんだろうって調べてみました。よると、normal:$priorityのhigh、lowを指定した場合、既存のメタボックスも含めて配置される順序が決定される。advanced:原則既存のメタボックスの後ろに追加されるが、$priorityで優先順位を指定した場合、advancedが指定されたメタボックスの中で順序が決定される。WebScripter.jpだそうです。初期値はadvancedです。今回指定していませんが、第6引数に優先度、第7引数にコールバックがあります。詳しくは、リファレンスで。入力欄を実装する入力欄を実装します。rows='10'>{$content_value}</textarea><br>";}を追加します。$postで現在編集している投稿のデータを取得して、そこから$post->IDで投稿IDを取得しています。やっていることは、投稿に紐づけられている保存したデータを$title_valueと$content_valueにいれて、それをテキストエリアに表示しています。これで、入力欄はできました。内容を保存しよう現時点では追記内容を書いても消えてしまいます。書いた内容を保存できるようにしていきます。}この関数を、投稿が保存された時に呼び出すようにフックをかけます。);}update_post_metaで値を保存しています。空だった場合は削除しています。ついでに追記をした時間も保存しています。これで保存できました。ヤッター∩(〃・ω・〃)∩nonceを設定しようさて、ここまでで一応カスタムフィールドの追加も保存もできたのですが、もう少しセキュアなものにしましょう。フォームを守るための「一度だけ使われる数値」です。実際には数値ではなく、数字と英字で作られたハッシュです。本当に一度だけ使われるのではなく、無効になるまでの「有効期間」を持っています。有効期間が切れるまで同じユーザーについて同じ値を保ちます。attack)から守ることはできません。https://wpdocs.osdn.jp/WordPress_NonceCSRFからの攻撃から保護するものです。実際にadd_meta_boxのリファレンスでのコードにもnonceが用いられています。これをそのままマネッコして実装しましょう。rows='10'>{$content_value}</textarea><br>";}wp_nonce_fieldの使い方はリファレンスにて。説明できるほど理解できてない感じで申し訳ないです。save時にチェックをします。先ほど作った編集フォームのから適切な認証とともに送られてきたデータかどうかを検証する必要がある。}ラインを引いたところを追加します。自動保存時は別に呼んじゃっていいかなと思ったのでコメントアウト。なんども言いますが、詳しくはadd_meta_boxのリファレンスで!これで追記欄を作成することができました!やったね!ショートコードを設定しようさて、あとはこれを実際に表示するだけです。?>こんな感じに追記します。わかりづらいし、ごちゃごちゃします。保存したデータの名前を間違えやすいです。ショートコードを書くと表示できるようにしましょう。[[additional]]このぐらいで表示できるようにしちゃいます。__constructでショートコードを追加します。));}第一引数のadditionalが実際にショートコードの[[additional]]の名前になります。第二引数で、このショートコードが使われた時の関数を指定していますので、その関数を実装します。$html_text;}出力タグはお好みで。?>とかけばおkです。ショートコードなので一応投稿画面で書くと、コンテンツの途中に挟むこともできます。実際の表示こんな感じです。ちなみにこのショートコードでechoすると、記事本文に埋め込んだ時に表示される場所がおかしくなります。returnを使ってください。全体コードお疲れ様でした。今回はWordPressプラグインの作り方からの説明を、前回ほど詳しくしなかったのでもっと記事が短くなると思っていたんですが、思ったよりめっちゃ長くなりました。読んでくれた方もお疲れ様です。週末まではちょっとしんどそうな案件が入ったので、WordPressプラグイン作成記事はしばらくお預けにします。ブログ強化月間中なので、もう少し軽めの記事は書く予定です。Storageを利用しているデータが破損してしまう問題が発生した件Older【WordPress】カスタム投稿タイプを自作プラグインで追加してみよう!コメントは認証制です。詳しくは下記の注意をお読みください。「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。アカウントをお持ちでない方はメールアドレスで投稿することができます。初回コメント時は承認後に表示されます。管理者以外で用意した投稿フォームから投稿してもhtmlタグが変換されない。bbpressがそういう仕様ではあるのだが、それでもhtmlを使いたい場合。Editorというプラグインを導入。指定したユーザにunfiltered_htmlを割り振る。ユーザを全て管理者にするよりはいいはず。}}わりと頑張ってPHP書いてる。2018/4/18WordPressで抜粋の語尾が文字化けするときメモ以下の記事にて解決。ありがとうございます。Leaves改行コード等についてのみ触れられていますが、こういう文字化けにも対応可能でした。仕事で使ったけれどこのブログにも対応せねばメモ。アップロードされた画像IDを取得する方法です。6件取得してギャラリーで表示するとき。);if($posts):と書けば表示されるのに、プラグイン化していたので表示されなかった話。functions.phpでカスタム投稿を追加している場合は必要ないが、newsというカスタム投稿をプラグイン化していたので、以下の記述が必要でした。}WordPressプラグインの作り方は、また後日ちゃんとした記事にしたいと思ってます。今回はとりあえず忘れそうなのでメモだけで失礼。【Swift4】UINavigationControllerのNavigationBarをカスタマイズしてみた。―シンプルでインクルーシブなフォーム制作実践ガイド」を一読しました。何かあったら気軽にコメントよろしくね。古い記事は追記があるかも。