如何在主题中的POST内容/条目之外执行短码?

时间:2015-12-30 作者:samdi

请帮助我在主题中的帖子内容之外执行一个短代码。我创建了一个插件,如下所示:

<?php

add_shortcode(\'jplayer\', \'embed_player\');

if (!is_admin()) {
    add_filter(\'widget_text\', \'do_shortcode\');
}
add_filter(\'the_excerpt\', \'do_shortcode\', 11);
add_filter(\'the_content\', \'do_shortcode\', 11);
function embed_player($atts, $content = null) {
    extract(shortcode_atts(array(
        \'url\' => \'\',
        \'autoplay\' => \'\',
        \'volume\' => \'\',
        \'class\' => \'\',
        \'loops\' => \'\',
                    ), $atts));
    if (empty($url)) {
        return \'<div style="color:red;font-weight:700;">ERROR!</div>\';
    }
    if (empty($volume)) {
        $volume = \'80\';
    }
    if (empty($class)) {
        $class = "player_container";
    }
    /** Set default container class */
    if (empty($loops)) {
        $loops = "false";
    }
    $parent_title = get_the_title( $post->post_parent );
        /** check if the post has a Post Thumbnail assigned to it*/
    if ( has_post_thumbnail() ) {
    $thumbnail = the_post_thumbnail();
    }
    else {
        $thumbnail = \'http://demo.link/i.jpg\';
    }
    
    $player_cont = \'<div class="\' . $class . \'">\';
    $player_cont .= \'
    <div id="player-1" class="light">
         <div style="display:none;" class="playerData">
            {"name":"\'.$parent_title.\'","size":{"width":"100%","height":"100%"},"media":{"mp3":"\' .$url.\'","poster":"\'.$thumbnail.\'"}}
          </div>
        </div></div>\';
    return $player_cont;
}
上面的代码显示了帖子内容/条目中的音频播放器,但我想将此播放器作为格式添加到帖子标题中:

音频播放器(这里我想执行do_shortcode 功能)

帖子标题

帖子内容/条目(这里我包括了一个快捷码[jplayer url="http://my.link"] )

为此,我插入了一个短代码[jplayer url="http://my.link"] 在post内容/条目中,并执行do_shortcode 在我这样的主题中:

<?php echo do_shortcode(\'[jplayer url="\'.$variable_parameter.\']\'); ?>
我还尝试了许多代码:

<?php echo do_shortcode(\'[jplayer url="\'.get_post_meta(\'post->ID\', \'url\', true).\'"]\') ?>
并尝试了get_post_custom()我是wordpress的初学者,所以我面临着很多问题,但我喜欢设计网站。请更正代码或指导我正确的方法。非常感谢。

1 个回复
SO网友:Prasad Nevase

我尝试了您提供的代码,但它没有在内容中呈现播放器。我认为有一些玩家js依赖性。如果是,请编辑问题,并让我们知道您使用的是哪个js。

至于使短代码在主题模板中工作;为此,您需要将其通过过滤器。请使用以下工具,它将正常工作:

<?php echo apply_filters(\'the_content\', \'[jplayer url="\'.get_post_meta(\'post->ID\', \'url\', true).\'"]\') ?>

<?php echo apply_filters(\'the_content\',\'[jplayer url="\'.$variable_parameter.\']\'); ?>

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