搜索
首页CMS教程WordPress掌握WordPress Cron进行调度事件

掌握WordPress Cron进行调度事件

钥匙要点

  • > wordpress cron是一组功能,可以在加载页面时在WordPress站点上安排任务。它与Unix的cron不同,因为它并不总是在寻找新任务,而是在页面加载时执行任务。
  • >
  • >可以安排两种类型的cron事件:单个事件,一次,再也不会运行,直到重新安排和重复发生的事件,并无限期地运行。两种类型都需要创建必须在Cron中注册的自定义“动作”。
  • >未安排事件是必不可少的,尤其是在使用插件时,即使在插件被停用或删除后,WordPress仍将继续尝试运行事件。要安排一个事件,需要知道钩子的名称和Cron Run的下一个预定时间。 可以通过连接到cron_schedules滤波器并添加自定义间隔来设置自定义的cron间隔。使用cron安排事件时,可以使用。
  • >能够在紧缩的时间表上运行某些功能对于任何CMS至关重要,WordPress具有一组功能,有助于使此过程非常简单且几乎毫不费力。
> 在本文中,我将介绍以下WordPress Cron功能:

wordpress cron与您的普通cron 掌握WordPress Cron进行调度事件有何不同

安排重复事件

    安排一个事件
  • 未安排事件
  • >指定自定义cron间隔
  • 什么是cron?
  • >您可能熟悉“ cron”一词,因为它与Unix系统中的基于时间的调度程序有关,尽管WordPress的Cron不同。它背后的主要思想是相同的。
>一些示例WordPress在内部如何使用其CRON系统检查主题和插件更新,甚至检查是否准备发表帖子。

>

wordpress cron有何不同?

>

如果您熟悉Unix的Cron,您可能会认为WordPress的Cron总是在寻找新任务并随着它们而运行它们。这远非事实,我将不久解释为什么。

加载页面时,

wordpress的cron都会运行,无论是前端还是后端页面。换句话说,当您的网站上加载页面时,WordPress将检查是否有任何任务或事件需要运行并执行它们。如果您认为这不是理想的,那么您是绝对正确的。

>

>如果您碰巧拥有一个无法获得太多流量的网站,并且您的任务需要在精确的时间执行,那么WordPress将不知道该任务是在某人访问您的网站之前到期的。即使它恰好是搜索引擎在您的网站上爬行。

>用cron

调度事件

有两种cron事件的口味,您可以使用几行代码安排:>

    >单个事件 - 仅运行一次,再也不会再重新安排了。
  • >
  • 重复事件 - 按计划运行,并设置为使用时间间隔无限期地重新出现。
安排重复事件

调度重复事件要求您创建一个自定义的“操作”,也必须在Cron上注册。 CRON运行后,执行了您先前创建的自定义“操作”的函数。

>让我们来看看以下示例,我们将每天删除帖子修订。

>

首先,我们创建我们的自定义“动作”,该自定义“动作”将附加到它的函数时,我们要运行的功能。

用于安排重复事件,我们使用WP_SCHEDULE_EVENT($ TIMESTAMP,$ recurrence,$ hook,$ args)函数,该功能获取4个参数:

>
<span><span><?php </span></span><span><span>// delete_post_revisions will be call when the Cron is executed
</span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' );
</span></span><span>
</span><span><span>// This function will run once the 'delete_post_revisions' is called
</span></span><span><span>function delete_all_post_revisions() {
</span></span><span>
</span><span>	<span>$args = array(
</span></span><span>		<span>'post_type' => 'post',
</span></span><span>		<span>'posts_per_page' => -1,
</span></span><span>		<span>// We don't need anything else other than the Post IDs
</span></span><span>		<span>'fields' => 'ids',
</span></span><span>		<span>'cache_results' => false,
</span></span><span>		<span>'no_found_rows' => true
</span></span><span>	<span>);
</span></span><span>
</span><span>	<span>$posts = new WP_Query( $args );
</span></span><span>
</span><span>	<span>// Cycle through each Post ID
</span></span><span>	<span>foreach( (array)$posts->posts as $post_id ) {
</span></span><span>
</span><span>		<span>// Check for possible revisions
</span></span><span>		<span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) );
</span></span><span>
</span><span>		<span>// If we got some revisions back from wp_get_post_revisions
</span></span><span>		<span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) {
</span></span><span>		  
</span><span>			<span>foreach( $revisions as $revision_id ) {
</span></span><span>
</span><span>				<span>// Do a final check on the Revisions
</span></span><span>				<span>if( wp_is_post_revision( $revision_id ) ) {
</span></span><span>					<span>// Delete the actual post revision
</span></span><span>					<span>wp_delete_post_revision( $revision_id);
</span></span><span>				<span>}
</span></span><span>			<span>}
</span></span><span>		<span>}
</span></span><span>	<span>}
</span></span><span><span>}</span></span></span>

