我通过wp-cron创建帖子草稿有什么错误吗?(wp_Schedule_Event&wp_INSERT_POST)

时间:2019-03-07 作者:icantevenjustpostitPLEASE

所以我一直在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);
所以,在我把时间浪费在其他草稿创作上之前,有谁能告诉我,我做错了什么,它不会创建帖子?

1 个回复
最合适的回答,由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\' );

相关推荐

Wp-cron是同时运行所有调度的任务,还是一个接一个地运行?

我正在开发一个插件,想添加一个cron任务(比如cron\\u task\\u test),但我有一个疑问。如果计划与我的任务(cron\\u task\\u test)同时运行15个任务(可能由多个插件或用户自己安排),wp cron会逐个选择它们吗,即在第一个任务完成后选择另一个任务,或者如果第一个任务耗时超过一分钟?还是会一个接一个地被解雇简而言之,cron\\u锁是如何工作的?如果它一个接一个地执行,那么运行所有任务的主cron线程本身是否会超过服务器的最大执行时间限制(通常为30秒)?如果我的任