私は、今日の日付に基づいてカスタム分類用語の値を変更する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();
}
これは 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 );
}