以前の質問では、スケジュール設定ではなく、保存時に公開されるように将来の日付付き投稿(カスタム投稿タイプ)を設定する必要がありました。
その日は「予定」されているので、もう一度ドラフトとして設定したいと思います。私はinitにフックして、投稿タイプをチェックする場合にそれをラップしようとしています。私はそれがサーバーの時間と比較し、それがサーバーの時間よりも古い場合はドラフトにステータスを設定すると考えました。
大まかな概要としては:
if custom post type
get_the_time of post
get the server time
if post time is older than server time set status to draft
endif
ここで、私が取り組んでいるコードで更新します。
function sfn_show_expire(){
global $wpdb;
$server_time = date('mdy');
$result = $wpdb->get_results("SELECT * FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish'");
if( !empty($result)) foreach ($result as $a){
$show_time = get_the_time('mdy', $a->ID );
if ( $server_time > $show_time){
$my_post = array();
$my_post['ID'] = $a->ID;
$my_post['post_status'] = 'draft';
wp_update_post( $my_post );
}
} // end foreach
}
add_action( 'init', 'sfn_show_expire' );
それは私が必要とする投稿を得てそして私にサーバー時間を与えていますが、私が言うことができる限りそれを過ぎて何もしていません。
あなたの問い合わせはあなたに投稿IDを与えているのではなく、それはあなたに全体の投稿を与えています。 SELECT *
はすべての列、ID
、post_status
などを返します。したがって、この場合、$my_post['ID'] = $a
を設定しても何も起こりません。
代わりに:$my_post['id'] = $a->ID;
を使ってみてください。あなたがwp_update_post()
を呼び出す前にそれはあなたのIDを正確にセットしなければならず、あなたはビジネスにいるべきです。
それ以外の点では、私はあなたがしていることに問題はないと思います...サイトがロードされるたびにデータベースを照会することは結局パフォーマンス問題を引き起こすかもしれないことを除いて。私は代わりにプロセスを自動化するために1時間ごとのchronジョブを設定したいと思います...そしてそれはユーザートラフィックに依存したり遅くなったりしません。