Php Cron作业/激活Wordpress插件不';t fire Insert post函数
我一直在试图弄清楚为什么我的插件停止工作,但还没有弄清楚原因。。基本上,插件应该通过wordpress的scheduled events钩子创建一个Cron作业,然后通过json提要进行每周解析以更新帖子。当我最初设置它时,它工作得非常好,而现在,当我激活插件时,它似乎都不工作了,至少它应该这样做。cron作业的激活和取消激活似乎工作正常 此代码段创建每周cron活动功能Php Cron作业/激活Wordpress插件不';t fire Insert post函数,php,cron,wordpress,Php,Cron,Wordpress,我一直在试图弄清楚为什么我的插件停止工作,但还没有弄清楚原因。。基本上,插件应该通过wordpress的scheduled events钩子创建一个Cron作业,然后通过json提要进行每周解析以更新帖子。当我最初设置它时,它工作得非常好,而现在,当我激活插件时,它似乎都不工作了,至少它应该这样做。cron作业的激活和取消激活似乎工作正常 此代码段创建每周cron活动功能 add_filter( 'cron_schedules', 'cron_add_weekly' ); function cr
add_filter( 'cron_schedules', 'cron_add_weekly' );
function cron_add_weekly( $schedules ) {
// Adds once weekly to the existing schedules.
$schedules['weekly'] = array(
'interval' => 604800,
'display' => __( 'Once Weekly' )
);
return $schedules;
}
下面的代码在激活时创建cron作业,该作业正在工作
register_activation_hook( __FILE__, 'startupx_activation' );
function startupx_activation() {
wp_schedule_event( time(), 'weekly', 'startupx_weekly_event_hook' );
}
add_action( 'wp', 'startupx_setup_schedule' );
function startupx_setup_schedule() {
if ( ! wp_next_scheduled( 'startupx_weekly_event_hook' ) ) {
wp_schedule_event( time(), 'weekly', 'startupx_weekly_event_hook' );
}
}
然后,我创建了一个函数,用于解析/更新所有帖子并插入任何新帖子。如果某一集的提要发生了更改,我会进行更新。我认为只更新它比检查是否需要更新更容易。下面是一些代码
add_action( 'startupx_weekly_event_hook', 'insert_episodes' );
function insert_episodes() {
//load the data from the RSS
$feed = "http://www.seanzulu.com/startupx?format=json";
$json = json_decode(curl_get_contents($feed)); //curl_get_contents calls another function to get the feed data via cURL
$episode_list = $json->items; //set where the episode data lives in the object for easier use
//parse through each episode for data
foreach($episode_list as $episode) {
//set the post array to have the necessary data per http://codex.wordpress.org/Function_Reference/wp_insert_post
if(get_page_by_title($episode->title,OBJECT,'post') != NULL) {
//update post
wp_update_post($post);
} else {
//insert post
$dateCreated = date('Y-m-d H:i:s', $epoch/1000);
$post['post_date'] = $dateCreated; //only set the date on creation
wp_insert_post($post);
}
}
}
我已经删除了一些代码,因为我认为没有必要解决我遇到的问题。如果需要,我可以加进去。它基本上只是解析数据并对其进行设置,以便$post
具有与每个索引匹配的正确值。在这个函数之后,我有一个函数去激活每周偶数计划挂钩
register_deactivation_hook( __FILE__, 'startupx_deactivation' );
function startupx_deactivation() {
wp_clear_scheduled_hook( 'startupx_weekly_event_hook' );
}
就像我说的,我不完全确定它为什么会坏,以及是什么导致它在激活插件时无法运行insert\u scents()
函数。我猜这与钩子是如何设置的有关,但是它在我没有修改代码之前就已经工作了,它坏了。我查看了不同函数的文档,看看是否有什么变化,但没有发现任何有用的东西。我不知道下一步该做什么,所以我非常感谢任何关于如何让它运行的见解。如果你看到的领域,可以更好地优化的一切手段让我知道!如果你有问题,让我知道,我会非常乐意回答。提前感谢您的帮助!如果你想让我上传更多的代码,请让我知道
更新1:
我想这可能是因为我在
$epoch
中有一个未声明的变量。我不确定这是否解决了问题,或者只是解决了我遇到的另一个问题 您可以做的第一件事是安装“WP Crontrol”()。它将允许按需运行cron作业,以便您可以正确地进行测试。第二件您可能想做的事情是安装“BlackBox Debug Bar”(),这样您就可以看到您的操作是如何执行的(比如SQL查询等)
您还可以做一些基本的日志记录,这可能会帮助您发现问题。我发现的最简单的方法是将“记录的事件”转储到瞬态中,以便在cron运行之后获取它们。你可以把你想要的任何东西都转储到日志中
用于插入函数的内部…
/*
* Log Episode List
*/
ob_start();
var_dump( $episode_list );
$log_data = ob_get_clean();
set_transient( 'my_plugin_log', $log_data, 24 * HOUR_IN_SECONDS );
/*
* Produce the log reports
*/
public function my_log_report()
{
?>
<h1>Log Viewer</h1>
<pre class="logs"><?php echo get_transient( 'my_plugin_log' ); ?></pre>
<?php
}
add_submenu_page( 'edit.php', 'Log Viewer', 'View Logs', 'manage_options', 'my-post-logs', 'my_log_report' );
然后您可以添加这样的日志查看器…
/*
* Log Episode List
*/
ob_start();
var_dump( $episode_list );
$log_data = ob_get_clean();
set_transient( 'my_plugin_log', $log_data, 24 * HOUR_IN_SECONDS );
/*
* Produce the log reports
*/
public function my_log_report()
{
?>
<h1>Log Viewer</h1>
<pre class="logs"><?php echo get_transient( 'my_plugin_log' ); ?></pre>
<?php
}
add_submenu_page( 'edit.php', 'Log Viewer', 'View Logs', 'manage_options', 'my-post-logs', 'my_log_report' );
/*
*生成日志报告
*/
公共功能我的日志报告()
{
?>
日志查看器