Не получается установить категорию при добавлении поста — wp_set_object_terms()
Устал уже я искать решение проблемы. Дело собственно вот в чем. Делаю фронт-енд форму добавления постов, имеется заголовок поля, категории, и описание поста. При нажатии на Добавить - все создается как нужно но категория не выбирается. То есть пост остается без категории. Что делать то?
wp_set_object_terms не работает, даже пробовал прописывать id категории в ручную туда но он усиленно не выбирает категорию.
Вот мой код из function.php
function publish_blog_frontend(){ $postTitleError = ''; if( isset( $_POST[ 'submitted' ] ) && isset( $_POST[ 'post_nonce_field' ] ) && wp_verify_nonce( $_POST[ 'post_nonce_field' ], 'post_nonce' ) ){ if( trim( $_POST[ 'postTitle' ] ) === '' ){ $postTitleError = 'Введите название!'; $hasError = true; } else { $postTitle = trim( $_POST[ 'postTitle' ] ); } $keys = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'gamename', ), array( 'key' => 'blog_preview', ), ), ); $post_information = array( 'post_title' => esc_attr( strip_tags( $_POST[ 'postTitle' ] ) ), 'post_content' => esc_attr( strip_tags( $_POST[ 'content' ] ) ), 'post_type' => 'post', 'meta_key' => '$keys', 'post_status' => 'publish', ); $parent_cat = (int) $_POST[ 'categoriesb' ]; $post_id = wp_insert_post( $post_information ); wp_set_object_terms( $post_id, 73, 'bcategories' ); $post_id = update_post_meta( $post_id, 'gamename', sanitize_text_field( $_REQUEST[ 'gamename' ] ) ); $post_id = update_post_meta( $post_id, 'blog_preview', sanitize_text_field( $_REQUEST[ 'blog_preview' ] ) ); if( $post_id ){ wp_redirect( home_url() ); exit; } } } add_action( 'init', 'publish_blog_frontend', 0 );
Так происходит потому что на момент срабатывания функции wp_set_object_terms() таксономия еще не зарегистрировалась.
Ты все это дело запускаешь на хуке с приоритетом 0. А такса очевидно регается на том же хуке с приоритетом 10 (дефолтным). Вот и получается что таксы нет, а ты к ней прикрепляешь...
Правильнее всего будет повесить обработку на хук wp_loaded.