$ timestamp - (integer)(必需)您第一次希望该事件发生。这必须采用Unix时间戳格式。 WP Cron使用UTC/GMT时间,而不是本地时间。使用time(),它始终是wordpress中的GMT。 (current_time('timestamp')是wordpress中的本地时间。)

>
    $ recurrence - (string)(必需)该事件应重复发生一次。有效的值是“小时”,“ Twickaily”和“ Daily”。我们将看到如何以后创建自己的时间间隔。
  • >
  • $ hook - (string)(必需)要执行的操作钩的名称。
  • >
  • $ args - (array)(可选)参数传递到挂钩函数。
  • >
  • 首先,我们确保事件在之前没有安排,如果没有安排,我们继续进行安排。

请注意,您还可以将此代码段添加到操作中。如果您是插件作者,则可以设置计划的事件,以便在访问插件选项页面时运行。对于一个简单得多的例子,我们将将其与WordPress的Init Action相提并论。>

<span><span><?php </span></span><span><span>// Make sure this event hasn't been scheduled
</span></span><span><span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) {
</span></span><span>	<span>// Schedule the event
</span></span><span>	<span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' );
</span></span><span><span>}</span></span></span>
>现在您知道如何安排重复的事件,让我们看一下创建一个事件,直到重新安排为止,该事件将永远不会再运行。

>

安排一个事件
<span><span><?php </span></span><span><span>// Add function to register event to WordPress init
</span></span><span><span>add_action( 'init', 'register_daily_revision_delete_event');
</span></span><span>
</span><span><span>// Function which will register the event
</span></span><span><span>function register_daily_revision_delete_event() {
</span></span><span>	<span>// Make sure this event hasn't been scheduled
</span></span><span>	<span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) {
</span></span><span>		<span>// Schedule the event
</span></span><span>		<span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' );
</span></span><span>	<span>}
</span></span><span><span>}</span></span></span>
正如其名称所暗示的那样,一个事件是一次运行的事件,然后停止。如果需要,仍然可以再次重新安排此单一事件。

>

它背后的概念与反复事件相同。首先,您注册一个自定义挂钩,该钩在服务器上运行时由Cron调用。克朗调用钩子后,其功能将执行,这基本上就是您完成操作的方式。

>

举例来说,我们将设置帖子的到期日期。发表后30天的帖子将到期。我们将挂在publish_post中,以便我们可以在发布帖子后立即安排我们的单个事件并开始计算。

>

>设置将在30天后删除帖子的函数。

>
<span><span><?php </span></span><span><span>// delete_post_revisions will be call when the Cron is executed
</span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' );
</span></span><span>
</span><span><span>// This function will run once the 'delete_post_revisions' is called
</span></span><span><span>function delete_all_post_revisions() {
</span></span><span>
</span><span>	<span>$args = array(
</span></span><span>		<span>'post_type' => 'post',
</span></span><span>		<span>'posts_per_page' => -1,
</span></span><span>		<span>// We don't need anything else other than the Post IDs
</span></span><span>		<span>'fields' => 'ids',
</span></span><span>		<span>'cache_results' => false,
</span></span><span>		<span>'no_found_rows' => true
</span></span><span>	<span>);
</span></span><span>
</span><span>	<span>$posts = new WP_Query( $args );
</span></span><span>
</span><span>	<span>// Cycle through each Post ID
</span></span><span>	<span>foreach( (array)$posts->posts as $post_id ) {
</span></span><span>
</span><span>		<span>// Check for possible revisions
</span></span><span>		<span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) );
</span></span><span>
</span><span>		<span>// If we got some revisions back from wp_get_post_revisions
</span></span><span>		<span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) {
</span></span><span>		  
</span><span>			<span>foreach( $revisions as $revision_id ) {
</span></span><span>
</span><span>				<span>// Do a final check on the Revisions
</span></span><span>				<span>if( wp_is_post_revision( $revision_id ) ) {
</span></span><span>					<span>// Delete the actual post revision
</span></span><span>					<span>wp_delete_post_revision( $revision_id);
</span></span><span>				<span>}
</span></span><span>			<span>}
</span></span><span>		<span>}
</span></span><span>	<span>}
</span></span><span><span>}</span></span></span>

