web-dev-qa-db-ja.com

post_nameはwp_insert_postの後に空です

私はwordpressにpostを挿入する外部ツールを書いています(私はwordpress関数を使っています)。私もこの議論を読みました: wp_insert_postは私のpost_nameを書きません

しかし、私の問題は少し異なります。 postの挿入をしますが、post_nameが空です。コードは次のとおりです。

// Create post object
$my_post = array(
'post_title'    => $article_title,
'post_name'   => $article_title,
'post_content'  => $article_content,
'post_status'   => 'pending',
'post_author'   => 1,
'post_category' => array(8,39)
);

// Insert the post into the database
wp_insert_post( $my_post );

Post_nameの有無にかかわらず試してみましたが、結果は変わりませんでした。私も試してみました:

$post_ID = (int) $wpdb->insert_id;
$post_name = wp_unique_post_slug($article_title, $post_ID, $post_status, $post_type, $post_parent);
$where = array( 'ID' => $post_ID );
$wpdb->update( $wpdb->posts, array( 'post_name' => $post_name ), $where );

しかし、たとえば、post_nameを挿入します。

  1. ユニークではない
  2. サニタイズしないでください、例えば、 "Test"は "test"になりませんでした

何が悪いの?

2
user41544

まず、post_categoryを使用しないでください。ワードプレスのcodex wp_insert_post() によると。

'post_category' => [array(、<...>)] // post_categoryはもう存在しません。投稿のカテゴリを設定するためにwp_set_post_terms()を試してください。

次に、投稿のタイトルをスラッグにしたい場合は、デフォルトでタイトルから作成されるので、post_nameパラメータを使用する必要はありません。タイトルをタグフリーにして、対応する行を次のように変更することをお勧めします。

'post_title'    => wp_strip_all_tags( $article_title ),

本当にpost_nameというパラメータを手動で追加したい場合は、 sanitize を確認し、 uniqueness を確実にしてください。

'post_name'   => wp_unique_post_slug( sanitize_title( $article_title ) ),

上記の点を除けば、あなたのコードは私にとって正しいようです。投稿名を取得しないことに関する他の唯一の留意点は、選択したパラメータpost_statusの値pendingに関連することです。自分自身で ソースコード を見てください。つまり、投稿のステータスが「公開」または「非公開」に変わると、更新が実行され、投稿名がデータベースに挿入されます。前 - 投稿ステータスが自動ドラフト、ドラフト、または保留中の場合 - そうではありません。

6
Nicolai