Отправка пользовательских типов сообщений с настраиваемыми полями из формы Front-end

Я пытаюсь создать специальную запись с двумя настраиваемыми полями. Теперь у меня есть рабочие пользовательские типы сообщений и рабочая форма в интерфейсе через страницу шаблона. Проблема в том, что я не могу заставить настраиваемое поле работать , а это означает, что настраиваемое поле не может быть сохранено в форме front-end или не отображать значение настраиваемого поля на странице single.php. Теперь я могу отправлять сообщения из front-end только с заголовком и контентом.

Вот пользовательские типы сообщений и форма, которые у меня есть в functions.php

function ty_post_type_init() { $labels = array( 'name' => _x('Betting Tips', 'the custom posts', 'your_text_domain'), 'singular_name' => _x('Betting Tips', 'the custom post', 'your_text_domain'), 'add_new' => _x('Add New', 'custom_posts', 'your_text_domain'), 'add_new_item' => __('Add New Betting Tips', 'your_text_domain'), 'edit_item' => __('Edit Betting Tips', 'your_text_domain'), 'new_item' => __('New Betting Tips', 'your_text_domain'), 'all_items' => __('All Betting Tips', 'your_text_domain'), 'view_item' => __('View Betting Tips', 'your_text_domain'), 'search_items' => __('Search Betting Tips', 'your_text_domain'), 'not_found' => __('No betting tips found', 'your_text_domain'), 'not_found_in_trash' => __('No betting tips found in Trash', 'your_text_domain'), 'parent_item_colon' => '', 'menu_name' => __('Betting Tips', 'your_text_domain') ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => _x( 'custom_posts', 'URL slug', 'your_text_domain' ) ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => null, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ) ); register_post_type('custom_posts', $args); flush_rewrite_rules(); } add_action( 'init', 'ty_post_type_init' ); function ty_front_end_form() { ?> <form id="custom-post-type" name="custom-post-type" method="post" action=""> <p> <label for="title">Post Title</label><br /> <input type="text" id="title" value="" tabindex="1" size="20" name="title" /> </p> <p> <label for="custom_field_one">Custom Field</label> <input type="text" value="" id="custom_field_one" size="60" tabindex="20" name="custom_field_one"> <p> <p> <label for="description">Post Description</label><br /> <textarea id="description" tabindex="3" name="description" cols="50" rows="6"></textarea> </p> <p> <?php wp_dropdown_categories( 'show_option_none=Category&tab_index=4&taxonomy=category' ); ?> </p> <p> <label for="post_tags">Post Tags</label> <input type="text" value="" tabindex="5" size="16" name="post-tags" id="post-tags" /> </p> <p align="right"> <input type="submit" value="Publish" tabindex="6" id="submit" name="submit" /> </p> <input type="hidden" name="post-type" id="post-type" value="custom_posts" /> <input type="hidden" name="action" value="custom_posts" /> <?php wp_nonce_field( 'name_of_my_action','name_of_nonce_field' ); ?> </form> <?php if( $_POST ){ ty_save_post_data(); } } add_shortcode('custom_posts','ty_front_end_form'); function ty_save_post_data() { if ( empty($_POST) || !wp_verify_nonce($_POST['name_of_nonce_field'],'name_of_my_action') ) { print 'Sorry, your nonce did not verify.'; exit; } else { if (isset ($_POST['title'])) { $title = $_POST['title']; } else { echo 'Please enter a title'; exit; } if (isset ($_POST['description'])) { $description = $_POST['description']; } else { echo 'Please enter the content'; exit; } if (isset($_POST['post_tags'])){ $tags = $_POST['post_tags']; } else { $tags = ""; } $custom_field_one = $_POST['custom_field_one']; $post = array( 'post_title' => wp_strip_all_tags( $title ), 'post_content' => $description, 'post_category' => $_POST['cat'], 'custom_field_one' => $custom_field_one, // 'tags_input' => $tags, 'post_status' => 'publish', 'post_type' => custom_posts ); wp_insert_post($post); $location = home_url(); echo "<meta http-equiv='refresh' content='0;url=$location' />"; exit; } // end IF } 

и затем я создал шаблон страницы custom-form.php

 <?php /** * Template Name: My Custom Form */ get_header(); ty_front_end_form(); get_footer(); ?> 

И это моя страница single.php :

 <h1 class="single-post-title"><?php esc_html(the_title()); ?></h1> <div class="my-single-content"> <?php esc_html(the_content()); ?> </div> <div class="custom-field-one"> <?php echo get_post_meta($post->ID, "custom_field_one", true); ?> </div> 

Пожалуйста, помогите мне получить значение настраиваемого поля в single.php через форму интерфейса.

Большое спасибо!

Solutions Collecting From Web of "Отправка пользовательских типов сообщений с настраиваемыми полями из формы Front-end"

Я не понимаю, почему вы зарегистрировали короткий код, если вы его не используете. Код вашего custom-form.php может быть:

 <?php /** * Template Name: My Custom Form */ get_header(); echo do_shortcode('custom_posts'); get_footer(); ?> 

Теперь вернемся к вашему вопросу, как сохранить и / или получить значение настраиваемого поля. Ну, ваш метод сохранения значения настраиваемого поля (мета) абсолютно неверен. Интересно, что вы получили в результатах поиска при поиске соответствующего запроса, или вы даже искали?

Чтобы сохранить значение post_meta , сначала получите идентификатор вновь созданного сообщения и сохраните значение настраиваемого поля. Чтобы сделать ответ короче, я включу только соответствующий код

 $post = array( 'post_title' => wp_strip_all_tags( $title ), 'post_content' => $description, 'post_category' => $_POST['cat'], 'tags_input' => $tags, 'post_status' => 'publish', 'post_type' => 'custom_posts' ); $post_id = wp_insert_post($post); add_post_meta( $post_id, 'custom_field_one', $custom_field_one, false ); 

Вы также можете сделать это

 $post = array( 'post_title' => wp_strip_all_tags( $title ), 'post_content' => $description, 'post_category' => $_POST['cat'], 'tags_input' => $tags, 'post_status' => 'publish', 'post_type' => 'custom_posts', 'meta_input' => array( 'custom_field_one' => $custom_field_one ) ); $post_id = wp_insert_post($post); 

Отказ от ответственности: я не уверен в остальной части кода, но только помогал в том, что было задано.