我已经在functions.php
中注册了名为fav_songs
的custom 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_posts
和wp_postmeta
中没有任何值得保存。现在我只想在wp_posts
表中存储title
和description
表,并且在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>
即使设置为特定的网页,为什么我跳回到主页不保存任何数据的动作?
尝试与其它变量名不'$交=阵列(..)'。例如'wp_insert_post($ postarr);' – htmlbrewery
刚刚试过你的建议。没有运气! :( –
我有疑问,在'save_song'函数的底部添加了'$ url =“/ add-song”; wp_redirect($ url); exit();'但它总是将我重定向到主页。函数被调用了吗?我怎么检查?add_action('save_post','save_song')'工作吗? –