WordPress で公開済み記事の予約更新ができるプラグインを作る

公開済み記事の更新を何とかしたい

WordPressは、公開前の記事を予約投稿出来るので利用している方も多いと思います

が、しかし、一度公開した記事に対し修正途中の保存予約更新が出来ません

公開済み記事を更新する場合は、更新作業を開始したら、一気に仕上げて更新するしかないのが現状で、作業量が多かったり、関連する複数の記事を修正しなければならない場合等でも途中で保存できずとても不便です (^_^;)

現在の記事を公開したまま、複数の関連記事で画像の差し替えや、内容の修正を行いつつ、作業途中でも保存したいし、指定した時間に更新する等を普通に行いたいと思いませんか

いろいろ調べてみましたが、望みを叶えてくれるプラグインは見つけられませんでした

何かリビジョンをごにょごにょすれば出来るのかなと漠然と思っていましたが、なかなか敷居が高い (^_^;)

うーむ と思っていたところ記事を複製する Duplicate Post という有名なプラグインがあることを知りまして、コードを見てみたらこれ使えそうってピントきました (^^)

Yoast Duplicate Post
The go-to tool for cloning posts and pages, including the powerful Rewrite & Republish feature.

簡単に Duplicate Post を紹介しますと

公開済みや下書きとして保存してある記事を、新たに記事を書く時のテンプレートとして利用して、記事を複製するプラグインで特定のフォーマットに基づいた記事をたくさん書く場合等に大変重宝します

ということは、だれでも考えつきますが、元の記事から複製を作れるなら、更新用の複製を作って、それを公開するときに元記事に書き戻せばいいんじゃないのということです

本当なら、きちんとバージョン管理出来るのが望ましいのですが、これをヒントになんちゃって更新機能を作ってみました

post branch utility

Celtispack アドオン(有償)に post branch utility という機能を実装しました

使い方

post branch utility 機能を有効にすると記事の編集画面に2つの機能が追加されます

特にオプションの設定はなく有効にすれば使用することができます

post_branch_操作リンク

公開操作部の下の方に2つのリンクが表示されるのでここから処理を指定します

  • この記事のコピーを作成する
  • この記事の更新用下書きを作成する

記事のコピーを作成

この記事のコピーを作成する をクリックすると新規記事用にコピーを作成します

これは Duplicate Post プラグインとほとんど同じ動作となり、保存してある記事をベースに新たに記事を書く時のテンプレートとして利用するときに使用します

下記のように新規で複製された記事の編集画面に切り替わります

post_branch_複製

Duplicate Post のようなオプション指定はなく、下記条件でコピーを作成しています

投稿日 コピーしない
ステータス コピーしない(下書き)
抜粋 コピーする
メディアファイル 添付ファイルはコピーしない ※1
子ページ 子ページはコピーしない
カスタムフィールド コピーする(アンダースコアは除く)※2
分類 カテゴリー、タグ、投稿フォーマットをコピー
タイトルの接頭辞 なし
タイトルの接尾辞 (コピー)を付ける
権限 edit_published_posts

 

※1
画像や音声等の添付ファイルはコピーしませんが、替りにショートコードを書き換えることがあります

例えば、galleryショートコードで明示的に添付ファイルの id が指定してあれば、コピーされた記事でも同様にギャラリーを表示することは出来るのですが、パラメータ指定のない単純なショートコード gallery/playlist/video/audio の場合には、元記事を親としたそれに添付されたファイルを自動的に表示するしくみがあります。そのままではコピーした記事で画像表示等が出来ないので元記事に添付していたファイルのID等を取得して ids/src パラメータとして付加しています

元記事に下記のようなショートコードがあった場合

post_branch_attachment変換前

コピーされた記事では添付ファイルのIDを明示した形に書き換えます

post_branch_attachment変換後

コピーされた記事で添付ファイルがうまく処理できているかはよく確認して下さい。ショートコードのパラメータで明示的に添付ファイルのIDが指定されていれば問題ありませんが、IDを指定していない場合は注意です  m(__)m

