J'ai une heure de publication personnalisée qui a une date d'expiration. La date d'expiration est obtenue en obtenant le package_type
de la publication (chaque type de package a un nombre différent de jours avant l'expiration, appelé "Jours vivants"), en extrayant la valeur pour alive_days
et en l'ajoutant au post_date
.
Je me demande s'il existe un moyen de supprimer tous les messages dont la date actuelle dépasse la date d'expiration.
$post_id = $post->ID; // get the post ID
$package_id = get_post_meta( $post_id, 'package_select', true ); // get the post's package
$transaction_price_pkg = $monetization->templ_get_price_info( $package_id, '' ); // get the package info
$alive_days = "+" . $transaction_price_pkg[0]['alive_days'] . " days"; // get the "alive days" of the given package
$expired_date = date('Y-m-d H:i:s',strtotime($alive_days, strtotime($post->post_date))); // calculate the expiration date
// Here's where I'm having trouble
$query = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}transactions WHERE {$expired_date >= NOW() ");
Un simple var_dump
renvoie NULL
. Pourquoi ce code ne fonctionne-t-il pas? (il peut y avoir plusieurs raisons ...)
Dans votre première phrase, je suppose que vous voulez dire que vous avez un type de message personnalisé (pas le temps).
Donc, la publication a un paquet connecté, le paquet a un nombre de jours actifs. En lisant votre exemple de code, je pense que vous abordez cette question sous le mauvais angle.
Je ferais quelque chose comme ça:
// I don't know how you want to call this function, i would use a daily cron-job
function remove_expired_posts() {
$current_date = new DateTime();
$args = array(
'posts_per_page' => -1,
'post_type' => 'YOUR_CUSTOM_POST_TYPE_NAME_HERE',
'post_status' => 'publish',
);
$posts = get_posts( $args );
if($posts) {
foreach($posts as $post) {
$post_id = $post->ID;
$post_date = DateTime::createFromFormat('Y-m-d H:i:s', $post->post_date');
$package_id = get_post_meta( $post_id, 'package_select', true );
$transaction_price_pkg = $monetization->templ_get_price_info( $package_id, '' ); // make sure you include the $monetization object
$alive_days = (int)$transaction_price_pkg[0]['alive_days'];
$expire_date = $post_date->modify('+ '.$alive_days.' days');
if($current_date > $expire_date) {
wp_delete_post( $post_id, true ); // true means bypass bin.
}
}
}
}
NOTE:
Je n'ai pas testé ce code, mais cela devrait fonctionner. Au moins, cela devrait vous donner une idée de la marche à suivre.
Regard, Bjorn