非常简单,对吗?现在,一旦帖子实际发布,我们就需要安排活动。为了完成此任务,我们需要使用wp_schedule_single_event($ timestamp,$ hook,$ args)函数,该功能获取3个参数。

  • $ timestamp - (integer)(必需)您希望发生的事件发生的时间。这必须以Unix时间戳格式。
  • >
  • $ hook - (string)(必需)要执行的操作钩的名称。
  • >
  • $ args - (array)(可选)参数传递到钩函数。
这很快就会仔细研究所有这些动作和钩子的方式。

>

<span><span><?php </span></span><span><span>// Make sure this event hasn't been scheduled
</span></span><span><span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) {
</span></span><span>	<span>// Schedule the event
</span></span><span>	<span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' );
</span></span><span><span>}</span></span></span>
>我们正在使用WordPress拥有的一些时间常数来使我们的生活更轻松。有关这些常数的更多信息,您可以转到“使用时间常数”,但这是一个快速的概述:

    > minute_in_seconds = 60(秒)
  • hour_in_seconds = 60 * minute_in_seconds
  • day_in_seconds = 24 * hour_in_seconds
  • week_in_seconds = 7 * day_in_seconds
  • year_in_seconds = 365 * day_in_seconds
未安排事件

>现在您知道如何安排重复的事件和单一事件,知道如何安排这些事件也将很有用。

>

>您可能想知道,为什么要安排事件?有一个充分的理由,特别是如果您在插件中包括某种类似的时间表活动。

>

crons存储在WP_Options表上,并简单地停用和删除插件。 WordPress仍将尝试运行您的事件,即使不再可用的插件。话虽如此,请确保您在插件或自定义实施中正确安装了整个事件。

>

>未安排的cron事件相对容易,您需要知道的只是钩子的名称,何时是何时应该运行特定的cron。我们将使用WP_NEXT_SCHEDULED()来查找下一次发生的情况,只有这样我们才能使用wp_unschedule_event()。

考虑到我们的第一个示例,我们将以以下方式解开事件。

>

>自定义cron间隔
<span><span><?php </span></span><span><span>// Add function to register event to WordPress init
</span></span><span><span>add_action( 'init', 'register_daily_revision_delete_event');
</span></span><span>
</span><span><span>// Function which will register the event
</span></span><span><span>function register_daily_revision_delete_event() {
</span></span><span>	<span>// Make sure this event hasn't been scheduled
</span></span><span>	<span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) {
</span></span><span>		<span>// Schedule the event
</span></span><span>		<span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' );
</span></span><span>	<span>}
</span></span><span><span>}</span></span></span>

>可以设置自定义的CRON间隔,您可以在使用CRON计划事件时使用这些间隔。为此,我们只需要挂入cron_schedules滤波器并添加自己的滤镜即可。让我们看一下添加一个自定义间隔集以每10分钟运行一次。

>
<span><span><?php </span></span><span><span>// delete_post_revisions will be call when the Cron is executed
</span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' );
</span></span><span>
</span><span><span>// This function will run once the 'delete_post_revisions' is called
</span></span><span><span>function delete_all_post_revisions() {
</span></span><span>
</span><span>	<span>$args = array(
</span></span><span>		<span>'post_type' => 'post',
</span></span><span>		<span>'posts_per_page' => -1,
</span></span><span>		<span>// We don't need anything else other than the Post IDs
</span></span><span>		<span>'fields' => 'ids',
</span></span><span>		<span>'cache_results' => false,
</span></span><span>		<span>'no_found_rows' => true
</span></span><span>	<span>);
</span></span><span>
</span><span>	<span>$posts = new WP_Query( $args );
</span></span><span>
</span><span>	<span>// Cycle through each Post ID
</span></span><span>	<span>foreach( (array)$posts->posts as $post_id ) {
</span></span><span>
</span><span>		<span>// Check for possible revisions
</span></span><span>		<span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) );
</span></span><span>
</span><span>		<span>// If we got some revisions back from wp_get_post_revisions
</span></span><span>		<span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) {
</span></span><span>		  
</span><span>			<span>foreach( $revisions as $revision_id ) {
</span></span><span>
</span><span>				<span>// Do a final check on the Revisions
</span></span><span>				<span>if( wp_is_post_revision( $revision_id ) ) {
</span></span><span>					<span>// Delete the actual post revision
</span></span><span>					<span>wp_delete_post_revision( $revision_id);
</span></span><span>				<span>}
</span></span><span>			<span>}
</span></span><span>		<span>}
</span></span><span>	<span>}
</span></span><span><span>}</span></span></span>

