Я новичок в WordPress, поэтому извиняюсь, если мой вопрос выглядит глупо.WordPress: Custom Post Type Постоянная ссылка забрала меня на домашнюю страницу
Я разработал следующую специальную форму, чтобы опубликовать конкретный тип сообщения story
с переднего конца. Проблема, с которой я столкнулась, - это постоянная ссылка, которая автоматически генерируется. Когда я пытаюсь получить доступ к странице, он возвращает меня на домашнюю страницу. У меня есть настраиваемая страница single-story.php
, созданная для моего типа сообщения, который, как я думал, будет доступен автоматически, но это не так.
<?php
/* Post type: story */
add_shortcode('story', 'trip_story_form_builder_shortcode');
function trip_story_form_builder_shortcode(){
if($_POST['story'] == 'submit' && !empty($_POST['action'])){
//echo 'Ok';
}
if(isset($_POST['txtTitle'])){
$title = $_POST['txtTitle'];
} else {
//echo 'Please add a description';
} ?>
<!-- form starts -->
<form method="post" name="story_form" action="" id="story_form">
<div class="text-small">
<div class="row margin-top-10">
<div class="col-md-12">
Story Title <i class="text-red">*</i>
<input type="text" class="form-control" id="txtTitle" name="txtTitle" maxlength="75" required />
</div>
</div>
<div class="row margin-top-10">
<div class="col-md-12">
Story <i class="text-red">*</i>
<div class="margin-top-5"></div>
<?php
$content = '';
$editor_id = 'txtStory';
$settings = array(
'textarea_name'=> 'txtStory',
'quicktags' => false,
'media_buttons' => true,
'teeny' => false,
'tinymce' => array(
'toolbar1'=> 'bold,italic,underline,bullist,link,unlink,forecolor,undo,redo'
)
);
wp_editor($content, $editor_id, $settings);
?>
</div>
</div>
<div class="row margin-top-10">
<div class="col-md-8">
Time of visit:
<div class="row margin-top-5">
<div class="col-md-6">
Year<i class="text-red">*</i>
<input type="text" class="form-control" id="txtYear" name="txtYear" maxlength="4" required />
</div>
<div class="col-md-6">
Month<i class="text-red">*</i>
<select id="cboMonth" name="cboMonth" class="form-control" required>
<option value="">-</option>
<option value="January">January</option>
<option value="February">February</option>
<option value="March">March</option>
<option value="April">April</option>
<option value="May">May</option>
<option value="June">June</option>
<option value="July">July</option>
<option value="August">August</option>
<option value="September">September</option>
<option value="October">October</option>
<option value="November">November</option>
<option value="December">December</option>
</select>
</div>
</div>
</div>
<div class="col-md-4">
<div class="row margin-top-25">
<div class="col-md-12">
No. of heads <i class="text-red">*</i>
<input id="txtHeads" name="txtHeads" type="number" maxlength="3" class="form-control" required />
</div>
</div>
</div>
</div>
<div class="row margin-top-10">
<div class="col-md-12">
Places visited <i class="text-red">*</i>
<input type="text" class="form-control" id="txtPlaces" name="txtPlaces" maxlength="300" required placeholder="Enter name of the places you visited. Separate places by comma(,)" />
</div>
</div>
<div class="row margin-top-10">
<div class="col-md-6">
Category <i class="text-red">*</i>
<?php
$args = array(
'show_option_all' => '',
'show_option_none' => '',
'option_none_value' => '',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 0,
'hide_empty' => 1,
'child_of' => 0,
'exclude' => '',
'include' => '',
'echo' => 1,
'selected' => 0,
'hierarchical' => 0,
'name' => 'cboCategory',
'id' => 'cboCategory',
'class' => 'form-control',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => 'category',
'hide_if_empty' => true,
'value_field' => 'term_id',
);
wp_dropdown_categories($args);
?>
</div>
<div class="col-md-6">
Total Trip cost <i class="text-red">*</i>
<input type="number" id="txtCost" name="txtCost" required maxlength="6" class="form-control" />
</div>
</div>
<div class="row margin-top-10">
<div class="col-md-12">
Additional information, if any (max. 600 characters)
<textarea id="txtInfo" name="txtInfo" rows="5" cols="80" maxlength="600" class="form-control" placeholder="For example, name of hotel you stayed, name and phone numebr of your cab driver etc."></textarea>
</div>
</div>
<div class="row margin-top-20">
<div class="col-md-12">
<input type="hidden" name="story" value="submit" />
<input type="hidden" name="action" value="new_story" />
<?php wp_nonce_field('new_story'); ?>
<input type="submit" value="Submit Trip Report" class="btn btn-primary text-medium-small">
</div>
</div>
</div>
</form>
<?php
}
function add_trip_story() {
if($_POST['story']=="submit" && !empty($_POST['action'])) {
$title = $_POST['txtTitle'];
$description = $_POST['txtStory'];
//meta data builder
$visiting_year = $_POST['txtYear'];
$visiting_month = $_POST['cboMonth'];
$no_heads = $_POST['txtHeads'];
$places = $_POST['txtPlaces'];
$trip_cost = $_POST['txtCost'];
$addl_info = $_POST['txtInfo'];
$new_post = array(
'post_title' => $title,
'post_content' => $description,
'post_type' =>'story',
'post_status' => 'publish'
);
//insert the the post into database by passing $new_post to wp_insert_post
$pid = wp_insert_post($new_post);
//We now use $pid (post id) to help add our post meta data
add_post_meta($pid, '_visting_year', $visiting_year, true);
add_post_meta($pid, '_visiting_month', $visiting_month, true);
add_post_meta($pid, '_visiting_heads', $no_heads, true);
add_post_meta($pid, '_visiting_places', $places, true);
add_post_meta($pid, '_visiting_cost', $trip_cost, true);
add_post_meta($pid, '_visting_addl_info', $addl_info, true);
}
}
add_action('init','add_trip_story');
Приведенная выше форма отображает и сохраняет данные в базе данных.
Я хочу загрузить один story
в качестве local.tourplanner.com/story/title-of-the-story. Постоянная ссылка WordPress генерирует http://local.tourplanner.com/winter-vacation-at-auli-a-brief-report/
, который всегда выводит меня на главную страницу.
Но как я могу сказать WordPress использовать определенный шаблон для моего story
типа сообщения. Есть ли способ определить его в приведенном выше коде?
Могу я попросить еще пару вещей, пожалуйста?
Как я могу видеть эти сообщения, созданные пользователями бу внутри
wp-admin
как я не регистрирует этот пост типа, используяregister_post_type
функцию?У меня есть категория выпадающих списков в форме. Как я могу сказать WordPress, чтобы использовать это как подзапись и загружать сообщения, связанные с этой категорией?
Извините, что поставил более одного вопроса в одном сообщении. Я только хотел разместить их в одном месте, потому что они выглядят взаимосвязанными.
UPDATE
Я отказался от идеи хранения данных, как я делал далеко и создал custom post type
путем регистрации его register_post_type
функции.
Функция визуализации формы:
function render_user_story_form() {
$form='<form id="user_story_form" name="user_story_form" action="" method="post">';
$form .= '<div><input type="text" class="form-control" id="_title" name="_title" maxlength="75" required placeholder="Story title" /></div>';
$form .= '<div><textarea id="_description" name="_description" rows="5" cols="80" class="form-control" maxlength="500" required placeholder="Your story here"></textarea></div>';
$form .= '<div><input type="text" class="form-control" id="_places_visited" name="_places_visited" maxlength="100" required placeholder="Places visited during the trip" /></div>';
$form .= '<div><input type="number" class="form-control" id="_trip_cost" name="_trip_cost" maxlength="6" required placeholder="Trip cost" /></div>';
$form .= '<input type="submit" value="Submit" class="btn btn-primary" />';
$form .= '</form>';
echo $form;
}
add_shortcode('new-user-story', 'render_user_story_form');
Ниже приведен фрагмент кода, что я написал для хранения данных в wp_posts
и wp_postmeta
таблиц, но ничего не выходит хранится.
function save_user_story() {
$title = $_POST['_title'];
$description = $_POST['_description'];
$places = $_POST['_places_visited'];
$cost = $_POST['_trip_cost'];
$post = array(
'post_title' => $title,
'post_content' => $description,
'post_type' => 'user_story',
'post_status' => 'publish'
);
$new_post_id = wp_insert_post($post, 10, 1);
add_post_meta($new_post_id, '_places_visited', $places);
add_post_meta($new_post_id, '_trip_cost', $cost);
}
add_action('save_post_user_story', 'save_user_story', 1, 2);
Название моего сообщения типа user_story
.
Ссылка: https://wordpress.stackexchange.com/questions/117269/saving-custom-post-in-custom-form/117331
Если вы считаете иначе, то дайте мне знать. Я хотел бы учиться. –
Что касается хранения и получения данных, то форма работает нормально. Я уже использую 'WP_Query' для извлечения данных для' post_type => 'story'' на моей странице списка. Но я не знаю, как использовать пользовательский шаблон перезаписи без использования функции. На самом деле я попытался создать форму с помощью 'meta_box' и зарегистрировав тип сообщения, но я не мог понять, насколько я еще новичок в WP. Если вы, пожалуйста, присылайте мне ссылку на учебник, которая очень поможет мне. –
Как я могу принести ту же пользовательскую форму ввода типа сообщения, которая была создана с помощью 'register_custom_post_type', в интерфейс? Будет ли «короткий код» делать это? Если да, когда я сохраняю данные, я должен использовать 'wp_insert_post', и это автоматически помещает метаданные в таблицу' wp_postmeta'? Я обдумал это, но не смог найти правильного ответа на него. Не могли бы вы немного объяснить это? –