2017-02-09 47 views
1

我已经在functions.php中注册了名为fav_songscustom post type。它有三个metaboxes定义 - 艺术家,流派和发行年份。我可以保存管理界面的数据。现在我想从前端做类似的事情。我如何使用前端的metabox保存自定义帖子类型

为此,我首先创建了以下模板文件:

<?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_postswp_postmeta中没有任何值得保存。现在我只想在wp_posts表中存储titledescription表,并且在wp_postmeta表中存储元数据artist

我的上述方法肯定出了问题,但我不知道该怎么办!我最近开始学习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

我有疑问,在'save_song'函数的底部添加了'$ url =“/ add-song”; wp_redirect($ url); exit();'但它总是将我重定向到主页。函数被调用了吗?我怎么检查?add_action('save_post','save_song')'工作吗? –

回答

1

所有表格元素应始终以前缀以防止冲突。在您的形式我们把常见的前缀“post_”和它的工作:

试试下面的代码:

在同一页面,您可以获取表单字段,并插入到数据库:

可以进一步利用产生的交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

感谢您的回复,我相应地更新了页面,但结果仍然相同!它跳回主页,没有任何内容存储在数据库中,现在它没有功能,我没有在'functions.php'中添加'add_action'。我用修改过的代码更新了我的问题。我在做什么错? –

+0

用下面的代码替换隐藏的代码“ “ –

+0

最后:)灰你救了我的命! –

相关问题