我修改了插件,使得输入数据是静态的(每次来自相同的csv),现在全部位于一个php文件中。 我想安排一个Cron作业每隔一小时或更长时间执行此脚本。
我尝试使用cPanel设置它,并直接访问php文件,但它不起作用(未显示任何内容)。 我认为这是因为插件使用了WordPress函数,例如wp_insert_post。
如何以计划事件的形式运行此脚本,就像通过WordPress仪表板运行一样?
注意:文件还包含一些javascript。
要获取管理员侧面的功能,您需要包含2个文件:首先是wp-load.php。 wp-load.php会设置所有内容并启动WordPress。但是,由于您从插件文件夹中调用此函数,该文件夹位于内容目录中(而不是管理目录中) - 因此,在调用wp-load时,您将不会在管理部分,并且无法访问这些功能。好消息是,您也不必处理WordPress强制登录的问题。既然您仍然需要这些管理员功能,请包含wp-admin/admin-functions.php。这将加载管理员侧面并为您提供管理员功能的访问权限 - 然后您就可以开始使用了。
您应该使用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 文件。wget
cron以确保它将按时运行。 - Nikola Ivanov Nikolov接受的答案对我很有帮助。我进行了修改,以下是我的发现。事实上,您可以在插件场景之外使用此解决方案。基本上,您可以使用本机WordPress功能通过cron作业运行您的服务器,如下所示。您可以在WordPress应用程序的顶层创建一个文件,然后在其中include /wp-load.php;
。
这会加载本机WordPress,并允许您调用一个类,该类可以定义为您必须使用的插件的一部分。然后,您就可以使用基本的WordPress功能,例如$wpdb
和get_usermeta()
。
现在,您可以使用$class_variable = new YourClass;
实例化您的类,从那里您可以调用类函数。这个伟大的部分是,您可以像通常在服务器上一样安排cron作业,当您这样做时,您的WordPress函数将像在WordPress内部一样运行。这意味着您不需要将cron作业内容作为插件的一部分进行维护,这可能有用也可能没有用,具体取决于您要做什么。
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