WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Не получается установить категорию при добавлении поста — 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 ); 
0
2Bros
2 месяца назад
  • 0
    Kama7144

    Так происходит потому что на момент срабатывания функции wp_set_object_terms() таксономия еще не зарегистрировалась.

    add_action( 'init', 'publish_blog_frontend', 0 );

    Ты все это дело запускаешь на хуке с приоритетом 0. А такса очевидно регается на том же хуке с приоритетом 10 (дефолтным). Вот и получается что таксы нет, а ты к ней прикрепляешь...

    Правильнее всего будет повесить обработку на хук wp_loaded.

    Комментировать
  • 0

    Попробуйте так:

    $rr = 73;
    $rr = array( $rr );
    $rr = array_map('intval', $rr );
    wp_set_object_terms( $post_id,  $rr, 'bcategories');
    2Bros 2 мес назад

    Пробовал. Все равно не выбирает категорию)

    qwert555 2 мес назад

    фиг знает тогда, у меня работает.
    поменяйте add_action( 'init',
    на add_action( 'wp',

    2Bros 2 мес назад

    Спасибо за помощь)) Заработало после того как сменил init на wp mosking

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация