掌握WordPress Cron进行调度事件
钥匙要点
- > wordpress cron是一组功能,可以在加载页面时在WordPress站点上安排任务。它与Unix的cron不同,因为它并不总是在寻找新任务,而是在页面加载时执行任务。 >
- >可以安排两种类型的cron事件:单个事件,一次,再也不会运行,直到重新安排和重复发生的事件,并无限期地运行。两种类型都需要创建必须在Cron中注册的自定义“动作”。 >未安排事件是必不可少的,尤其是在使用插件时,即使在插件被停用或删除后,WordPress仍将继续尝试运行事件。要安排一个事件,需要知道钩子的名称和Cron Run的下一个预定时间。 可以通过连接到cron_schedules滤波器并添加自定义间隔来设置自定义的cron间隔。使用cron安排事件时,可以使用。
wordpress cron与您的普通cron

安排重复事件
- 安排一个事件
- 未安排事件
- >指定自定义cron间隔
- 什么是cron?
- >您可能熟悉“ cron”一词,因为它与Unix系统中的基于时间的调度程序有关,尽管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>
$ 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><?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>
>
它背后的概念与反复事件相同。首先,您注册一个自定义挂钩,该钩在服务器上运行时由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>
非常简单,对吗?现在,一旦帖子实际发布,我们就需要安排活动。为了完成此任务,我们需要使用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>
- > 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>
>可以设置自定义的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>
结论
>使用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安排帖子吗?
是的,您可以使用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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

最近,我们向您展示了如何通过允许用户将自己喜欢的帖子保存在个性化库中来为用户创建个性化体验。您可以通过在某些地方(即欢迎屏幕)使用他们的名字,将个性化结果提升到另一个水平。幸运的是,WordPress使获取登录用户的信息变得非常容易。在本文中,我们将向您展示如何检索与当前登录用户相关的信息。我们将利用get_currentuserinfo(); 功能。这可以在主题中的任何地方使用(页眉、页脚、侧边栏、页面模板等)。为了使其工作,用户必须登录。因此我们需要使用

有四种方法可以调整 WordPress 文章列表:使用主题选项、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代码(在 functions.php 文件中添加设置)或直接修改 WordPress 数据库。

博客是人们在网上表达观点、意见和见解的理想平台。许多新手渴望建立自己的网站,却因担心技术障碍或成本问题而犹豫不决。然而,随着平台不断发展以满足初学者的能力和需求,现在开始变得比以往任何时候都更容易。 本文将逐步指导您如何建立一个WordPress博客,从主题选择到使用插件提升安全性和性能,助您轻松创建自己的网站。 选择博客主题和方向 在购买域名或注册主机之前,最好先确定您计划涵盖的主题。个人网站可以围绕旅行、烹饪、产品评论、音乐或任何激发您兴趣的爱好展开。专注于您真正感兴趣的领域可以鼓励持续写作

您想了解如何在父分类存档页面上显示子分类吗?在自定义分类存档页面时,您可能需要执行此操作,以使其对访问者更有用。在本文中,我们将向您展示如何在父分类存档页面上轻松显示子分类。为什么在父分类存档页面上显示子分类?通过在父分类存档页面上显示所有子分类,您可以使其不那么通用,对访问者更有用。例如,如果您运行一个关于书籍的WordPress博客,并且有一个名为“主题”的分类法,那么您可以添加“小说”、“非小说”等子分类法,以便您的读者可以

过去,我们分享过如何使用PostExpirator插件使WordPress中的帖子过期。好吧,在创建活动列表网站时,我们发现这个插件非常有用。我们可以轻松删除过期的活动列表。其次,多亏了这个插件,按帖子过期日期对帖子进行排序也非常容易。在本文中,我们将向您展示如何在WordPress中按帖子过期日期对帖子进行排序。更新了代码以反映插件中更改自定义字段名称的更改。感谢Tajim在评论中让我们知道。在我们的特定项目中,我们将事件作为自定义帖子类型。现在

您是否正在寻找自动化 WordPress 网站和社交媒体帐户的方法? 通过自动化,您将能够在 Facebook、Twitter、LinkedIn、Instagram 等平台上自动分享您的 WordPress 博客文章或更新。 在本文中,我们将向您展示如何使用 IFTTT、Zapier 和 Uncanny Automator 轻松实现 WordPress 和社交媒体的自动化。 为什么要自动化 WordPress 和社交媒体? 自动化您的WordPre

要使用 WordPress 主机建站,需要:选择一个可靠的主机提供商。购买一个域名。设置 WordPress 主机帐户。选择一个主题。添加页面和文章。安装插件。自定义您的网站。发布您的网站。

我们的一位用户询问其他网站如何在页脚中显示查询数量和页面加载时间。您经常会在网站的页脚中看到这一点,它可能会显示类似以下内容:“1.248秒内64个查询”。在本文中,我们将向您展示如何在WordPress中显示查询数量和页面加载时间。只需将以下代码粘贴到主题文件中您喜欢的任何位置(例如footer.php)。queriesin
