【问题标题】:Wordpress PHP Cron jobsWordpress PHP Cron 职位
【发布时间】:2012-11-24 07:03:00
【问题描述】:

我有一个将 csv 数据导入 wordpress 表的插件。它通过 Wordpress 仪表板运行,您可以在其中输入一些详细信息并单击一个按钮来执行它。

我已经更改了插件,使输入数据是静态的(每次都来自同一个 csv)并且现在都位于一个 php 文件中。我想安排一个 Cron 作业每隔一小时左右执行一次这个脚本。

我尝试使用 cPanel 设置它并直接访问 php 文件,但它不起作用(没有显示任何内容)。我相信这是因为该插件使用了 wp_insert_post 等 wordpress 功能。

我怎样才能运行这个脚本,就像它是通过 wordpress 仪表板运行一样,作为一个预定的事件?

注意:该文件还包含一些 javascript。

【问题讨论】:

  • 我认为如果使用普通的cron作业,JS不会被执行。除此之外,您有两个选项可以执行此操作 - 添加 require_once( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) . '/wp-load.php' ); 并以相同的方式保持 cron 作业,或者将 cronjob 设为 wget 调用 http://yoursite.com/?run_cron=randomCharactersHere,然后将脚本包装在 init 中挂钩回调并在那里检查if ( isset( $_GET['run_cron'] ) && $_GET['run_cron'] == 'randomCharactersHere'。这取决于你,但仍然不会执行 JS(你需要一个浏览器)

标签: php wordpress cron scheduled-tasks


【解决方案1】:

您必须包含 2 个文件才能访问管理端功能:首先,wp-load.php。 wp-load.php 设置好所有内容,并启动 wordpress。但是,您是从插件文件夹中调用此函数,在内容目录(而不是 admin 目录)内 - 所以当 wp-load 被调用时,您不会在 admin 部分,也不会获得访问权限到那些功能。从好的方面来说,您也不必处理强迫您登录的 WordPress。由于您仍然需要这些管理功能,请包括 wp-admin/admin-functions.php。这会加载管理端并让您访问管理功能 - 您准备好了

【讨论】:

  • 非常感谢它就像一个魅力 :) 对不起,我不能投票,没有足够的代表 =/
  • 好回答老兄。您的答案的一个变体对我来说效果很好。干杯。
【解决方案2】:

您应该使用 wp_schedule_event。请参阅此处的 WordPress 法典:http://codex.wordpress.org/Function_Reference/wp_schedule_event。使用这样的东西:

            register_activation_hook(__FILE__, 'my_activation');
            add_action('my_hourly_event', 'do_this_hourly');

            function my_activation() {
                wp_schedule_event( time(), 'hourly', 'my_hourly_event');
            }

            function do_this_hourly() {
                // do something every hour
            }

您可以在 do_this_hourly() 函数中完美地调用 PHP 文件。

【讨论】:

  • 很酷,谢谢,如果我遇到任何问题,我会考虑这个
  • WordPress 事件只有一个失败之处——只有当有人访问该站点时才会触发。如果他们晚于要求的时间访问它,那么他们将无法按时工作。但他总是可以安排一个wget cron 以确保它按时运行。
  • 是的,wp_schedule_event 任务只能在调度时间后第一次访问页面时执行。如果按小时计算,则意味着您每小时至少需要一名访客。
【解决方案3】:

接受的答案对我来说效果很好。我修改了这个,这是我的发现。在这种情况下,您可以在插件方案之外使用此解决方案。基本上,您可以使用本机 wordpress 功能使用 cron 作业运行您的服务器,如下所示。您可以在 wordpress 应用的顶层创建一个文件,然后在其中创建include /wp-load.php;

这会在原生 wordpress 中加载,并允许您调用一个类,您可以将其定义为必须使用的插件的一部分。然后,您可以使用基本的 wordpress 功能,例如 $wpdbget_usermeta()

现在您可以使用$class_variable = new YourClass; 实例化您的类,然后您可以从那里调用类函数。关于这一点的重要部分是,您可以像通常在服务器上一样安排 cron 作业,并且当您这样做时,您的 wordpress 功能就像在 wordpress 中一样运行。这意味着您不需要将您的 cron 工作内容作为插件的一部分进行维护,这取决于您的用途,它可能有用也可能没有用。

【讨论】:

    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多