WordPress 计划任务删除超过 48 小时的行

Posted

技术标签:

【中文标题】WordPress 计划任务删除超过 48 小时的行【英文标题】:WordPress scheduled task to delete rows older than 48 hours 【发布时间】:2017-02-21 18:32:44 【问题描述】:

我正在尝试设置一个 cron 作业来删除超过 48 小时的行。我以前从未这样做过,并决定尝试制作一个 WP 计划任务。下面是我在functions.php 文件中的代码。我假设我的删除行/查询是错误的。任何帮助,将不胜感激;或者,如果有更简单的方法,我也对此持开放态度。谢谢。

add_action('init','es4u_delete_old_videos');
add_action('es4u_delete_video','es4u_delete_video_func');

function es4u_delete_video_func() 
    $servername = "localhost";
    $username = "username";
    $password = "pass";
    $dbname = "db";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if ($conn->connect_error) 
        die("Connection failed: " . $conn->connect_error);
    

    DELETE * FROM awdwp_webinar_orders WHERE start_time < DATEADD(HOUR,-48,GETDATE());


function es4u_delete_old_videos()
  if(!wp_next_scheduled('es4u_delete_video')) 
       wp_schedule_event (time(), 'hourly', 'es4u_delete_video');
    

编辑:这就是我现在所拥有的,但表格仍然没有删除。有什么想法吗?

add_action('init','es4u_delete_old_videos');
add_action('es4u_delete_video','es4u_delete_video_func');

function es4u_delete_video_func() 
    global $wpdb;
    $sql = 'DELETE * FROM awdwp_webinar_orders WHERE start_time < DATEADD(HOUR,-48,GETDATE());';
    $wpdb->query( $sql );


function es4u_delete_old_videos()
  if(!wp_next_scheduled('es4u_delete_video')) 
       wp_schedule_event (time(), 'hourly', 'es4u_delete_video');
    

【问题讨论】:

看看这个 - wp-cron. @stweb 好的,谢谢。假设我按照wp_schedule_event()' example, I place my code within es4u_delete_video_func()` 进入do_this_hourly()。这修复了设置,但我知道我的代码显然是错误的;我不确定如何编写 delete *... 查询。 【参考方案1】:

您可以使用内置的 WordPress 类 wpdb 来代替使用 mysqli 函数来为您完成一些工作。 WordPress 创建一个您可以使用的全局 $wpdb 对象。

function es4u_delete_video_func() 
    global $wpdb;
    $sql = 'DELETE FROM awdwp_webinar_orders WHERE start_time < DATE_ADD( NOW(), INTERVAL -48 HOUR )';
    $wpdb->query( $sql );


【讨论】:

我还要指出,VCP 的删除查询是直接在 PHP 中“按 SQL”编写的。由于这是 PHP,而不是 SQL,因此必须使用某些方法来发送查询。 mysqli 或其他方法。 @jrod 啊,好棒,我现在知道该怎么做了。我用$wpdb 做了有限的事情。谢谢你。所以如果我用你写的替换我的函数,每次有人访问这个页面时它应该工作吗?如果我的start_time 列是datetime 类型,它会有所不同吗? 只要您的 SQL 查询正确,您应该能够使用我提供的内容更新您的函数。您正在将 cron 作业设置为每小时触发一次,因此它不会为每个访问者触发,但如果用户访问该站点时距上次触发 cron 作业已经过去了一个小时或更长时间,它将再次触发。 @Jrod 嗯,我的查询一定是错误的,因为表没有更新。我觉得我现在离我很近,但只是错过了一些小东西。 很抱歉我之前没有注意到这一点,但您的查询是错误的。您不应该在 DELETE 和 FROM 之间使用星号,并且您对 DATE_ADD 的使用不正确。我已经用正确的查询更新了我的答案。

以上是关于WordPress 计划任务删除超过 48 小时的行的主要内容,如果未能解决你的问题,请参考以下文章

通过windows计划任务和Dos批处理备份文件

Linux任务计划和周期性任务执行

1703071分钟实现“延迟消息”功能

计划任务 进程

如何在 postgresql 中改进此查询?它已经花费了超过 48 小时

ASP.NET 计划删除临时文件