从帖子编辑页面上的自定义帖子类型中进行选择

时间:2012-08-14 13:14:39

标签: wordpress custom-post-type

在WordPress中,我有一个自定义的后期类型“视频”。现在在编辑(常规)帖子页面上,我希望有一个“精选视频”字段,允许我从自定义后期类型“视频”的所有视频中选择一个视频。

我从哪里开始?

PS:请不要使用插件。

1 个答案:

答案 0 :(得分:2)

简单方法

创建自定义字段(通过单击编辑页面右上角的“屏幕选项”启用“自定义字段”),并将其命名为“featuredVideo”,其值为您要链接的视频的ID。

然后在您的单个帖子模板中调用,如下所示:

<?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工作,您就可以使用我在第一个示例中使用的完全相同的方式在单个帖子模板中引用帖子元数据。

只需玩弄它,看看什么最适合你。