从帖子编辑页面的自定义帖子类型中选择
问题描述:
在WordPress中,我有一个自定义帖子类型的“视频”。现在在编辑(常规)帖子页面上,我希望有一个“精选视频”字段,允许我从自定义帖子类型的“视频”的所有视频中选择视频。从帖子编辑页面的自定义帖子类型中选择
我从哪里开始?注:请不要插件。
答
简单的方法:
创建自定义字段(通过点击编辑页面的右上角的角落屏幕选项启用自定义字段),并用的ID值称之为“featuredVideo”您要链接到的视频。
然后在你的一个帖子模板调用像这样:
<?php
$fvID = get_post_meta(get_the_ID(), 'featuredVideo', true);
?>
<a href="<?php echo get_permalink($fvID); ?>">Check out the Featured Video!</a>
最佳途径:
您可以Add A Meta Box到您的文章编辑器,一个简单的下拉菜单,从类型视频的所有帖子选择。这需要在你的functions.php中有相当一部分代码,并且你仍然需要将信息存储为元数据,但是它为你提供了一个干净的界面来处理,而且你不再需要跟踪ID来完成它工作。
的functions.php -
add_action('add_meta_boxes', 'add_featured_video_meta');
add_action('save_post', 'save_featured_data');
function add_featured_video_meta()
{
add_meta_box(
'featured_video_meta',
'Add Featured Video',
'featured_video_inner',
'post',
'side'
);
}
function featured_video_inner($post)
{
wp_nonce_field(basename(__FILE__), 'featured_video_nonce');
$q = new WP_Query(array('post_type'=>'video', 'posts_per_page'=>-1));
?>
<label for="featuredVideo">Select a Video: </label>
<select name="featuredVideo">
<option value="0">Select a Video</option>
<?php
if($q->have_posts()) : while($q->have_posts()) : $q->the_post();
$selected = get_post_meta($post->ID, 'featuredVideo', true) === get_the_ID() ? ' selected="selected"' : '';
echo '<option value="'.get_the_ID().'"'.$selected.'>'.get_the_title().'</option>';
endwhile;endif;
?>
</select>
<?php
}
function save_featured_data($post_id)
{
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
if(!wp_verify_nonce($_POST['featured_video_nonce'], basename(__FILE__)))
return;
if(!current_user_can('edit_post', $post_id))
return;
update_post_meta($post_id, 'featuredVideo', $_POST['featuredVideo']);
}
上面的例子是未经检验的,所以我不能保证它会工作直接出了大门,但最困难的部分基本上为你做了,如果是这样的你想采取的方法。一旦你得到你的定制Meta Box的工作,你可以在第一个示例中使用完全一样的方式引用单个发布模板中的发布元数据。
只要玩它,看看什么最适合你。
如果我添加脚本并转到编辑页面,那么选择框在那里,但内容是错误的。它添加了大约120 000次的以下行:''。 – Ben 2012-08-19 12:50:47
这个问题可以通过改变'$ q-> the_post;'到'$ q-> the_post();'现在接下来就是如果我选择一个视频,保存这个帖子,那么这个视频就不会被选中了在下拉菜单中? – Ben 2012-08-19 13:23:45
现在可以通过将'get_post_meta($ post-> ID,'featuredVideo')''改成'get_post_meta($ post-> ID,'featuredVideo',true)'来解决这个问题。 – Ben 2012-08-19 13:37:00