postbranchプラグインは、WordPressの公開ページを残したままクローンページを作成してくれるプラグインです。正直、非常に便利なプラグインではあります。
MTや国内高級CMSは、裏方(バックグラウンド)で編集できるような機能が搭載されています。裏で『下書きを作成』『チェック』→『公開ページに反映』というように公開ページと裏方の作業が分かれています。
ところがWordPressの場合は公開したページに対して変更を加える場合、裏方というものはなく、公開ページをそのまま編集するか、一度『下書き』に戻してから編集しなければいけません。一度『下書き』にした状態でページ修正している間、そのページは外部から閲覧できなくなるんです。こういった事を回避できるプラグインがwp-post-branchです。
公開済みのページや記事に対して、『ブランチ作成』でクローンページを作成し『公開』時にクローンページをオリジナルのページへ上書きしてくれます。(図解がない伝わりにくいです)
こちらの説明が分かりやすいです。
WordPressのかゆいところに手が届かなかったものを実現してくれているので助かります。
これは便利と使ってみたのですが、今回の使い方に合わせるにはいくつか修正が必要だったので備忘メモです。
箇条書きにすると以下5カ所。
- カスタム投稿記事でも対応できるようにする(オリジナルはカスタム投稿記事では、ブランチページをマージしてくれません。)
- 公開記事のみブランチ作成対象とする(オリジナルは非公開記事もブランチ作成対象となります)
- 一度ブランチを作ったらオリジナルのページの方には『ブランチを作る』ボタンは表示させない
- マージ後にはオリジナルのページに再度『ブランチを作る』ボタンを表示させる
- 『ブランチを作る』で作成されたページに掲載されている画像はクローンとして作成しなくてよい。
- 『ブランチを作る』で作成されたページには『ブランチを作る』ボタンを表示させない
『ブランチを作る』で作成されたページは、公開(マージ)時にゴミ箱に入るが、即座に完全削除させたい
改変ソース箇所
1.カスタム投稿記事でも対応できるようにする
カスタム投稿の管理画面でも『ブランチを作る』ボタンは表示されるのですが、マージがされません。wp-post-branches.phpの最後に以下1行を追加します。
add_action( 'publish_[カスタム投稿タイプ]', 'wpbs_save_post', 9999, 2 );
カスタム投稿の管理画面に『ブランチを作る』ボタンを表示させたくない場合は、25行目辺り[wpbs_post_submitbox_start]を編集します。
function wpbs_post_submitbox_start() { global $post; // ============================================ // 「WP Post Branch」プラグインに機能追加 // ============================================ if(!is_admin() || $post->post_type != "[カスタム投稿タイプ]" ) return ; // 管理ページか固定ページの場合『ブランチ作成』非表示 : : : :
2.公開記事のみブランチ作成対象とする
上記同様に、記事のステータス「下書き・レビュー依頼中・公開中・予約投稿・非公開」などの状態によってボタン表示制御もできます。
function wpbs_post_submitbox_start() { global $post; // ============================================ // 「WP Post Branch」プラグインに機能追加 // ============================================ if ( in_array( $post->post_status, array('publish') ) && 0 != $post->ID) { // 公開済みの記事・ページに『ブランチ作成』ボタン表示 : : : :
3.一度ブランチを作ったらオリジナルのページの方には『ブランチを作る』ボタンは表示させない
4.マージ後にはオリジナルのページに再度『ブランチを作る』ボタンを表示させる
6.『ブランチを作る』で作成されたページには『ブランチを作る』ボタンを表示させない
実装概略です。
『ブランチ作成』ボタン押下時にオリジナルページのメタ情報に記事IDを登録します。メタ情報に記事IDを持っていたら、既にブランチが作成されているので『ブランチ作成』ボタンを非表示にします。
まずは準備
ブランチ作成直前のフィルター「wpbs_pre_post_update()」の最後「add_post_meta($draft_id, ‘_wpbs_pre_post_id’, $id);の次辺り」に以下追加します。これでオリジナルの記事にブランチ記事のIDを記録させます。
add_post_meta($draft_id, '_wpbs_pre_post_id', $id); // オリジナルページにbranchの記事IDを記録させる if("" == get_post_meta($id, '_wpbs_branch_post_id', true)) add_post_meta($id, '_wpbs_branch_post_id', $draft_id); else update_post_meta($id, '_wpbs_branch_post_id', $draft_id); wp_safe_redirect( admin_url( 'post.php?post=' . $draft_id . '&action=edit' ) );
上記作成したメタ情報は記事を完全削除(ゴミ箱からも削除)した時にメタ情報も削除してくれるようにします。wp-port-branches.phpの最後に以下追記します。
add_action( 'delete_page', 'wpbs_erase_post_meta', 9999, 2 ); add_action( 'delete_post', 'wpbs_erase_post_meta', 9999, 2 ); add_action( 'delete_[カスタム投稿タイプ]', 'wpbs_erase_post_meta', 9999, 2 ); function wpbs_erase_post_meta() { global $post; delete_post_meta( $post->ID, '_wpbs_branch_post_id' ); }
ボタン表示制御
上記見出し「1」同様、『function wpbs_post_submitbox_start()』に手を加えます。
// [_wpbs_branch_post_id]を持っていたらオリジナル記事となる // オリジナル記事がBranch記事IDを持ち、Branch記事が既になければmeta情報を削除する $branch_id = get_post_meta($post->ID, '_wpbs_branch_post_id', true); if(!empty($branch_id)){ // meta情報としてはBranch記事のIDを保持している. // 既にbranch記事がある可能性あり $branch_post = get_post( $branch_id, ARRAY_A ); if(!$branch_post){ // "branch記事を持っていない場合"; delete_post_meta( $branch_id, '_wpbs_branch_post_id' ); echo '<div id="branch-action" style="margin-bottom:5px;">'; echo '<input type="submit" class="button-primary" name="wp_post_branches" value="' . __( 'Create Branch', WPBS_DOMAIN ) . '" />'; echo '</div>'; }
5.『ブランチを作る』で作成されたページに掲載されている画像はクローンとして作成しなくてよい。
ブランチページを作成すると、メタ情報・画像リソースもコピーしてくれるのですが、画像リソースが一時的に増え重複してしまうとメディア管理がややこしくなるので、画像はコピーされないようにしました。対処法については、こちらのページ中ほどに記載してあります。
長くなりましたが、これで一通りの対処終了です。
因みに、オリジナルプラグインの紹介ページはこちらです。
[…] wordpress post branchプラグインを編集する|zamuu::BLOG […]
[…] 以前紹介したWordPressのプラグインの記事『wordpress post branchプラグインを編集する』についでのネタ記事です。 […]