※2
カスタムフィールドには、編集画面から見ることができるものと表示されないものの2種類があります。アンダースコアで始まる名前のカスタムフィールドは、通常プラグイン等のプログラムが処理するためのものです

duplicate post では、基本的に除外する設定をしておかないと全てのカスタムフィールドがコピーされてしまうので、以前は _wpas_done_all を除外しないとパブリサイズ共有が使えなくなってしまうという問題がありました

アンダースコアのカスタムフィールドをコピーするべきか、除外するべきかという問題がありますが、基本的にプログラム等で使用するために隠しているものまでコピーする必要はないだろうということで、アンダースコア以外のものに限定しています

但し、_thumbnail_id の様な wordpress がアイキャッチの設定で使っているものもありますので、_thumbnail_id, _wp_xxxx, _format_xxxx, _edit_last は例外としてコピー対象に含めています

後は、通常に新規記事を作成した時と同じ要領で下書きを保存したり、公開したりすることが出来ます

記事の更新用下書きを作成

こちらが今回の本命機能で、記事を公開したまま更新用の編集を行う場合に使用します

この記事の更新用下書きを作成する をクリックすると更新用に記事をコピーします

post_branch_更新用下書き

更新用の下書きとして記事がコピーされるので、コピー条件はいくつか違いがあります

投稿日 マスター記事と同じ公開日時
ステータス コピーしない(下書き)
抜粋 コピーする
メディアファイル 添付ファイルはコピーしない ※1
子ページ 子ページはコピーしない
カスタムフィールド コピーする(アンダースコアは除く)※2
分類 カテゴリー、タグ、投稿フォーマットをコピー
タイトルの接頭辞 なし
タイトルの接尾辞 なし
権限 edit_published_posts

※1,2 の詳細は記事のコピーを作成の説明と同様です

タイトル下のパーマリンクは、マスター記事のパーマリンク表示となり、編集不可としています。また短縮URLもマスター記事のURLに差し替えています

後は、通常に新規記事を作成した時と同じ要領で下書きを保存したり、公開したりすることが出来ます

予約更新

予約更新を行う場合は公開予定日時を設定して、予約投稿ボタンをクリックすればOKです (^^)

post_branch_予約更新

 

制限事項

XML-RPC request/pingback/trackback

更新用の下書き記事には、マスター記事と異なるIDが別途付けられていて、公開時には下記の処理を短い間隔で連続的に行うことで不都合が出ないようにしています

あくまで更新用の下書きなので、その記事でピンバック等を発行してしまうと辻褄が合わなくなってしまうので、パブリサイズ共有を除き、XML-RPC request/pingback/trackback は強制的に禁止しています

  1. 更新用下書き記事の公開
  2. 記事公開時に伴う処理(XML-RPC request/pingback/trackback 禁止)
  3. マスター記事を更新用下書き記事で上書き
  4. パブリサイズ共有処理(wordpress.com へ投稿IDを差し替えたURLを使い実行)
  5. 更新用下書きの強制削除 (パブリサイズ共有を機能させるため30秒後に削除)

 

マスター記事の編集制限

投稿一覧を表示させると同じタイトルの記事が2つ並んで表示されることとなります

更新用下書き 表示で区別はつくようになっていますが、マスター記事側を編集されると競合してしまい都合が悪いので、マスター記事の編集を制限しています

post_branch_投稿一覧

マスター記事側を表示させた場合

post_branch_マスター編集制限

マスター記事の編集画面では、公開操作部の 編集リンクや更新ボタン等を無効化しています
また、更新用下書きで作業を行うように誘導するメッセージを表示しています

※更新用下書きを削除すれば、無効化されていた部分は元に戻ります

以上です

 

これで更新作業が地味に便利になると思います

基本的な編集操作は何も変わりませんし、間違った操作が行われないように制限もしているので迷わずに使えると思います

但し、添付ファイルやカスタムフィールドを多用している場合は、問題がないかよくテストしてから使用することをお勧めします  (^^)

 


まとめ記事紹介

go-to-top