强制将oemed放在柱子的顶部

时间:2013-07-12 作者:landons

将oembed(或短代码)强制添加到帖子顶部的最佳方法是什么?

我想在实际文章内容之前嵌入youtube,无论链接插入到哪里。有什么想法吗?

2 个回复
SO网友:Ravinder Kumar

您可以创建包含youtube URL的自定义post meta,然后

$yt=get_post_meta($post->ID,\'youtube_url\',true);
if( \'\' != $yt)
echo $GLOBALS[\'wp_embed\']->autoembed( $yt );

Updated:

如果我理解正确,那么您的内容中的任何位置都包含youtube url,并且您希望在顶部显示它们,而不管内容中的位置如何。

jut粘贴此代码functions.php

add_filter(\'the_content\',\'ravs_youtube_atTop\',1);
function ravs_youtube_atTop($content){
    /* get list of all youtubr urls */
    preg_match_all(\'#https?://(www\\.)?youtube.com/watch.*#\', $content, $matches);
    /*replace all youtube url by empty string*/
    $content = preg_replace(\'#https?://(www\\.)?youtube.com/watch.*#\',\'\',$content);
    /* return actual content if not youtube url found */
    if( empty($matches[0]) )
        return $content;
    /*insert all youtube embed iframes at top of content*/
    foreach( $matches[0] as $match){
        $content = wp_oembed_get($match).$content;
    }
    return $content;
}

SO网友:s_ha_dum

您的部分问题是关于短代码的。这相对简单。

function move_shortcode_to_top($content) {
  if (!is_singular()) return;

  $regex = get_shortcode_regex();
  preg_match_all(\'/\'.$regex.\'/\',$content,$matches);

  $move_these = array(
    \'testsc\'
  );

  if (!empty($matches[2])) {
    foreach ($matches[2] as $k => $v) {
      if (in_array($v,$move_these)) {
        $content = $matches[0][$k].str_replace($matches[0][$k],\'\',$content);
      }
    }
  } 

  return $content;
}
add_action(\'the_content\',\'move_shortcode_to_top\',1);
只需提供一个列表($move_these) 要移动的短代码的。

对于Oembed,您需要一些不同的东西:

function move_oembed_to_top($content) {
  $pattern = \'|^\\s*(https?://[^\\s"]+)\\s*$|im\';
  preg_match_all($pattern,$content,$matches);
  if (!empty($matches[1])) {
    $content = preg_replace($pattern,\'\',$content);
    $content = implode("\\n",$matches[1])."\\n".$content;
  }
  return $content;
}
add_filter(\'the_content\',\'move_oembed_to_top\',1);
这将移动尽可能多的嵌入。通过YouTube嵌入测试。

注:That regex is exactly the one used by the Core embed system.

结束