我创建了一个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);
}
?>
但是,这不会显示任何内容。我一直在努力解决这个问题。如果有人能帮忙,我们将不胜感激。提前谢谢。
SO网友:Rahil Wazir
你有自定义的帖子类型视频吗?如果没有更改videos 到post
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\');