wp_insert_postを使用して投稿する分類データを添付する


17

複数のドロップダウン選択フィールドに分類データを表示するフロントエンド投稿システムを実装しようとしています。ドロップダウンのそれぞれは、「名前」を用いて命名される$argwp_dropdown_categories()

wp_dropdown_categories( array(
    'taxonomy'      => 'location',
    'hide_empty'    => 0,
    'orderby'       => 'name',
    'order'         => 'ASC',
    'name'          => 'location',
) );

ご覧のとおり、分類法は「場所」であり、選択名も「場所」です。

その後、post_title、post_contentなどとともに、そのような分類選択ドロップダウンのそれぞれに変数を追加します。

$title          = trim( $_POST['wpuf_post_title'] );
$content        = trim( $_POST['wpuf_post_content'] );
$tags           = wpuf_clean_tags( $_POST['wpuf_post_tags'] );
$customcategory = trim( $_POST['customcategory'] );
$cat            = trim( $_POST['cat'] );
$location       = trim( $_POST['location'] );
$sale_rental    = trim( $_POST['sale_rental'] );
$price          = trim( $_POST['price'] );

最後に、送信する準備ができている配列に追加情報を追加しwp_insert_post()ます。私はtax_inputこれが私がする必要があるコーデックスから理解していることなので、私は下のような配列に追加することによって正しいことをやっているかどうかにかなり固執しています。

'tax-input' => array( 
    $location,
    $sale_rental,
    $price
),

その結果、すべてが次のようになります。

$my_post = array(
    'post_title'    => $title,
    'post_content'  => $content,
    'post_status'   => $post_status,
    'post_author'   => $userdata->ID,
    'post_category' => array( $_POST['cat'] ),
    'post_type'     => $customcategory,
    'tags_input'    => $tags,
    'tax_input'     => array( 
        $location,
        $sale_rental,
        $price
    ),
);

$post_id = wp_insert_post( $my_post );

ただし、新しい投稿を送信すると、すべての標準的な投稿データ(およびカスタムの投稿タイプ)は正常になりますが、分類法はそうではありません。私は明らかに何か間違ったことをしていますが、何ですか?

回答:


25

wp_set_object_terms各分類の投稿IDを取得した後に使用します。

...
$post_id = wp_insert_post( $my_post );
wp_set_object_terms( $post_id, $location, 'location' );
wp_set_object_terms( $post_id, $sale_rental, 'sale_rental' );
wp_set_object_terms( $post_id, $price, 'price' );

私はあなたの助けがなければどこにいるのかわかりません、初めて働いた... Bainternetに感謝します 回答
済み

私は助けることができて嬉しい:)
Bainternet

$ locationおよび$ sale_rental配列は整数または文字列ですか?
ダグ14年

5

wp_insert_postを使用して実行できますが、で分類法も指定する必要があるtax_inputため、次のようになります。

$item['tax_input'] = array (
    'location'      => implode( ',', $location ),
    'sale_rental'   => implode( ',', $sale_rental ),
    'price'         => implode( ',', $price ),
)

複数の用語を持つ配列になるimplode()ように使用します$location

また、これは非階層分類法に対してのみ機能することに注意してください。階層分類法の場合、astringの代わりに配列を指定する必要があります。


2

問題の原因

このトピックに関するいくつかの調査の後、内部をチェックするように言われました(私はそれを行いました)。外部投稿から投稿をカスタム投稿タイプとしてインポートしているので、ユーザーを-1(ボットユーザーを追加する代わりに)に設定するだけです。私が遭遇した問題はwp_insert_post()tax_inputセットを使用して、ユーザー機能を内部的にチェックすることでした。これは、既存のユーザーには明らかにありません。

救助のためのSysBot

解決策は、SysBotプラグインを作成することでした。この方法で、SysBotユーザー(編集者の役割を持っている)をその新しく作成された投稿に単純に添付することができ、すべてが期待どおりに機能しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.