Wordpress PHP定时任务

3
我有一个插件可以将csv数据导入WordPress表。 它通过WordPress仪表板运行,您可以在其中输入一些详细信息并单击按钮执行它。
我修改了插件,使得输入数据是静态的(每次来自相同的csv),现在全部位于一个php文件中。 我想安排一个Cron作业每隔一小时或更长时间执行此脚本。
我尝试使用cPanel设置它,并直接访问php文件,但它不起作用(未显示任何内容)。 我认为这是因为插件使用了WordPress函数,例如wp_insert_post。
如何以计划事件的形式运行此脚本,就像通过WordPress仪表板运行一样?
注意:文件还包含一些javascript。

1
如果您使用普通的cron作业,我认为JS不会被执行。除此之外,您有两个选项来完成这个任务 - 添加 require_once( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) . '/wp-load.php' ); 并保持cron作业不变,或者将cron作业设置为 wget 调用 http://yoursite.com/?run_cron=randomCharactersHere,然后在其中包装您的脚本,并检查 if ( isset( $_GET['run_cron'] ) && $_GET['run_cron'] == 'randomCharactersHere'。由您决定,但是JS仍然不会被执行(您需要浏览器才能执行)。 - Nikola Ivanov Nikolov
3个回答

4

要获取管理员侧面的功能,您需要包含2个文件:首先是wp-load.php。 wp-load.php会设置所有内容并启动WordPress。但是,由于您从插件文件夹中调用此函数,该文件夹位于内容目录中(而不是管理目录中) - 因此,在调用wp-load时,您将不会在管理部分,并且无法访问这些功能。好消息是,您也不必处理WordPress强制登录的问题。既然您仍然需要这些管理员功能,请包含wp-admin/admin-functions.php。这将加载管理员侧面并为您提供管理员功能的访问权限 - 然后您就可以开始使用了。


非常感谢,它完美地解决了问题 :) 很抱歉我不能点赞,因为声望值不够 =/ - Lance
不错的答案哥们。你的一个变体对我很有帮助。干杯。 - usumoio

2

您应该使用wp_schedule_event。在WordPress codex中查看此处: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 文件。

谢谢,如果我遇到更多问题,我会考虑这个建议的。 - Lance
1
WordPress事件仅有一个缺陷 - 只会在某人访问网站时触发。如果他们比所需时间晚访问,那么它们就不会按时起作用。但是,他可以始终安排wget cron以确保它将按时运行。 - Nikola Ivanov Nikolov
True,wp_schedule_event任务只能在计划时间后的第一次页面访问时执行。如果是每小时执行,则意味着您每小时至少需要一个访问者。 - barakadam

0

接受的答案对我很有帮助。我进行了修改,以下是我的发现。事实上,您可以在插件场景之外使用此解决方案。基本上,您可以使用本机WordPress功能通过cron作业运行您的服务器,如下所示。您可以在WordPress应用程序的顶层创建一个文件,然后在其中include /wp-load.php;

这会加载本机WordPress,并允许您调用一个类,该类可以定义为您必须使用的插件的一部分。然后,您就可以使用基本的WordPress功能,例如$wpdbget_usermeta()

现在,您可以使用$class_variable = new YourClass;实例化您的类,从那里您可以调用类函数。这个伟大的部分是,您可以像通常在服务器上一样安排cron作业,当您这样做时,您的WordPress函数将像在WordPress内部一样运行。这意味着您不需要将cron作业内容作为插件的一部分进行维护,这可能有用也可能没有用,具体取决于您要做什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接