从上个月的类别X中删除所有帖子的PHP命令是什么?

时间:2017-04-18 作者:Tal Galili

我希望运行一个cron作业,永久删除过去X天(比如,一周)中属于某个类别的所有帖子。这可能是非常基本的,但我希望有一些建议。谢谢

2 个回复
最合适的回答,由SO网友:Nathan Johnson 整理而成

第一步是设置cron作业。

第二部分需要在数据库中查询条目超过1周的特定帖子类型。我们可以使用get\\u posts()并指定category参数和date\\u query参数来实现这一点。

//* If the scheduled event got removed from the cron schedule, re-add it
if( ! wp_next_scheduled( \'wpse_263953_remove_old_entries\' ) ) {
  wp_schedule_event( time(), \'daily\', \'wpse_263953_remove_old_entries\' );
}

//* Add action to hook fired by cron event
add_action( \'wpse_263953_remove_old_entries\', \'wpse_263953_remove_old_entries\' );
function wpse_263953_remove_old_entries() {
  //* Get all posts older than 7 days...
  $posts = get_posts( [
    \'numberposts\' => -1,
    //* Use `cat` to query the category ID
    //* \'cat\' => \'wpse_263953_category_id\',
    //* Use `category_name` to query the category slug
    \'category_name\' => \'wpse_263953_category\',
    \'date_query\' => [
      \'after\' => date( "Y-m-d H:i:s", strtotime( \'-7 days\', current_time( \'timestamp\' ) ) ),
      //* For posts older than a month, use \'-1 months\' in strtotime()
    ],
  ]);
  //* ...and delete them
  foreach( $posts as $post ) {
    wp_delete_post( $post->ID );
  }
}

SO网友:JItendra Rana

以下查询将为您提供给定类别ID的超过30天的帖子ID列表。

SELECT  
    p.ID as post_id, 
    term.term_id as category_id
FROM wp_posts as p 
LEFT JOIN wp_term_relationships as tr ON tr.object_id = p.ID
LEFT JOIN wp_terms as term ON tr.term_taxonomy_id = term.term_id
WHERE term.term_id = "CATEGORY ID HERE" 
    AND DATEDIFF(NOW(), p.post_date) > 30
一旦你得到了列表,你就可以决定是否要删除帖子。

要删除帖子,请使用以下函数,第二个参数(TRUE)将永久删除帖子。如果您想将此帖子保留在垃圾通道中(错误)

wp_delete_post( \'YOUR_POST_ID_HERE\', TRUE);
如果不是“wp\\uu1”,请不要忘记更改表前缀

相关推荐

无法在WordPress中通过PHP显示图像

我有一个奇怪的问题,当我尝试使用PHP输入图像标记的源代码时,它会在检查器中显示以下错误<img src=(unknown) alt=\"\"> 这个代码片段为我提供了正确的url,通过查看CPanel并粘贴和复制地址进行检查,但当我尝试通过php输入它时,不会显示图像$image = wp_get_attachment_image_src( $post_thumbnail_id); //echo($image[0]); ?> <img src=