当用户在自定义元框中输入YouTube/Vimeo视频ID时,如何在自定义帖子类型上显示它?

时间:2013-09-25 作者:Neelam Khan

我创建了一个2x短代码,当用户在其中输入视频id时,它会显示youtube视频和vimeo视频,例如:[youtube id=”“][vimeo id=”“]。

我没有在帖子中输入这个,而是尝试创建一个自定义元框,用户可以在其中输入id,然后显示出来。

到目前为止,我已经能够创建一个插件来显示元框,但我不知道如何让它保存youtube/vimeo ID并显示视频。

我需要2个不同的元盒吗?一个用户可以输入youtube视频ID,另一个可以输入vimeo ID,然后显示在前端?

我为meta box编写的代码是:

add_action( \'add_meta_boxes\', \'cd_meta_box_add\' );
function cd_meta_box_add()
{
    add_meta_box( \'my-meta-box-id\', \'Enter Video ID\', \'cd_meta_box_cb\', \'videos\', \'normal\', \'high\' );
}

function cd_meta_box_cb( $post )
{
    $video_type = get_post_meta($post->ID,\'my_video_type\',true);
    $video_id = get_post_meta($post->ID,\'my_meta_box_text\',true);
    wp_nonce_field( \'my_meta_box_nonce\', \'meta_box_nonce\' );

    ?>
    <p>
        <label for="my_meta_box_text">Select video type:</label>
         <!-- added select for selecting vedio type -->
        <select name="my_video_type" id="my_video_type">  
            <option <?php echo ($video_type == \'youtube\') ? "selected=\'selected\'" : "" ;?> value="youtube">Youtube</option>
            <option <?php echo ($video_type == \'vimeo\') ? "selected=\'selected\'" : "" ;?> value="vimeo">Vimeo</option>
        </select>
        <!-- added select for selecting vedio type -->
    </p>

    <p>
        <label for="my_meta_box_text">Youtube/Vimeo ID:</label>
        <input type="text" name="my_meta_box_text" id="my_meta_box_text" value="<?php echo $video_id; ?>" />
    </p>



    <?php   
}


add_action( \'save_post\', \'cd_meta_box_save\' );
function cd_meta_box_save( $post_id )
{
    // Bail if we\'re doing an auto save
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;

    // if our nonce isn\'t there, or we can\'t verify it, bail
    if( !isset( $_POST[\'meta_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'meta_box_nonce\'], \'my_meta_box_nonce\' ) ) return;

    // if our current user can\'t edit this post, bail
    if( !current_user_can( \'edit_post\' ) ) return;

    // now we can actually save the data
    $allowed = array( 
        \'a\' => array( // on allow a tags
            \'href\' => array() // and those anchords can only have href attribute
        )
    );

    // Probably a good idea to make sure your data is set
    if( isset( $_POST[\'my_meta_box_text\'] ) )
        update_post_meta( $post_id, \'my_meta_box_text\', wp_kses( $_POST[\'my_meta_box_text\'], $allowed ) );


}
?>
单件。php我需要运行一个查询,根据用户在元框中输入的内容显示视频。我的代码是:

<?php global $post; ?>
<?php


                        if(get_post_meta($post->ID,\'my_video_type\',true) == "youtube"){
                            $youtube_id = get_post_meta($post->ID,\'my_meta_box_text\',true);     
                            }
                            if(get_post_meta($post->ID,\'my_video_type\',true) == "vimeo"){
                                $vimeo_id = get_post_meta($post->ID,\'my_meta_box_text\',true);   
                            }





   ?>
但是,这不会显示任何内容。我一直在努力解决这个问题。如果有人能帮忙,我们将不胜感激。提前谢谢。

1 个回复
SO网友:Rahil Wazir

你有自定义的帖子类型视频吗?如果没有更改videospost

add_meta_box( \'my-meta-box-id\', \'Enter Video ID\', \'cd_meta_box_cb\', \'post\', \'normal\', \'high\' );
你的代码很好,但你没有保存视频类型选择框,只是更新了id输入字段。

将此代码放入add_action(\'save_post\', \'cd_meta_box_save\');

if( isset( $_POST[\'my_meta_box_text\'] ) && isset( $_POST[\'my_video_type\'] ) ) {
        update_post_meta( $post_id, \'my_meta_box_text\', wp_kses( $_POST[\'my_meta_box_text\'], $allowed ) );
        update_post_meta( $post_id, \'my_video_type\', strip_tags($_POST[\'my_video_type\']) );
    }
它还将保存您选择的视频类型,然后使用以下代码尝试回显。

EDITED:

global $post;
if (get_post_meta($post->ID, \'my_video_type\', true) == "youtube") {
    echo do_shortcode(\'[youtube id="\'.get_post_meta($post->ID, \'my_meta_box_text\', true).\'"]\');
}
if (get_post_meta($post->ID, \'my_video_type\', true) == "vimeo") {
    echo do_shortcode(\'[vimeo id="\'.get_post_meta($post->ID, \'my_meta_box_text\', true).\'"]\');
}
Youtube和Vimeo短代码:

function wp_youtube_video($atts) {
    extract(shortcode_atts(array(\'id\' => \'\'), $atts));
    return \'<iframe title="YouTube video player" class="youtube-player" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/\'.$id.\'" frameborder="0" allowFullScreen></iframe>\';
}

add_shortcode(\'youtube\', \'wp_youtube_video\');

    function wp_vimeo_video($atts) {
        extract(shortcode_atts(array(\'id\' => \'\'), $atts));
        return \'<iframe src="http://player.vimeo.com/video/\'.$id.\'" width="WIDTH" height="HEIGHT" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>\';
    }
    add_shortcode(\'vimeo\', \'wp_vimeo_video\');

结束

相关推荐

Override Wordpress theme url

我有一个网站http://example.com, 但如果我将我的网站URL更改为http://example.co.uk 或http://examplesite.co.uk 这些都是相同的站点。如果我更改了上述url中的任何内容,它应该覆盖主题url。当前,它是从数据库值显示的。我用过define(\'WP_HOME\', \'http://\' . $_SERVER[\'HTTP_HOST\'] ); define(\'WP_SITEURL\', \'http://\' . $