结论

>使用WordPress的cron再容易了,这是一个非常好的有趣的工具,一定可以帮助您使插件更加健壮。学习所有这些功能,并将它们通过现实世界应用程序付诸实践,这是掌握WordPress的CRON安排活动的最佳方法。

>

经常询问有关掌握WordPress Cron

的问题

> WP_SCHEDULE_EVENT和WP_SCHEDUE_SINGLE_EVENT?

​​

两个功能都用于在WordPress中安排事件,有什么区别。 WP_SCHEDULE_EVENT功能用于安排重复的事件,这意味着它将按照您指定的定期时间进行运行,例如每天,每天或两次。另一方面,WP_SCHEDULE_SINGLE_EVENT用于安排一次性事件,该事件将来会在特定时间运行。重要的是要根据您是否希望事件进行一次或反复运行的正确函数很重要。

>为什么我的wordpress cron作业不起作用?

>

>

可能有几个原因工作不起作用。一个常见的问题是服务器的时间设置问题。如果服务器的时间未正确设置,则可能导致调度问题。另一个可能的问题是与插件或主题发生冲突。某些插件或主题可能会干扰WordPress Cron系统,从而导致故障。您的代码也可能存在错误。确保彻底测试您的代码并检查服务器设置,如果您在WordPress Cron作业方面遇到麻烦。

>我如何测试我的WordPress Cron作业是否有效?

>有几个测试您的WordPress Cron作业是否有效的方法。一种方法是使用WP Crontrol之类的插件,该插件使您可以查看和控制WP-Cron系统中发生的事情。另一种方法是使用调试工具。通过在wp-config.php文件中启用wp_debug,您可以看到Cron作业运行时发生的任何错误。您还可以使用PHP中的error_log函数将任何错误记录到文件中。

我可以安排一个wordpress cron作业以在特定时间运行吗?

是的,您可以安排WordPress Cron在特定时间运行的工作。 WP_SCHEDULE_EVENT函数允许您指定首次应发生事件的时间以及应重新出现的间隔。 WP_SCHEDULE_SINGLE_EVENT函数允许您指定应发生事件的确切时间。

>

>我如何在WordPress Cron事件中解开WordPress Cron事件?

您可以使用WP_UNSCHEDULE_EVENT函数解开WordPress CRON事件。此函数需要两个参数:事件的时间戳和要启动函数的操作钩。调用此功能后,指定的事件将不再发生。

>

什么是WordPress cron Action Hook?

我可以使用WordPress Cron安排帖子吗?

是的,您可以使用WordPress Cron来安排帖子。 WordPress本身使用CRON作业来处理计划的帖子。当您设置要在将来的日期发布的帖子时,WordPress计划在指定的时间发布CRON作业以发布帖子。

>

我如何查看所有计划的WordPress Cron作业?可以使用WP Crontrol等插件查看所有计划的WordPress Cron作业。该插件提供了一个用户友好的界面,您可以在其中查看所有计划的事件,它们的间隔和下一个运行时间。您也可以使用它来添加,编辑或删除Cron作业。

>我可以手动运行WordPress Cron作业吗?

是的,您可以手动运行WordPress Cron作业。您可以使用诸如WP Crontrol之类的插件来执行此操作,该插件可让您立即运行任何Cron事件。这对于测试和调试目的可能很有用。

WordPress Cron作业和真正的Cron作业有什么区别?这不是真正的Cron工作,因为它不会在服务器级别运行。相反,当您的WordPress网站上加载页面时,它运行。另一方面,真正的CRON作业是在服务器级别安排的任务。它在特定时间运行,无论是否有人访问您的网站。尽管WordPress Cron作业更容易设置和使用,但真正的Cron作业可以更可靠和精确。

以上是掌握WordPress Cron进行调度事件的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
WordPress适合电子商务吗?WordPress适合电子商务吗?May 13, 2025 am 12:05 AM

