所以我一直在google上搜索,显然很多人在过去的X年里一直在努力解决这个问题,但似乎没有任何关于堆栈溢出的明确回应。
我正在开发的是一个插件,它通过API从另一个发布系统获取数据,并理想地在wordpress中创建帖子草稿。当我从plugin init调用我的wp\\u insert\\u post包装器时,一切都正常(我最终得到了几十篇帖子)。但按计划,我最终没有帖子,没有错误,什么都没有。
function wpcp_make_post( $post_title, $post_content, $post_type ) {
$post_id = 0;
if ( post_type_exists( $post_type ) ) :
wp_set_current_user( 1 );
$to_post = array(
\'post_type\' => $post_type,
\'post_status\' => \'draft\',
\'post_author\' => 1,
\'post_title\' => $post_title,
\'post_content\' => $post_content,
);
$post_id = wp_insert_post( $to_post );
endif;
return $post_id;
}
...
// way its wrapped
function wpcp_cron_activation() {
if ( ! wp_next_scheduled( \'wpcp_cron_hook\' ) ) :
wp_schedule_event( time() , \'hourly\', \'wpcp_cron_hook\' ); // = daily
endif;
}
function wpcp_cron_do() {
$post_title = "This should be the draft title";
$post_content = "All HERE";
wpcp_make_post( $post_title, $post_content, \'post\' );
}
...
// and called
function wpcp_activate(){
add_action( \'wpcp_cron_hook\', \'wpcp_cron_do\' );
register_activation_hook(__FILE__, \'wpcp_cron_activation\');
wpcp_cron_activation();
//wpcp_cron_print_tasks();
}
add_action( \'admin_init\', \'wpcp_activate\' );
我正在使用
wp-cron.php?doing_wp_cron
参数具有正确的wp配置,但我甚至没有收到任何错误。
只是没有该死的帖子。
define(\'WP_DEBUG\', true);
define(\'DISABLE_WP_CRON\', true);
所以,在我把时间浪费在其他草稿创作上之前,有谁能告诉我,我做错了什么,它不会创建帖子?
最合适的回答,由SO网友:Jacob Peattie 整理而成
问题是您只挂接了上的cron操作admin_init
, 当wp-cron.php
被调用。因此,该函数将永远不会运行。
所以这个函数不应该在里面wpcp_activate()
:
add_action( \'wpcp_cron_hook\', \'wpcp_cron_do\' );
此外,
register_activation_hook()
不应该在
admin_init
钩住任何一个。
因此,您的代码应该如下所示:
function wpcp_make_post( $post_title, $post_content, $post_type ) {
$post_id = 0;
if ( post_type_exists( $post_type ) ) :
wp_set_current_user( 1 );
$to_post = array(
\'post_type\' => $post_type,
\'post_status\' => \'draft\',
\'post_author\' => 1,
\'post_title\' => $post_title,
\'post_content\' => $post_content,
);
$post_id = wp_insert_post( $to_post );
endif;
return $post_id;
}
function wpcp_cron_activation() {
if ( ! wp_next_scheduled( \'wpcp_cron_hook\' ) ) :
wp_schedule_event( time() , \'hourly\', \'wpcp_cron_hook\' ); // = daily
endif;
}
register_activation_hook( __FILE__, \'wpcp_cron_activation\' );
function wpcp_cron_do() {
$post_title = \'This should be the draft title\';
$post_content = \'All HERE\';
wpcp_make_post( $post_title, $post_content, \'post\' );
}
add_action( \'wpcp_cron_hook\', \'wpcp_cron_do\' );