Automatic post deletion

时间:2015-12-24 作者:N00b

我已经建立了一个系统,在这里我有两个选择-草稿的生命卒和发布的帖子的生命卒(整数表示天数)。

如果发布帖子,则发布的确切日期和时间另存为postmeta, 此外,lifespawn被添加到该时间中,该值作为过期日期时间保存到数据库中,这与draft的情况相同(保存帖子时也可以这样)。

我当前的系统是这样运行的:

我已经设置了一个服务器cron,它每24小时在夜间运行一次metadata 从中的数据库检索while 将该时间与中的当前时间进行比较的循环if 声明如果时间已过,请将职位状态更改为草稿,查询所有草稿职位的草稿日期时间metadata 从中的数据库检索while 将该时间与中的当前时间进行比较的循环if 声明

  • 如果时间流逝,请删除帖子
  • 也会查询并删除帖子的所有附加图像
    • 我非常担心,如果帖子数量为10000-15000甚至几千,此系统/服务器将很难出现故障。重要的是,超过时间的帖子(尤其是已发布的帖子)必须被删除。

      What other options do I have?

      <人力资源>

      Ideas:

      • 触发日期时间“检查”用户在随机查询中是否有一定数量的旧帖子用户加载时间更长
      • 触发日期时间“检查”是否有单个帖子被访问,并逐一执行-如果人们在同一时间查询帖子,查询仍然会检索和回显帖子,这会导致404和失望\'offset\' 将帖子拆分为多个组,并将其分成小块,但如果page_per_page 设置为-1

        Update:

        我听取了你的建议,并试图通过"expiry date":

        这似乎奏效了。。我更改了cronjob间隔,并尝试了几轮,是否有设置日期的变通方法?if 否则,语句似乎不起作用,草稿的代码几乎相同,只是如果时间到了,我会删除草稿,我还认为这最好是每1个小时运行一次,以避免大量,对吗


      //Current date-time
      $now = date( \'Y-m-d H:i:s\' ); //Let\'s say it\'s 2015-12-24 21:00:00 (9PM)
      
      //Get all published posts that are over the deadline
      $published_posts = new WP_Query( array(
          \'posts_per_page\'    => -1,
          \'post_type\'         => \'my-post\',
          \'post_status\'       => \'publish\',
          \'meta_query\' => array(
              array(
                  \'key\'     => \'post_publish_deadline\', //string e.g 2015-12-24 15:00:00 (3PM)
                  \'value\'   => $now,
                  \'type\'    => \'DATETIME\',
                  \'compare\' => \'<=\',
              )
          )
      ));
      
      while( $published_posts->have_posts() ) {
          $published_posts->the_post();
      
      //Get postmeta deadline and format it for if statement
      $publish_deadline = get_post_meta( get_the_ID(), \'post_publish_deadline\', true );
      //If statement doesn\'t seem to work without this step
      $format_publish_deadline = date( \'Y-m-d H:i:s\', strtotime( $publish_deadline ) );
      
      //Check if it exists just in case
      if( !empty( $format_publish_deadline ) ) {
      
           //Additional check if time for that guy is over just in case
           if( $format_publish_deadline < $now ) {
      
               //Change post status to draft
               wp_update_post( array( \'ID\' => get_the_ID(), \'post_status\' => \'draft\' ) );
      
               //Get lifespawn option
               $draft_to_delete_lifespawn = $my_option[ \'draft-lifespawn\' ];   
      
               //Build a new draft expiration date-time -> now + lifespawn in hours
               $draft_deadline = date( \'Y-m-d H:i:s\', strtotime( $now . \' + \' . $draft_to_delete_lifespawn . \' hours\' ) );            
      
               //Save new draft expiration date-time
               update_post_meta( $post->ID, \'post_draft_deadline\', $draft_deadline );
           }
      }
      
      } //END while
      wp_reset_postdata();
      

    1 个回复
    最合适的回答,由SO网友:Mark Kaplun 整理而成

    您可以通过将post的“到期”时间存储为元而不是发布时间来改进。通过这种方式,您可以使用比当前时间小的meta查询帖子并起草它们,无需循环所有帖子。

    缺点是,您必须决定如何处理对LifePawn时间的更改,只需忽略此边缘情况或调整所有帖子。

    相关推荐

    是否可以取消对特定帖子类型的POSTS_PER_PAGE限制?

    我想知道我是否可以取消特定帖子类型的posts\\u per\\u页面限制。在存档中。php页面我显示不同的帖子类型,对于特定的“出版物”帖子类型,我想显示所有帖子。我如何在不影响传统“post”类型的情况下实现这一点?