Я зарегистрировал custom post type
по имени fav_songs
в functions.php
. Он имеет три метабокса, определенные - Исполнитель, Жанр и Год выпуска. Я могу сохранить данные из интерфейса администратора. Теперь я хочу сделать подобное с передней стороны.Как сохранить пользовательский тип сообщения с обменными знаками с лицевой стороны
Для этого я сначала создал следующий файл шаблона:
<?php
/* Template Name: Song Entry Form */
get_header();
?>
<form id="song-entry" name="song-entry" method="post" action="">
<p>
<label>Title</label><br />
<input type="text" id="song_title" name="song_title" />
</p>
<p>
<label>Description</label><br />
<input type="text" id="song_desc" name="song_desc" />
</p>
<p>
<label>Artist</label><br />
<input type="text" id="song_artist" name="song_artist" />
<input type="hidden" name="post_type" id="post_type" value="post" />
<input type="hidden" name="action" value="post" />
</p>
<p>
<input type="submit" value="Submit" />
</p>
<?php wp_nonce_field('new_song_nonce'); ?>
</form>
<?php
function save_song()
{
if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['action'])) {
if (!isset($_POST['new_song_nonce'])) {
return;
}
if (!isset($_POST['song_title'])) {
return;
}
if (!isset($_POST['song_desc'])) {
return;
}
$post = array(
'post_title' => $_POST['song_title'],
'post_content' => $_POST['song_desc'],
'post_type' => 'fav_songs'
);
wp_insert_post($post);
update_post_meta($post->ID, '_song_artist_name', $_POST['song_artist']);
}
}
?>
<?php
get_footer();
?>
В моей functions.php
я подключил save_post
действия для save_song
.
add_action('save_post', 'save_song');
затем я добавил page
в админ и использовал вышеуказанный файл шаблона. Когда страница отображает все поля вверх. Но когда я ударил submit
, ничего не сохраняется в wp_posts
и wp_postmeta
. На данный момент я хочу хранить только title
и description
в wp_posts
таблица и метаданные artist
в wp_postmeta
стол.
Что-то пошло не так в моем подходе, но я не знаю, что! Я начал изучать WordPress недавно и не имею много знаний, чтобы разобраться в этом. Пожалуйста помоги!
UPDATE (модифицированный шаблон страницы код)
<?php
/* Template Name: Song Entry Form */
get_header();
if($_POST['post_submit'] == 'Submit') {
$args = array(
'post_title' => $_POST['post_title'],
'post_content' => $_POST['post_desc'],
'post_type' => 'fav_songs',
'post_status' => 'publish',
'comment_status' => 'closed',
'ping_status' => 'closed'
);
$pid = wp_insert_post($args);
add_post_meta($pid, "_song_artist", $_POST['post_artist']);
}
?>
<form id="post_entry" name="post_entry" method="post" action="<?php echo get_page_link('354') ?>">
<p>
<label>Title</label><br />
<input type="text" id="post_title" name="post_title" />
</p>
<p>
<label>Description</label><br />
<input type="text" id="post_desc" name="post_desc" />
</p>
<p>
<label>Artist</label><br />
<input type="text" id="post_artist" name="post_artist" />
<input type="hidden" name="post_type" id="post_type" value="fav_songs" />
<input type="hidden" id="post_action" name="post_action" value="post" />
</p>
<p>
<input type="submit" name="post_submit" value="Submit" />
</p>
<?php wp_nonce_field('new_song_nonce'); ?>
</form>
<?php
get_footer();
?>
Я проверил View Source
. Теперь форма оказывает как:
<form id="post-entry" name="post-entry" method="post" action="http://local.tourplanner.com/add-song/">...</form>
Даже с набором действий для конкретной страницы, почему я прыгаю вернуться на главную страницу без сохранения каких-либо данных?
Попробуйте с другим именем переменной не '$ пост = массив (..)'. Например: wp_insert_post ($ postarr); ' – htmlbrewery
Просто попробовал свои советы. Не повезло! :( –
У меня есть сомнения. Добавлен '$ url ="/add-song "; wp_redirect ($ url); exit();' в нижней части 'save_song', но он всегда перенаправляет меня на домашнюю страницу. функция, вызываемая вообще? Как я могу проверить? Является ли 'add_action ('save_post', 'save_song')' working? –