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 小时的行的主要内容,如果未能解决你的问题,请参考以下文章