LoginSignup
3
2

More than 5 years have passed since last update.

wp-cronが使えない時に、独自で予約投稿を実装する

Posted at

ErgoDoxを買ってうはうは普通のキーボードに戻れねーと思っている今日この頃。

とある案件で、脆弱性が~セキュリティが~とクライアントに言われてwp-cronを使えないことがありました。
でも予約投稿は欲しいです。わかりました勝手に作ってみます。

Apache: 2.4
PHP: 5.6
Mysql: 5.6
WordPress: 4.5.2

functions.php
/**
 * wp-cronの代わりに予約投稿をする
 */
function my_cron_future_post(){

  // wp_optionsの中からcronの情報を取得
  $option_cron = get_option('cron');
  $option_publish_post = array();

  // 取得したデータから「publish_future_post」の情報を配列に代入
  foreach( $option_cron as $key => $value ){
   if(!empty($value['publish_future_post'])){
     foreach( $value as $k => $hook ){
       foreach( $hook as $md5 => $args ){
         $option_publish_post[$key] = array(
           'hook' => $hook,
           'post_id' => $args['args'][0],
         );
       }
     }
   }
  }

  // 現在の時間と比較してcronが作動するはずの時間に実行
  $now = date_i18n("U");
  foreach( $option_publish_post as $publish_time => $value ){
    if( $now >= $publish_time ){
      $this_post = get_post($value['post_id']);
      if( $this_post->post_status == 'future' ){
        $post_arg = array(
          'ID' => $value['post_id'],
          'post_status' => 'publish'
        );
        // 記事の情報更新
        wp_update_post($post_arg);
        // cronのスケジュールから削除
        wp_unschedule_event($publish_time, $value['hook']);
      }
    }
  }

}
add_action('init', 'my_cron_future_post');

とても無理矢理感漂っています。
ちゃんと出来る人だったこんなことしないんだろうなー。勉強不足で泣けてきますね。

なにはともあれ、とりあえず動きました。めでたしめでたし。

それはそうと、ErgoDoxから戻れないと確信してしまったので、
1ヶ月の間に2台目を購入する暴挙に出ました。お疲れ様でした。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2