Форма представления на лицевой стороне не прикрепляет пользовательский тип сообщения

Эта сторона WordPress для меня совершенно новая, но также чрезвычайно важна. Я создал форму, которая позволяет мне загружать страницу со всеми параметрами, которые мне нужны, однако пользовательская таксономия не назначена на страницу. Тем не менее, мне нужно сбрасывать все термины в моих пользовательских таксономических «стенах», чтобы пользователь мог выбрать этот термин и назначить ему сообщение. Я googled и искал в обмене стека, и все же ни один из примеров кода, которые я нашел, не сработал для меня. Я пробовал код с категориями, и он отлично работает.

Код:

<?php if ( is_user_logged_in() ) { ?> <?php $postTitleError = ''; if(isset($_POST['submitted']) && isset($_POST['post_nonce_field']) && wp_verify_nonce($_POST['post_nonce_field'], 'post_nonce')) { if(trim($_POST['postTitle']) === '') { $postTitleError = 'Please enter a title.'; $hasError = true; } else { $postTitle = trim($_POST['postTitle']); } $post_information = array( 'post_title' => esc_attr(strip_tags($_POST['postTitle'])), 'post_content' => esc_attr(strip_tags($_POST['postContent'])), 'post_type' => 'page', 'page_template' => 'Review.php', 'post_status' => 'pending', 'tax_input' => array( 'walls' => array( $_POST['pickWall'] ) ), ); $post_id = wp_insert_post($post_information); if($post_id) { // Update Custom Meta update_post_meta($post_id, 'product_aesthetics', esc_attr(strip_tags($_POST['product_aesthetics_meta']))); wp_redirect(home_url()); exit; } } ?> <?php get_header(); ?> <!-- #primary BEGIN --> <div id="primary"> <form action="" id="primaryPostForm" method="POST"> <fieldset> <label for="postTitle"><?php _e('Post\'s Title:', 'framework') ?></label> <input type="text" name="postTitle" id="postTitle" value="<?php if(isset($_POST['postTitle'])) echo $_POST['postTitle'];?>" class="required" /> </fieldset> <?php if($postTitleError != '') { ?> <span class="error"><?php echo $postTitleError; ?></span> <div class="clearfix"></div> <?php } ?> <fieldset> <label for="postContent"><?php _e('Post\'s Content:', 'framework') ?></label> <textarea name="postContent" id="postContent" rows="8" cols="30"><?php if(isset($_POST['postContent'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['postContent']); } else { echo $_POST['postContent']; } } ?></textarea> </fieldset> <fieldset> <label for="product_aesthetics_meta"><?php _e('Product Aesthetics Meta:', 'framework') ?></label> <textarea name="product_aesthetics_meta" id="product_aesthetics_meta" rows="8" cols="30"><?php if(isset($_POST['product_aesthetics_meta'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['product_aesthetics_meta']); } else { echo $_POST['product_aesthetics_meta']; } } ?></textarea> </fieldset> <fieldset> <label for="pickWall">Type of wall</label> <select name="pickWall"> <?php // ======= Custom post types category drop down ======== $taxonomy = 'walls'; $terms = get_terms($taxonomy); // Get all terms of a taxonomy if ( $terms && !is_wp_error( $terms ) ) : foreach ( $terms as $term ) { echo '<option value="' . get_term_link($term->slug, $taxonomy) . '">' . $term->name . '</option>'; } endif; ?> </select> </fieldset> <fieldset> <?php wp_nonce_field('post_nonce', 'post_nonce_field'); ?> <input type="hidden" name="submitted" id="submitted" value="true" /> <button type="submit"><?php _e('Add Post', 'framework') ?></button> </fieldset> </form> </div><!-- #primary END --> <?php } ?> 

Во-первых, вы должны изменить имена полей ввода на нечто уникальное. category – это запрос WordPress var, поэтому отправка формы с таким именем может иметь неожиданные результаты.

При этом post_category относится только к таксономии category , пользовательские таксономии должны использовать параметр tax_input .

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

'tax_input': эквивалентно вызову wp_set_post_terms () для каждой пользовательской таксономии в массиве. Если у текущего пользователя нет возможности работать в таксономии, вы должны использовать wp_set_object_terms ().

РЕДАКТИРОВАТЬ-

для поля выбора вы можете вывести идентификатор термина в качестве значения параметра:

 <?php // ======= Custom post types category drop down ======== $taxonomy = 'walls'; $terms = get_terms($taxonomy); // Get all terms of a taxonomy if ( $terms && !is_wp_error( $terms ) ) : foreach ( $terms as $term ) { echo '<option value="' . $term->term_id . '">' . $term->name . '</option>'; } endif; ?> 

Затем, когда вы вставляете сообщение:

 'tax_input' => array( 'walls' => array( $_POST['your_tax_field'] ) )