web-dev-qa-db-ja.com

Wp_cronを使用して1日に1回更新するように投稿をスケジュールする

私は、今日の日付に基づいてカスタム分類用語の値を変更するsave_postにフックする関数を持っています。それはうまくいっています。投稿を更新すると、分類用語が正しく更新されます。

しかし、自分で投稿を手動で更新しなくても、この更新が1日に1回自動的に行われるようにします。私はwp_cronを読み、以下のコードを作成しました。これは基本的に1日に1回、特定の投稿のセットをクエリしてからwp_update_post()を実行するだけです分類法.

しかし、それはうまくいっていないようです。また、1日待つことなく何が起こるのかを見ずにwp_cronをテストする方法がわかりません。私はコンソールがインストールされているので、今後予定されているイベントを見ることができます、そして以下のイベントは明確に予定されています、それは何の効果もないようです。

どこに私が間違っていたのかについてアドバイスをくれる人はいますか?

    //Schedule active events to update_post every day
    if( !wp_next_scheduled( 'event_status_refresh' ) ) {  
       wp_schedule_event( time(), 'daily', 'event_status_refresh' );  
    }  
//When the event fires, we call the function to update the posts
    add_action( 'event_status_refresh', 'update_event_status' ); 

//The function to update the posts
function update_event_status() {
    global $post;

    $active = array( 
    'post_type'=>'event',
    'posts_per_page'=>'-1',
    'tax_query'=>array(
        array(
            'taxonomy'=>'event_status',
            'field'=>'slug',
            'terms'=>array(
                'playing_now',
                'opening_soon'
            )
        )
    ),
);
$query   = new WP_Query($active);
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();

            $update = array(
            'ID' => get_the_ID(),
            );

            // Update the post into the database
            wp_update_post( $update );
    }
}
wp_reset_postdata();

}
3
Eckstein

これは X-Y問題 の典型的な例です。あなたのクーロンは元気です。あなたの論理はそうではありません。

あなたはsave_postsにフックする関数を持っています、そしてあなたは配列$update = array( 'ID' => get_the_ID() )を渡すことがアクションを引き起こすと思うので、あなたの投稿は分類法を更新するでしょう。残念ながら、それは間違っています。

このタイプの配列(IDフィールドのみ)をwp_update_postに渡すと、投稿を識別するだけで済み、配列の他の場所に保存するデータはありません。そのため、何も更新されず、save_postアクションもトリガーされません。

ですから、あなたのcronを毎日実行していますが、何もしません。

溶液:

save_postにフックする関数はおそらくpost_idをパラメータとして受け入れ、必要ならpostを更新します、そうです。そのため、wp_update_postを実行して投稿を更新させるのではなく、自分自身で関数を呼び出します。

while ($query->have_posts()) {
  $query->the_post();
  $toupdate = get_the_ID();

  your_function_that_hook_into_save_post( $toupdate );

}
5
gmazzap