サポート » 使い方全般 » カスタム投稿の公開状態を自動で変更したい

  • 解決済 d.w.c

    (@dwc-1)


    複数人でブログを書くサイトで、投稿者が書いた後は必ずカスタム投稿タイプ非公開になるようにしています。
    それを特定の条件下で自動で公開に切り替わるようにしたいと思っています。

    特定の条件で分岐する部分は後で書くとして、とりあえず非公開のものを自動で公開に切り替える仕組みを作ろうと思って下記のコードを書いてみたのですが、全く動きません。
    見様見真似で書いてみたのでいろいろ間違っていると思うのですが、調べられる範囲でいくつかの修正を試してみても解決方法がわかりませんでした。

    どのように書き換えればいいでしょうか?

    functions.php

    function blog_post_publish($post){
    	if (( $post->post_type == 'hogehoge' ) && ( $post->get_post_status() == 'private' )){
    		$post_id = $post->ID;
    		$my_blog_post = array('id' => $post_id, 'post_status' => 'publish');
    			wp_update_post( $my_blog_post );
    	}
    }
    add_action('pre_get_posts', 'blog_post_publish');
3件の返信を表示中 - 16 - 18件目 (全18件中)
  • d.w.c

    (@dwc-1)

    >Colorful-life. さん
    >LABE さん

    ありがとうございます。
    ちょっと頭がこんがらがってるのでちょっと時間がかかりそうですが、教えていただいたアドバイスをもとに試してみたいと思います。

    長らくお付き合いいただきましてありがとうございました!

    Colorful-life.

    (@colorfullifeinfo)

    @dwc-1 さん、すみません
    解決済になっており、今更なのですが…

    1.「投稿者」に設定してあるユーザーがカスタム投稿タイプにブログを投稿する。
    2.「投稿者」はログイン後も管理画面にはアクセスできず、ACFプラグインで作成したフロントエンド側から投稿できる仕組みacf_form()を利用してブログを書く。
    3.ブログ投稿フォームにアクセスしようとすると自動で白紙の下書きが作成・保存される。
    4.「投稿者」が記事を書いて投稿ボタンを押すと下書きから非公開に変更される。
    5.非公開化から30分後に公開される。
    6.公開されている記事をacf_form()経由で編集すると再度非公開に変更される。
    7.編集後30分で公開される。

    上記の流れをよくよく考えてみると、単純に、記事の投稿・更新ボタン押下からの経過時間のみをトリガーにして記事を公開したい、という事ですよね?
    でしたら、(投稿ステータス「非公開」にこだわらないのであれば)「予約済」にして処理するのが良い(簡単な)ように思えるのですが如何でしょうか、ご参考まで。

    $my_post = array(
    	'id'          => $post->ID,
    	'post_status' => 'future',
    	'post_date'   => date( 'Y-m-d H:i:s', strtotime( '+30 minute', current_time( 'timestamp' )  ) ),
    );
    • この返信は5 ヶ月前に  Colorful-life. さんが編集しました。理由: タイポ
    d.w.c

    (@dwc-1)

    @colorfullifeinfo さん
    お久しぶりです。
    そしてありがとうございます。

    下記のようにすることで目的の動作ができるようになりました。

    $my_post = array(
    	'id'          => $post->ID,
    	'post_status' => 'future',
    	'post_date'   => date( 'Y-m-d H:i:s', strtotime( '+30 minute', current_time( 'timestamp' )  ) ),
    	'edit_date' => 'true'
    );
    wp_update_post( $my_post );

    予約投稿のことがすっかり頭から抜け落ちていて、ややこしい処理をしていました・・・。
    このコードのおかげでシンプルにできて、サーバーへの負担も減らせました。ありがとうございます。

3件の返信を表示中 - 16 - 18件目 (全18件中)
  • このトピックに返信するにはログインが必要です。