帮助在postent内容区域外执行短代码

时间:2010-12-15 22:12:00

标签: php wordpress plugins wordpress-plugin shortcode

首先,我正在使用这个插件

http://wordpress.org/extend/plugins/my-youtube-playlist/ &安培;这个主题, www.press75.com/themes/on-demand/this-is-a-sample-video-post-4 /

我的目的是让youtube播放列表显示在主题的灰色区域中,目前只显示1个视频。我的意图是使用主题的Youtube Code嵌入字段作为我可以放置插件短代码的地方,因此让插件创建帖子所需的播放列表。但是,一旦它没有被放置在帖子的内容区域中,我就无法让插件执行短代码。

一旦发布视频链接或将视频嵌入代码输入主题的相关字段,主题就会创建一个视频容器Div(视频的灰色区域)。

我尝试了以下

  • [myyoutubeplaylist LO3n67BQvh0, WGOohBytKTU, iwY5o2fsG7Y, PyKNxUThW4E, 1cX4t5-YpHQ, SJ183htYl-8, eWwoHPrrJYY, bja2ttzGOFM]硬编码到单个帖子的php文件中,看看插件是否会将其取出。没运气。它只是将短代码输出到屏幕

  • 硬编码<?php echo do_shortcode('[myyoutubeplaylist LO3n67BQvh0, WGOohBytKTU, iwY5o2fsG7Y, PyKNxUThW4E, 1cX4t5-YpHQ, SJ183htYl-8, eWwoHPrrJYY, bja2ttzGOFM]'); ?>以查看是否会接收它。没运气。它只是将短代码输出到屏幕上。

  • 让模板将短代码参数转储到以下内容中:
    <?php echo do_shortcode( get_video($post->ID); ?>。没运气。它只是将短代码输出到屏幕

  • 重复主题

  • 创建的视频容器div之外的所有内容

我的想法很新鲜,所以任何和所有的帮助都会非常受欢迎

5 个答案:

答案 0 :(得分:1)

将它放在你的functions.php文件中:

add_filter('widget_text', 'do_shortcode');

然后像在主要内容区域中一样使用侧边栏中的短代码。

答案 1 :(得分:0)

或试试这个 - TubePress

您可以通过多种方式将其编码到主题中,并且可以使用CSS轻松编辑它的外观......

编辑:how to embedd tubepress shortcode在帖子/页面之外(在我看来,其中有些内容与专业版本相关)

答案 2 :(得分:0)

<?php echo myYoutubePlaylist('[myyoutubeplaylist WnY59mDJ1gg, bKwQ_zeRwEs]'); ?>

答案 3 :(得分:0)

我知道这个问题现在已经很老了,但由于没有一个答案已经解决了,我会看到提供一些见解。

如果您尝试将内容中的短代码放入主题中的其他区域,则需要注册过滤器并将呼叫添加到您希望运行短代码的位置。假设我们想要一个具有与您在问题中尝试的功能类似的短代码 - 但我会在一开始就为任何感兴趣的人启动它。

我们首先注册一个新的短代码,以便从直接的YouTube链接输出视频,例如此https://www.youtube.com/watch?v=eh7lp9umG2I,这样用户就不必手动进行任何解析(我们实际上只需要最后一个参数) )。

在此之后我们需要注册一个过滤器。在这种情况下,由于我们想要从内容中获取此视频并将其放在其他位置,我们将在'the_content'上应用过滤器。

接下来我们将创建一个函数,以确保我们在过滤器删除它之前获取短代码的副本 - 只是保持所有干燥。

最后,我们只需要输出视频。

function your_shortcode_handler($atts)
{
    $url = $atts['video'];

    if (isset($url))
    {
        $type = 'application/x-shockwave-flash';
        $url  = str_replace("watch?v=", 'v/', $url);

        $obj  = "<object data='$url' type='$type'><param name='src' value='$url' /></object>"

        return $obj;
    }
}

add_shortcode('your_shortcode_name', 'your_shortcode_handler');

function your_shortcode_filter($content)
{
    $pattern = "/\[your_shortcode_name(.*?)\]/";

    $content = preg_replace($pattern, '', $content);

    return $content;
}

add_filter('the_content', 'your_shortcode_filter');

function stealFromContent($content)
{
    $pattern = "/\[your_shortcode_name(.*?)\]/";
    $match = null;

    preg_match($pattern, $content, $match);

    if (is_array($match) and $match[0] != '')
    {
        return $match[0];
    }

    return '';
}

//somewhere in the template you're wanting to add the video to
//BEFORE the_content is called.
$youtube_video = stealFromContent();

//then

echo $youtube_video; //wherever you want it.

现在回答作者的问题。编写此插件的个人的选择类型不使用短代码。他正在重新审视the_content,类似于我上面所做的,然后将这些值传递给javascript库。

当调用do_shortcode时,它会解析所有短代码并忽略非短代码值。一个很好的提示是,您提供的短代码不是短代码 - [字空间字空间]无效。

source file供参考。

答案 4 :(得分:-1)

你为什么不尝试这个插件?

http://wordpress.org/extend/plugins/smart-youtube/