Не получается установить категорию при добавлении поста — 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.