WP Cron and wp_insert_post

时间:2014-08-18 作者:nathanaelphilip

我试图使用cron作业插入帖子,但我不断遇到WP缺少函数的错误(is_user_logged_in, wp_get_current_user).

是否有合适的方法使用cron作业运行wp\\u insert\\u post?

这是我目前掌握的代码。

phrets_hourly 是WP\\u CRON挂钩

add_action(\'phrets_hourly\', \'run_listings_update\' );

function run_listings_update(){
  $fetch = new Fetcher();
  $fetch->fetch();
}
这是$fetch 运行的对象(获取程序类)。

public function fetch(){
  $options[\'class\'] = \'RES\';
  $options[\'limit\'] = 10;
  $options[\'offset\'] = 0;
  $options[\'silent\'] = true;     
  $data = $this->query( $options );
  foreach ( $data as $datum ) {
    $this->place( $datum, true );
  }
}

public function place( $data, $silent ){
  $rets = $this->connect_to_rets();
  $listing = new Listing( $data );
  // check to see if listing already exists
  $post_id = $listing->check_listing_exists( $data[\'MST_MLS_NUMBER\'] );
  if ( ! $post_id ) {
    $action = $listing->put();
  } else {
    $action = $listing->update($post_id);
  }
}
这是从$listing 将数据放入数据库的对象(列表类)

public function put(){
  $title = $this->create_title( $this->data );
  // setup the \'post\' data
  $post = array(
    \'post_type\' => \'listing\',
    \'post_title\' => $title,
    \'post_content\' => $this->data[\'Remarks\'],
    \'post_status\' => \'publish\'
  );
  // add new meta data
  if ( ! is_wp_error( $post_id ) ) {
    $this->add_meta_data( $post_id );
    $this->assign_community( $post_id, $data );
  }
  // set the action
  $action = \'inserted\';
  return $action;
}
谢谢!

2 个回复
SO网友:nathanaelphilip

对于后来偶然发现这一点的人,请使用以下选项1或2:https://core.trac.wordpress.org/ticket/19373.

“对于遇到此问题并需要解决此问题的其他开发人员,以下两个选项中的任何一个都有效:调用wp\\u set\\u post\\u terms()在调用wp\\u insert\\u post()后添加分类法在调用wp\\u insert\\u post()前在脚本中设置“当前用户”

SO网友:ryanka

我找到了绕过这个的方法。

无法理解core-trac,尽管它已经发行了4年,但仍然没有修补。这是我用来插入自定义帖子的代码。这个include_once 指令在这里很重要。

我还应该注意到,wp\\u set\\u auth\\u cookie(1)将此脚本的访问权限设置给管理员。如果您的管理员ID不为1,则需要更新此ID。该函数也被弃用,因此您需要包括可插拔的。php文件。

//Add in the pluggable functions
include_once( ABSPATH . WPINC . \'/pluggable.php\' );
wp_set_auth_cookie( 1 );

$slug = strtolower("test-example");
$title = "Test Example";

//See if post exists or not then handle accordingly
$post_id = get_page_by_title( $title, OBJECT, \'cars\' );

if( $post_id == NULL ) {
    $post_id = wp_insert_post(
        array(
            \'comment_status\'    =>  \'closed\',
            \'ping_status\'       =>  \'closed\',
            \'post_author\'       =>  1,
            \'post_name\'         =>  $slug,
            \'post_title\'        =>  $title,
            \'post_status\'       =>  \'publish\',
            \'post_type\'         =>  \'cars\'
        )
    );
} else {
    $post_id = $post_id->ID;
}
只需将汽车更改为您想要的任何帖子类型。slug/title也需要相应更改。

结束

相关推荐

更好地处理WP-Cron服务器负载滥用

有multiple reports on how wp-cron is a far from 理想的解决方案,因为它在每次加载页面时都会运行,这在大多数情况下都是不必要的(有一种情况下,当您使用计划的帖子时,它是必要的)常见的建议是define(\'DISABLE_WP_CRON\', true); 至wp配置。php然后安排一个真正的cron作业(如果您有足够的管理员访问权限)。但是as of WP 3.3, there is WP_CRON_LOCK_TIMEOUT, 其中“定义了一段时间,在这段时间