私は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を挿入します。
何が悪いの?
まず、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
に関連することです。自分自身で ソースコード を見てください。つまり、投稿のステータスが「公開」または「非公開」に変わると、更新が実行され、投稿名がデータベースに挿入されます。前 - 投稿ステータスが自動ドラフト、ドラフト、または保留中の場合 - そうではありません。