Tengo este cron configurado para trash posts x días después de su publicación. Esto funciona. Editar: Agregué mi respuesta a mi pregunta.
add_action( 'wp', 'do_trash_ads' );
function do_trash_ads()
{
if ( ! wp_next_scheduled( 'delete_classifieds' ) )
wp_schedule_event( time(), 'daily', 'delete_classifieds' );
}
add_action( 'delete_classifieds', 'expire_posts' );
function expire_posts()
{
global $wpdb;
$daystogo = "14";
$post_ids = $wpdb->get_results( "
SELECT ID
FROM {$wpdb->posts}
WHERE post_type ='classifieds'
AND post_status = 'publish'
AND DATEDIFF(NOW(), post_date) > '{$daystogo}'
" );
foreach( $post_ids as $id )
{
$postid = $id->ID;
$my_post = array();
$my_post['ID'] = $postid;
$my_post['post_status'] = 'trash';
wp_update_post( $my_post );
}
}
Lo que me gustaría hacer : incluir las publicaciones en la función anterior que se basan en un valor de campo de metadatos (el valor predeterminado es 21 días, pero un usuario puede seleccionar una fecha anterior).
Configuré un segundo cron para hacer esto.
add_action( 'wp', 'do_trash_ads_user' );
function do_trash_ads_user()
{
if ( ! wp_next_scheduled( 'delete_ads_user' ) )
wp_schedule_event( time(), 'daily', 'delete_ads_user' );
}
add_action( 'delete_ads_user', 'expire_posts_user' );
function expire_posts_user()
{
global $wpdb;
$post_ids = $wpdb->get_results( "
SELECT ID
FROM {$wpdb->posts}
WHERE post_type ='classifieds'
AND post_status ='publish'
" );
foreach( $post_ids as $id )
{
$postid = $id->ID;
$expiration_value = get_post_meta( $postid, 'ecpt_ad-expire-date', true );
if( $expiration_value )
{
$todays_date = date( "Y-m-d" );
$today = strtotime( $todays_date );
$expiration_date = strtotime( $expiration_value );
if ( $expiration_date > $today )
{
}
else
{
$my_post = array();
$my_post['ID'] = $postid;
$my_post['post_status'] = 'trash';
wp_update_post( $my_post );
}
}
}
}
No sé si este es el mejor método pero está funcionando.