web-dev-qa-db-ja.com

投稿をスケジュールするためのwp_insert_post - しかし何も起こりませんか?

現在下書きの投稿を予定しています。

function schedule() {

$postdate = date('2014-06-11 00:30:00');
$post = array(
    'ID' => 11,
  'post_status'    => 'future',
  'post_type'      => 'post',
  'post_author'    => '1',
  'ping_status'    => 'closed',
  'to_ping'        => 'http://rpc.pingomatic.com/',
  'post_date_gmt'  => $postdate
);  
wp_insert_post( $post ); 
}
add_action('wp_head', 'schedule');

問題の投稿には何も起こりませんが、それでもドラフトのままです。投稿をスケジュールする他の方法はありますか、それとも私のコードに問題がありますか?

2
kat

Rarstが述べたように私はwp_update_post()を使わなければなりませんでした、しかしそれから少しトリックがあります - 人はedit_date = trueもセットしなければなりません、さもなければそれは変な振る舞いをします。最終的なコードは次のようになります。

function schedule() {

$postdate = date('2014-06-11 01:00:00');
$postdate_gmt = date('2014-06-11 05:00:00');
$post = array(
    'ID' => 11,
  'post_status'    => 'future',
  'post_type'      => 'post',
  'post_author'    => '1',
  'ping_status'    => 'closed',
  'to_ping'        => 'http://rpc.pingomatic.com/',
  'post_date_gmt'  => $postdate_gmt,
  'post_date'  => $postdate,
  'edit_date' => 'true'
);  

wp_update_post( $post, true ); 
}

add_action('wp_head', 'schedule');

テキストファイルを使用して、これが多くの投稿に対してどのように機能するかを示します。

Text File:

postid,server_time,gmt_time
postid,server_time,gmt_time
postid,server_time,gmt_time
postid,server_time,gmt_time
...

関数:

function schedule() {

    $fh = @fopen( dirname( __FILE__ ) . '/schedule.txt', 'r' );

    if ( $fh ) {
        while ( ( $line = fgets( $fh ) ) !== false ) {
            $ids = explode( ',', $line );
            array_walk( $ids, 'trim' );

$postdate = date($ids[1]);
$postdate_gmt = date($ids[2]);
$post = array(
    'ID' => $ids[0],
  'post_status'    => 'future',
  'post_type'      => 'post',
  'post_author'    => '5',
  'ping_status'    => 'closed',
  'to_ping'        => 'http://rpc.pingomatic.com/',
  'post_date_gmt'  => $postdate_gmt,
  'post_date'  => $postdate,
  'edit_date' => 'true'
);  

wp_update_post( $post, true ); 
        }
    }

    }

add_action('wp_head', 'schedule');

これや他のスレッドを手伝ってくれたみんなに本当にありがとう!

2
kat

wp_insert_post()を使って existing postを操作してはいけません。それがwp_update_post()の目的です。

失敗した場合のreturnに役に立たない0ではなくWP_Errorオブジェクトが含まれるように、どちらかに2番目の引数としてtrueを渡すことができます。デバッグに非常に役立ちます。

2
Rarst