Невозможно установить пользовательские правила таксономии через пользовательскую форму

Вопрос

Я создаю свой первый плагин, и в нем пользователи смогут (среди прочего) создавать новые сообщения через пользовательскую форму из wordpress backend. Это сообщение использует пользовательский тип сообщения и пользовательскую таксономию. Форма создает новую запись, но не устанавливает пользовательскую таксономию.

Создание должности регулярно (не через мою пользовательскую форму) работает отлично, т.е. позволяет мне добавить к нему пользовательскую таксономию.

Пользовательский тип сообщения и пользовательские таксономии регистрируются в книге, термины уже вставлены в db.

* таксономия не является переменной для целей отладки

add_action('plugins_loaded', 'newpost'); function newpost() { if (isset($_POST['new_post']) == '1') { $post_title = $_POST['posttitle']; $post_content = $_POST['postcontent']; $new_post = array( 'ID' => '', 'post_author' => 1, 'post_type' => 'cars', 'post_content' => $post_content, 'post_title' => $post_title, 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_status' => 'publish', 'tax_input' => array('cars' => array('bmw', 'audi')) ); $post_id = wp_insert_post($new_post); } } 

Я даже пытался удалить «tax_input» и использовать wp_set_post_terms и wp_set_object_terms, но результаты были такими же. Два дня я застрял на этом, поэтому любая помощь будет очень признательна …

Решение

Решение заключалось в том, чтобы сменить plugins_loaded на init с низким приоритетом.

  add_action( 'init', 'newpost', 200 ); 

Поэтому проблема заключалась в том, что пользовательские привилегии еще не установлены при запуске плагина.

Solutions Collecting From Web of "Невозможно установить пользовательские правила таксономии через пользовательскую форму"

Вы пробовали wp_set_object_terms? … который должен быть размещен после вашего вызова на wp_insert_post поскольку он требует идентификатора сообщения, чтобы прикрепить правильные условия, к правильной таксономии с правильным сообщением.

 //add_action('plugins_loaded', 'newpost'); # will not work, user not authenticated add_action('init', 'newpost'); // will work, user authenticated function newpost() { if (isset($_POST['new_post']) == '1') { $post_title = $_POST['posttitle']; $post_content = $_POST['postcontent']; $taxonomy = 'cars'; //change accordingly... $terms = $_POST['tax_terms']; //change accordingly... $new_post = array( 'ID' => '', 'post_author' => 1, 'post_type' => 'cars', 'post_content' => $post_content, 'post_title' => $post_title, 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_status' => 'publish', ); $post_id = wp_insert_post($new_post); //$terms can be an array of term IDs/slugs //$taxonomy is your taxonomy name, eg cars wp_set_object_terms( $post_id, $terms, $taxonomy ); } }