embed the_content

时间:2012-04-07 作者:orionrush

我正在尝试包装视频URL,并将代码嵌入到一个分类的div中,以便我可以对其进行样式化。vid代码是从我为video post类型设置的自定义元值中提取的。我通过论坛或谷歌找到的任何东西似乎都不能完全回答我的问题。

用例:用户要么在视频元字段中输入youtube url,要么插入整个嵌入代码。无论哪种方式,我都需要将输出包装在一些分类div(fitvid)中。

我是WP的新手,希望有人能解释一下:为什么我在下面的代码中传递给\\u内容的URL没有使用[嵌入]短代码?我该怎么做才能做到呢?

据我所知,我的选择要么让[嵌入]将URL识别为视频并发挥其魔力,要么自己尝试进行检测(这有点超出我的ATM能力范围)。

以下是我目前掌握的情况:

<?    
     $mykey_values = get_post_custom_values(\'_format_video_embed\');
         foreach ( $mykey_values as $key => $value ) {    
            if (!empty($value)) {
            // I can get one or the other to work but not both
            //$var = apply_filters(\'the_content\', "[embed]" . $value . "[/embed]"); 
            //this will only return the url - but why?
            $var = apply_filters(\'the_content\', $value );
            }
            echo "<div id=\'fitvid\'>$var</div>";   
        }  ?>       
      <?php the_content();  ?>  
嘿,提前谢谢你的经验。

3 个回复
SO网友:David

我写了一个非常快速和简单的标记,它很有效--我知道WordPress有一个内置的oEmbed 系统,这不符合它-at all. 然而,如果你能调整一个至少对我有效的解决方案,我不想分享它,那就太傻了。

Sampled Code Notes: 对于这个项目,我必须为videos 这样我的客户就可以很容易地进入并添加带有YouTube视频ID的视频帖子。这些视频是他们公司上市的房子,然后专业地拍摄了视频。他们目前的工作流程正常,视频制作速度约为5-6周/年,可能为13-15个视频/年。

当我不得不开始这个项目时,我当时的理解是,oEmbed并不是我真正需要的,我现在可以in retrospect 遗憾的是,在语法、优雅等方面的争论上做出了决定——尽管在这么长的时间里,它已经足够僵化了,没有失败。

尽管如此,我还使用了Custom Metabox Class 使用get_post_meta 对于视频的ID,我从来没有对输入进行过验证或清理,以防输入的视频不是期望有人发布到自定义帖子类型的videos 事实上,他们不会跳过这一非常简单的步骤<我有时有点过于自信,因此您可能需要根据您的需要添加一些这些东西

Getting Started: 创建`页面-your-custom-post-type.php并输入以下内容:

<?php
/*
 Template Name: Your Template Name
 */

get_header(); 

function customBlogFeed() {

// The Query 
$the_query = new WP_Query( array ( \'post_type\' => \'your-custom-post-type\', \'posts_per_page\' => \'6\' ) ); 
重要的是\'post_type\' => \'your-custom-post-type\' 链接到您的页面-your-custom-post-type.php页面,否则它将不知道输出什么。此外,您可以将更多参数添加到WP_Query array() WP_Query WordPress Codex Page.

// The Loop 
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
  <div class="port">
  <h2 class="smaller">
    <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( \'Permalink to %s\', \'twentyten\' ), the_title_attribute( \'echo=0\' ) ); ?>" rel="bookmark">
      <?php the_title(); ?>
    </a>
    <span style="font-size: 11px;">
      Posted on: <?php the_time(get_option(\'date_format\')); ?> by: <?php echo get_the_author(); ?>
    </span>
   </h2>
默认情况下,WordPress会通过single链接到您的自定义帖子类型。php(如果存在)并回退到索引。php(如果单个)。php不存在。但是,如果创建一个-your-custom-post-type.php WordPress将使用它作为page-template 用于自定义帖子类型。

        <object width="288" height="176">
          <param name="movie" value="http://www.youtube.com/v/<?php $meta = get_post_meta(get_the_ID(), \'sb_metabox_video_url\', true); if (strlen($meta) > 1 ) { echo $meta; } ?>?version=3&rel=0&modestbranding=1&autoplay=0&controls=0"></param>
          <param name="allowFullScreen" value="true"></param>
          <param name="allowscriptaccess" value="always"></param>
             <embed src="http://www.youtube.com/v/<?php $meta = get_post_meta(get_the_ID(), \'sb_metabox_video_url\', true); if (strlen($meta) > 1 ) { echo $meta; } ?>?version=3&rel=0&modestbranding=1&autoplay=0&controls=0" type="application/x-shockwave-flash" width="288" height="176" allowscriptaccess="always" allowfullscreen="true"></embed>
        </object>
oEmbed: 我还将这些参数传递到YouTube:

?version=3&rel=0&modestbranding=1&autoplay=0&controls=0

它告诉它如何设置它渲染的视频播放器的样式。

      <?php the_excerpt(); ?>
      <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( \'Continue reading %s\', \'twentyten\' )); ?>" rel="bookmark"><img src="<?php bloginfo(\'template_directory\') ?>/images/button_more.gif" alt="<?php printf( esc_attr__( \'Continue reading %s\', \'twentyten\' )); ?>" border="0" class="none" style="height: 28px!important; width:55px!important;" /></a>
  </div>

<?php endwhile;

// Reset Post Data
wp_reset_postdata();
}

?>
用你的wp_reset_postdata(); 你有一个页面可以使用WP_Query 要循环通过6个帖子,请使用the_title() the_excerpt 还有一段嵌入式视频。

干杯

SO网友:orionrush

所以我从来没有真正发现为什么要通过apply_filters(\'the_content\', $output), 在嵌入短代码时不进行处理。我仍然希望有人能对此有所了解。

我真的想用亚历克斯·金的post type formats UI 这就是为什么我没有以大卫为榜样。

我最终使用strpos和substr检测输入,因为这似乎是最直接的。如果有人知道更好的方法,或者看到我方法中的一些缺陷,请插话!

<?  // deal with embeds from the _format_video_embed meta meta feild

// allow us to strpos an array
//http://www.webmastertalkforums.com/php-functions/17117-php-strpos-using-array-values-search-needle.html#ixzz1rYKDjUNK 
function strpos_arr($haystack, $needle) { 
    if(!is_array($needle)) $needle = array($needle); 
    foreach($needle as $what) { 
        if(($pos = strpos($haystack, $what))!==false) return $pos; 
    } 
    return false; 
}       
$embedCheck = array("<embed", "<video", "<ifram");// only checking against the first 6

$mykey_values = get_post_custom_values(\'_format_video_embed\');
$content_oembed = \'\';
     foreach ( $mykey_values as $key => $value ) {    
    if (!empty($value)) {
        $firstCar = substr($value, 0, 6); // get the first 6 char 

        if ( strpos($firstCar, "http:/" ) !== false || strpos($firstCar, "https:" ) !== false ){  
             // if its a http(s), send it to wp_oembed to see if the link is oembed enabled, and if not - output a link
            (wp_oembed_get($value) !==false ? $output = \'<div class="oembed" style="width:100%; overflow:hidden;">\' . wp_oembed_get($value) . \'</div>\' : $output =  \'<a href="\' . $value . \'" target="_blank"><button class="btn"><i class="i icon-film"></i>Video link: \' . $value . \'</button></a><hr>\' );
        }       
        else if (strpos_arr($firstCar, $embedCheck ) !== false ){ //if it comes back as an embed, video, or iframe return the full string to the content                 
            //$output = \'<div class="oembed" style="max-width="500px"><p>something funny</p>\' . $value . \'</div>\'; // we\'re wrapping it so we can style it with fitvid
            $content_oembed = $value;                   
        }
        else if( current_user_can(\'publish_posts\') ){// a little error for the editor
                $content_oembed = "<div class=\'alert alert-error\'><strong>Whoops! That embed link or code has problems:</strong></br>";
                $content_oembed .= "URLS should begin with http:// or https:// <br/>";
                $content_oembed .= "Embed code should be wrapped in either &lt;embed&gt;&lt;/embed&gt; &lt;video&gt;&lt;/video&gt; or &lt;iframe&gt;&lt;/iframe&gt; elements.";
                $content_oembed .= "<p class=\'well\'>" . $value . "</p></div>";
            }
        }                       
};
//echo apply_filters(\'the_content\', $content_oembed);   
?>

SO网友:squarecandy

这个问题很老了,但下面是我为Wordpress 4.0提出的+

Wordpress oembed希望将oembed URL存储在数据库中自己的行上,而不使用其他标记。这是唯一可行的方法。尝试将其粘贴到页面或帖子的“文本”选项卡中:

<h2>This Video Won\'t Work:</p>
<div>https://www.youtube.com/watch?v=pWxnGf7isqc</div>
<h2>This Video Will Work</h2>

https://www.youtube.com/watch?v=pWxnGf7isqc
现在,在视觉和文本编辑模式之间来回单击。这就是问题的根源。

如果要使视频宽度响应,请尝试chris coyier\'s method 您不需要包装iframe。

结束

相关推荐

Ajax, filters and shortcodes

您能理解为什么我无法在ajax帖子包含中应用短代码过滤器吗?让我更好地解释一下:我已经设法在另一篇文章中包含一篇文章,通过admin-ajax.php, 正如著名的5 tips.很明显,我不想显示快捷码标签,也不想去掉它们,所以我在回应do_shortcode($post->post_content)此时,虽然我正在运行“Cleaner gallery”插件,但post gallery会被渲染,但未被过滤add_filter( \'post_gallery\', \'cleaner_gallery\