2017-02-09 2 views
1

Я зарегистрировал 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> 

Даже с набором действий для конкретной страницы, почему я прыгаю вернуться на главную страницу без сохранения каких-либо данных?

+0

Попробуйте с другим именем переменной не '$ пост = массив (..)'. Например: wp_insert_post ($ postarr); ' – htmlbrewery

+0

Просто попробовал свои советы. Не повезло! :( –

+0

У меня есть сомнения. Добавлен '$ url ="/add-song "; wp_redirect ($ url); exit();' в нижней части 'save_song', но он всегда перенаправляет меня на домашнюю страницу. функция, вызываемая вообще? Как я могу проверить? Является ли 'add_action ('save_post', 'save_song')' working? –

ответ

1

Все формы элементы всегда должны иметь префикс чего-то уникального для предотвращения столкновений. В вашей форме мы помещаем общий префикс «post_», и она работает:

Try ниже код:

На той же странице вы можете получить поле формы и вставить в БД:

вы можете в дальнейшем использовать созданный пост id для сохранения пользовательских мета.

if($_POST['post_submit']=='Submit'){ 
     ; 
$id = wp_insert_post(array('post_title'=>$_POST['post_title'], 'post_type'=>'fav_songs', 'post_content'=>$_POST['post_desc'],'post_status' => 'publish','comment_status' => 'closed','ping_status' => 'closed')); 
     } 



<form id="song-entry" name="post_entry" method="post" action="<?php echo get_page_link('your template id') ?>"> 
<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="post_type" /> 
    <input type="hidden" name="post_action" id="post_action" value="post_action" /> 
</p> 
<p> 
    <input type="submit" name="post_submit" value="Submit" /> 
</p> 
<?php wp_nonce_field('new_song_nonce'); ?> 

+0

Спасибо за ваш ответ. Я обновил мою страницу соответственно, но результат все тот же! Он перескакивает на домашнюю страницу и ничего не хранится в БД. Теперь у него нет функции, no 'add_action' в' functions.php'. Я обновил свой вопрос с помощью модифицированного кода. Что я делаю неправильно? –

+0

Заменить скрытый файл следующим кодом: " –

+0

Наконец :) Ash Вы спасли мне жизнь! –

Смежные вопросы