搜索
首页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
我可以在3天内学习WordPress吗?我可以在3天内学习WordPress吗?Apr 09, 2025 am 12:16 AM

能在三天内学会WordPress。1.掌握基础知识,如主题、插件等。2.理解核心功能,包括安装和工作原理。3.通过示例学习基本和高级用法。4.了解调试技巧和性能优化建议。

WordPress是CMS吗?WordPress是CMS吗?Apr 08, 2025 am 12:02 AM

WordPress是内容管理系统(CMS)。它提供内容管理、用户管理、主题和插件功能,支持创建和管理网站内容。其工作原理包括数据库管理、模板系统和插件架构,适用于从博客到企业网站的各种需求。

WordPress有什么用?WordPress有什么用?Apr 07, 2025 am 12:06 AM

wordpressgood forvortalyanewebprojectDuetoItsAsatilityAsacms.itexcelsin:1)用户友好性,允许Aeserywebsitesetup; 2)sexibility andcustomized andcustomization and numerthemesandplugins; 3)seoop timigimization; and4)and4)

我应该使用Wix或WordPress吗?我应该使用Wix或WordPress吗?Apr 06, 2025 am 12:11 AM

Wix适合没有编程经验的用户,WordPress适合希望有更多控制和扩展能力的用户。1)Wix提供拖放式编辑器和丰富模板,易于快速搭建网站。2)WordPress作为开源CMS,拥有庞大社区和插件生态,支持深度自定义和扩展。

WordPress的成本是多少?WordPress的成本是多少?Apr 05, 2025 am 12:13 AM

WordPress本身免费,但使用需额外费用:1.WordPress.com提供从免费到付费的套餐,价格从每月几美元到几十美元不等;2.WordPress.org需购买域名(每年10-20美元)和托管服务(每月5-50美元);3.插件和主题多数免费,付费的价格在几十到几百美元之间;通过选择合适的托管服务、合理使用插件和主题、定期维护和优化,可以有效控制和优化WordPress的成本。

WordPress仍然免费吗?WordPress仍然免费吗?Apr 04, 2025 am 12:06 AM

WordPress核心版本是免费的,但使用过程中可能产生其他费用。1.域名和托管服务需要付费。2.高级主题和插件可能需要付费。3.专业服务和高级功能可能需要付费。

对于初学者来说,WordPress容易吗?对于初学者来说,WordPress容易吗?Apr 03, 2025 am 12:02 AM

WordPress对初学者来说容易上手。1.登录后台后,用户界面直观,简洁的仪表板提供所有必要功能链接。2.基本操作包括创建和编辑内容,所见即所得的编辑器简化了内容创建。3.初学者可以通过插件和主题扩展网站功能,学习曲线存在但可以通过实践掌握。

为什么有人会使用WordPress?为什么有人会使用WordPress?Apr 02, 2025 pm 02:57 PM

人们选择使用WordPress是因为其强大和灵活性。1)WordPress是一个开源的CMS,易用性和可扩展性强,适合各种网站需求。2)它有丰富的主题和插件,生态系统庞大,社区支持强大。3)WordPress的工作原理基于主题、插件和核心功能,使用PHP和MySQL处理数据,支持性能优化。

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脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT

螳螂BT

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

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

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