web-dev-qa-db-ja.com

tax_inputが機能しないwp_insert_post

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
);

前もって感謝します

4
Shawn James

最も一般的な理由は、ユーザーコンテキストなしでこのコードを実行することです(cronなど)。 wp_insert_post()コンテキストWP内で、ユーザーが分類法に対する許可を持っているかどうかをチェックします。ユーザーがいない、アクセス権がない、または用語が割り当てられていないことを示します。

この問題を回避するには、まず投稿を作成してから、それに用語を割り当てます。 APIメソッド(wp_set_object_terms()など)を介して用語が明示的に割り当てられている場合、権限チェックは実行されません。

14
Rarst

ユーザーがカスタム分類法で機能する能力を持っていない場合、tax_inputは機能しません。

wp-includes/post.php(wp_insert_post): enter image description here 

正しいキャップを追加するか、wp_set_object_terms()を使用してください。

3

あなたがコメントで述べたように、プラグインはフィルタを実行しフックを持たないということですが、とにかくプラグインはwp_insert_postフックを持たなければならないと思います。それ以外の場合はどうやって投稿を挿入しますか?私は同じ問題に直面し、唯一の方法を見つけたので、私は長い間これに答えています。

 $ new_id = wp_insert_post($ post_arr、true); 
 $ status = wp_set_object_terms($ new_id、$ term_id、 'location'); 

ここで場所はスラグという用語です。いつか誰かがこの役に立つ..を取得します.

0
Tuhin Ahmed

@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 );

    }
0
giannisrig

挿入後の挿入にtax_inputを使用する場合は、ナメクジや名前が捨てられているように見えるため、必ず用語分類法IDを使用してください。

$my_post = array(
'post_title'    => $title,
'post_content'  => $content,
'post_type'     => 'products',
'tax_input' => array('myTax', array(4,458,11478)),
);
0
user1180105