是的,WordPress非常适合做电商。 1)通过WooCommerce插件,WordPress可以快速变成功能全面的在线商店。 2)需要关注性能优化和安全性,定期更新和使用缓存、安全插件是关键。 3)WordPress提供了丰富的定制选项,提升用户体验和SEO优化效果显着。

如何在 Yandex 网站管理员工具中添加您的 WordPress 网站如何在 Yandex 网站管理员工具中添加您的 WordPress 网站May 12, 2025 pm 09:06 PM

您想将您的网站连接到Yandex网站管理员工具吗?Google搜索控制台、Bing和Yandex等网站管理员工具可帮助您优化网站、监控流量、管理robots.txt、检查网站错误等。在本文中,我们将分享如何在Yandex网站管理员工具中添加您的WordPress网站来监控您的搜索引擎流量。什么是Yandex?Yandex是一个位于俄罗斯的流行搜索引擎,类似于Google和Bing。您可以在Yandex中优

如何修复 WordPress 中的 HTTP 图片上传错误(简单)如何修复 WordPress 中的 HTTP 图片上传错误(简单)May 12, 2025 pm 09:03 PM

您需要修复WordPress中的HTTP图片上传错误吗?当您在WordPress中创建内容时,此错误可能会特别令人沮丧。当您使用内置WordPress媒体库将图像或其他文件上传到CMS时,通常会发生这种情况。在本文中,我们将向您展示如何轻松修复WordPress中的HTTP图片上传错误。WordPress媒体上传过程中出现HTTP错误的原因是什么?当您尝试使用WordPress媒体上传器将文件上传到Wo

如何修复添加媒体按钮在 WordPress 中不起作用的问题如何修复添加媒体按钮在 WordPress 中不起作用的问题May 12, 2025 pm 09:00 PM

最近,我们的一位读者报告说,他们的WordPress网站上的“添加媒体”按钮突然停止工作。此经典编辑器问题不会显示任何错误或警告,这使用户不知道为什么他们的“添加媒体”按钮不起作用。在本文中,我们将向您展示如何轻松修复WordPress中的“添加媒体”按钮不起作用的问题。是什么导致WordPress“添加媒体”按钮停止工作?如果您仍在使用旧的经典WordPress编辑器,那么“添加媒体”按钮允许您将图像、视频等插入博客文章中。

如何设置、获取和删除 WordPress Cookie(像专业人士一样)如何设置、获取和删除 WordPress Cookie(像专业人士一样)May 12, 2025 pm 08:57 PM

您想了解如何在WordPress网站上使用cookie吗?Cookie是在用户浏览器中存储临时信息的有用工具。您可以使用此信息通过个性化和行为定位来增强用户体验。在本终极指南中,我们将向您展示如何像专业人士一样设置、获取和删除WordPresscookie。注意:这是一个高级教程。它要求您精通HTML、CSS、WordPress网站和PHP。什么是Cookie?Cookie是用户访问网站时创建并存储在用户浏览

如何修复 WordPress 429 请求过多错误如何修复 WordPress 429 请求过多错误May 12, 2025 pm 08:54 PM

您是否在WordPress网站上看到“429请求过多”错误?此错误消息意味着用户向您网站的服务器发送了太多HTTP请求。此错误可能会非常令人沮丧,因为很难找出导致该错误的原因。在本文中,我们将向您展示如何轻松修复“WordPress429TooManyRequests”错误。是什么原因导致WordPress429请求过多错误?“429TooManyRequests”错误的最常见原因是用户、机器人或脚本尝试向网站

WordPress作为大型网站的CMS有多可扩展?WordPress作为大型网站的CMS有多可扩展?May 12, 2025 am 12:08 AM

WordPressCanHandLeLArgeWebsitesWithCareFulplanningAndOptimization.1)USECACHINGTOREDUCESERVERVERLOAD.2)优化YourdataBaseRegularly.3)actizeyourdatabaseregularly.3)ackdntododistibutecontent.4))

WordPress的定制程度如何?WordPress的定制程度如何?May 11, 2025 am 12:11 AM

WordPress的定制化程度非常高,提供了广泛的灵活性和可定制性。1)通过主题和插件生态系统,2)利用RESTAPI进行前端开发,3)深入代码层面进行修改,用户可以实现高度个性化的体验。然而,定制化需要掌握PHP、JavaScript、CSS等技术,且需注意性能优化和插件选择,以避免潜在的问题。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境