0

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

我从哪里开始?

PS:请不要使用插件。

4

1 回答 1

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>

最佳方式

您可以使用简单的下拉菜单将元框添加到您的帖子编辑器,以从所有视频类型的帖子中进行选择。这将需要在您的functions.php中有相当大的代码块,您仍然需要将信息存储为元数据,但它为您提供了一个干净的界面来使用,您不再需要跟踪ID来制作它工作。

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

随便玩玩,看看什么最适合你。

于 2012-08-14T14:13:14.617 回答