Advanced Schedule Posts 予約公開終了、予約上書き公開ができるプラグインを公開しました

Advanced Schedule Posts

WordPress のディフォルトの時限設定は、予約公開だけです。
Advanced Schedule Posts プラグインを導入することで、予約公開取り下げ予約上書き公開ができるようになります。

hasp1

予約公開取り下げ

これは単純に予約公開の逆です。
指定した日時に公開を取り下げることができます。公開から下書きになります。

hasp2

予約上書き公開

これは投稿型CMSの弱点を補うものです。
ディフォルトの予約公開と同時に設定することで、公開時に他の投稿に上書くことができます。

hasp3

どういった時に使えるかを事例をあげて説明します。

ケーススタディ

・プレゼント応募ページを作成したい
・応募期間中、応募終了後にそれぞれ内容を差し替えたい

ページを作成するオブジェクトは、投稿でも固定ページでもカスタム投稿でもかまいませんが、応募期間中、応募終了後のコンテンツが表示されるページ、つまりパーマリンクURLは常に同一でなければなりません。
これを時限設定で行うことができるようになります。

1. 応募期間中のページを作成

141225-0005

2. 応募終了後のページを作成

予約上書き投稿を設定して予約投稿する

141225-0006

一覧画面でみるとこう

141225-0007

3. 予約投稿の日時になると自動的に…

141225-0008

応募終了後のページが公開されると同時にスラッグが差し代わり

141225-0009

応募期間中のページのスラッグは下書きに。スラッグも変更される

141225-0010

予約公開取り下げと予約上書き公開の同時設定

予約上書き公開と予約公開取り下げを同時に指定することもできます。

Future To Do

公式プラグインディレクトリからリリースノートを確認してください。

