Wp_insert_postを使用していますが、tax_inputが機能している以外はすべてのフィールドが機能しています。コードに問題がありますか?
$customtax = array(
'product_link' => $link,
'product_price' => $price,
'product_description' => $desc );
$my_post = array(
'post_title' => $title,
'post_content' => $content,
'post_type' => 'products',
'tax_input' => $customtax
);
前もって感謝します
最も一般的な理由は、ユーザーコンテキストなしでこのコードを実行することです(cronなど)。 wp_insert_post()
コンテキストWP内で、ユーザーが分類法に対する許可を持っているかどうかをチェックします。ユーザーがいない、アクセス権がない、または用語が割り当てられていないことを示します。
この問題を回避するには、まず投稿を作成してから、それに用語を割り当てます。 APIメソッド(wp_set_object_terms()
など)を介して用語が明示的に割り当てられている場合、権限チェックは実行されません。
あなたがコメントで述べたように、プラグインはフィルタを実行しフックを持たないということですが、とにかくプラグインはwp_insert_postフックを持たなければならないと思います。それ以外の場合はどうやって投稿を挿入しますか?私は同じ問題に直面し、唯一の方法を見つけたので、私は長い間これに答えています。
$ new_id = wp_insert_post($ post_arr、true); $ status = wp_set_object_terms($ new_id、$ term_id、 'location');
ここで場所はスラグという用語です。いつか誰かがこの役に立つ..を取得します.
@Rarstが言ったように、WordPressは wp_insert_post() の間にチェックします。現在のユーザーが分類用語を追加する許可を持っているかどうか。 post.php Line:3352 からも見ることができます。
if ( current_user_can( $taxonomy_obj->cap->assign_terms ) ) {
wp_set_post_terms( $post_ID, $tags, $taxonomy );
}
ログインしているユーザーなしでwp_insert_postコードを実行している場合は、 wp_set_current_user() メソッドを使用して現在のユーザーを設定できます。
$user = get_user_by('ID', $user_id);
if( $user ){
wp_set_current_user( $user_id, $user->user_login );
}
挿入後の挿入にtax_inputを使用する場合は、ナメクジや名前が捨てられているように見えるため、必ず用語分類法IDを使用してください。
$my_post = array(
'post_title' => $title,
'post_content' => $content,
'post_type' => 'products',
'tax_input' => array('myTax', array(4,458,11478)),
);