Comments

  • RO より:

    いつも利用させていただいています。
    新しいWPでブロックエディタになりましたが、こちらに対応される予定はあるでしょうか。
    いつも便利に使っているため、できればブロックエディタになっても利用したいのですが。
    よろしくお願いします。

  • RO より:

    WP4.9.2のASP管理画面で以下のNoticeが表示されます。

    Notice: screen_icon の使用はバージョン 3.8.0 から非推奨になりました。代替は用意されておりません。 in /wp-includes/functions.php on line 3842
    Notice: get_screen_icon の使用はバージョン 3.8.0 から非推奨になりました。代替は用意されておりません。 in /wp-includes/functions.php on line 3842

    ご確認、およびご対応いただけると助かります。
    よろしくお願いします。

  • なぎさ より:

    こちらのプラグイン使用させていただこうと思っていました。
    User Role Editorで記事投稿の公開を制限したところ、該当のユーザーにはプラグインが表示されない事象が起きました。
    こちらは投稿の公開が許可されたユーザーにしか使用できないでしょうか。またナニか対策はありますでしょうか。
    よろしくお願いいたします。

    • hijiri より:

      WordPressのデフォルトの仕様では、公開権限を持たないユーザーに予約投稿(公開日時の指定)は許可されていませんので、本プラグインの操作権限もそれに合わせてあります。
      「時限公開設定ができる=公開できる」という認識なのだと思います。

  • Ryota Fujitsuka より:

    hijiri様のプラグインと、Advanced custom fieldの既存投稿を引用する「投稿オブジェクト」を併用しようと考えておりましたが、
    Advanced Schedule postsの時限上書きは、別のpost IDの投稿に上書きされてしまうので、
    ACFで紐づけた投稿との関連が切れてしまうのですが、なにか対策はありますでしょうか??
    よろしくお願いします。

    • hijiri より:

      報告ありがとうございます。
      再現性を確認しました。
      ACFを併用するケースは多いと認識しておりますので、改修可能か確認させていただきます。

      • Ryota Fujitsuka より:

        ありがとうございます!
        URLを入れて、URLから投稿IDを引用するurl_to_postid()なども検討しましたが、カスタム投稿はNGなど色々弊害もあるので、hijiri様の改修で改善されると大助かりです。

        • hijiri より:

          ACF投稿オブジェクトフィールドに対応したv1.1.6をリリースしました。
          こちらでよろしくお願いします。

          • Ryota Fujitsuka より:

            早急な対応ありがとうございます。
            早速updateして試してみます!

          • Ryota Fujitsuka より:

            先週versionをupdateして試してみたのですが、うまくいきませんでした。
            おそれながらphpソースを拝見しましたところ、
            変更箇所の363行目
            $sql = “UPDATE $wpdb->postmeta SET meta_value = {$post_id} WHERE meta_key = ‘{$post_type}’ AND meta_value = {$hasp_overwrite_post_id};”;
            内のmeta_key='{post_type}’ではなく、投稿オブジェクトの’post_object’ではないでしょうか?

            ためしに363行目を
            $sql = “UPDATE $wpdb->postmeta SET meta_value = {$post_id} WHERE meta_key = ‘postobject’ AND meta_value = {$hasp_overwrite_post_id};”;
            のように記載しましたところ、無事に既存投稿のIDが上書きされた投稿のIDになりました。

            お手数ですが、上記についてご確認お願いいたします。

          • hijiri より:

            ご指摘の通りです、申し訳ありません。修正してアップデートさせていただきます。ありがとうございました!

          • hijiri より:

            アップデートする前に確認していただけたらと思いますが、以下コードでどうですか?

            // for ACF Post Object Field
            $sql = “SELECT meta_key FROM $wpdb->postmeta WHERE meta_value = ‘{$hasp_overwrite_post_id}’;”;
            $posts = $wpdb->get_results( $sql );
            $objects = array();
            foreach( $posts as $post) {
            $objects[] = $post->meta_key;
            }
            $objects = array_unique( $objects );

            foreach( $objects as $object ) {
            $sql = “SELECT post_id, meta_key FROM $wpdb->postmeta WHERE meta_key = ‘_{$object}’ AND meta_value LIKE ‘field_%’;”;
            $acf_objects = $wpdb->get_results( $sql );
            foreach( $acf_objects as $acf_object ) {
            $sql = “UPDATE $wpdb->postmeta SET meta_value = {$post_id} WHERE post_id = {$acf_object->post_id} AND meta_key = ‘{$object}’ AND meta_value = {$hasp_overwrite_post_id};”;
            $result = $wpdb->query( $sql );
            }
            }

          • Ryota Fujitsuka より:

            すいませんが、よろしくお願いします

          • hijiri より:

            v1.1.6.1 にアップデートしました。ご確認ください。

          • Ryota Fujitsuka より:

            ありがとうございます。無事に連動して、投稿参照も入れ替わっておりました。
            ありがとうございました!

          • hijiri より:

            よかったです^^

  • アオモ より:

    最近こちらのプラグインの存在を知り、導入させていただいたのですが、
    記事内に記述した及び等が予約更新完了の際に、
    消えてしまう不具合がございました。

    原因を切り出し検証してみたのですが、
    Advanced Schedule Postsのみを有効化した状態でエラーが検出されてしまいました。

    検証いただけませんでしょうか。
    お願い致します。

  • RO より:

    問題ありました。

    下記コードだと、管理者すら自分以外の投稿が見えなくなるので、以下のように変更しました。

    $sql = "SELECT ID, post_title FROM $wpdb->posts WHERE ID != '$post_id' AND post_type = '$post_type' AND post_status = 'publish'";
    if(!current_user_can('administrator')) $sql.= " AND post_author = '$current_user->ID'";
    $publish_posts = $wpdb->get_results($sql);

    これで管理者は全ての投稿に上書きできるようになります。

    • hijiri より:

      ありがとうございます。確認します。

      • RO より:

        今更ですが、上記だと権限とか無視して管理者のみになっているので、そのあたりは編集権限を考慮したものに書き換えていただけると助かります。なにぶんWPには疎いもので・・・

  • RO より:

    いつも利用しています。
    この度、投稿者にこの機能を使わせようと思った際に、自分の投稿以外にも上書きできてしまうため、コードを一部書き換えました。

    advanced_schedule_posts.php 133行目
     global $wpdb, $current_user;

    advanced_schedule_posts.php 135行目
     ”SELECT ID, post_title FROM $wpdb->posts WHERE ID != ‘$post_id’ AND post_type = ‘$post_type’ AND post_status = ‘publish’ AND post_author = ‘$current_user->ID'”

    設定などで対応していただくか、上記で問題ない場合はアップデートをお願いしたいと思います。
    よろしくお願いします。

  • mitsuaki より:

    こんにちは。求めていた予約投稿が実現できそうで非常に有難いです。
    利用させて頂きます。
    段階的予約上書き公開、是非とも出来るようにして欲しいです!
    ご検討よろしくお願い致します。

  • monte より:

    上書き予約公開機能が嬉しいです!ありがとうございます。

    ただ、管理画面で設定したメニューの表示で不具合が出ます。
    ページが上書き公開されると、リンク先がスラッグから(以前の)page_idになってしまいます。
    改善できますでしょうか。

    環境は以下です。
    ・WordPress4.1.1
    ・Twenty Fifteen

    よろしくお願いします。

  • katbi より:

    Advanced Schedule Postsの利用を検討している者です。予約上書き公開をしようとすると、投稿失敗とエラーが出てきます。別のプラグインで「dvanced custom fields」も利用しているのですが、それが原因でしょうか。よろしくお願いいたします。

    WordPressのバージョンは4.1です。

    • hijiriworld より:

      Advanced Custom Fields プラグインを使用している場合でも正常動作を確認しております。
      通常の予約投稿はできますでしょうか?それもできない場合は擬似クーロンが正常動作していない可能性も考えられます。エラーの内容等教えていただければ検証いたします。

コメントを残す