使用短代码在帖子中发布特定的“自定义帖子类型”帖子的内容

时间:2011-05-09 作者:Harley Barnes

我们音乐博客上的帖子通常包括多首音乐曲目。

我希望每个单独的曲目都是它自己的实体——一种称为“track”的自定义帖子类型——我希望能够使用快捷码将其自由插入帖子中。

下图很好地解释了我想要做的事情。(链接到我截图的页面:http://iloveomfg.com/210/don-rimini-whatever-kaptain-cadillac-remix/

enter image description here

我想创建一个短代码,[track], 它回显指定id的“track”自定义帖子类型的全部内容。例如,如果曲目id为34,则在帖子中显示该曲目的短代码为:[track id=34][track id="34"].

我查看了这个网站上所有与这个主题相关的帖子,并尝试了一些解决方案,但都没有效果,所以我决定继续问我的问题。你能确切地告诉我我需要做什么来实现这一点吗?

如果你需要我澄清什么,请告诉我。

2 个回复
最合适的回答,由SO网友:Bainternet 整理而成

我建议为帖子与其“tracks”之间的关系创建一个新的自定义分类法,或者如果您愿意的话,可以创建一个快捷码,使用快捷码一次查询所有需要的曲目,而不是反复调用您的快捷码并对其进行排序。您可以在track中创建一个自定义字段,以便在查询中按该字段排序,从而可能是这样的(这假设您有一个名为“post_tracks“而且所有的帖子跟踪都被添加到该分类法的同一术语中,并且您有一个自定义字段来对跟踪进行排序,该字段名为”in_order“:

function get_tracks($atts, $content = null) {  
        extract(shortcode_atts(array(  
            "post_tracks" => \'\',
            "tracks" => \'\',
        ), $atts)); 

        //if post_tracks relation term was passed:
        if ($atts[\'post_tracks\'] != \'\'){
            $tracks = NEW WP_Query(array(\'post_type\' => \'track\', \'post_tracks\' => $atts[\'post_tracks\'], \'orderby\' => \'meta_value\', \'meta_key\' => \'in_order\' ));
            while($tracks->have_posts()){
                $tracks->the_post();
                //do whatever you want with each track eg:
                $out .= \'<div class="track">
                    <h3>\'.get_the_title($post->ID).\'<h3>
                    <div class="track_inner">
                        <div class="track_img">\'. get_the_post_thumbnail($post->ID, \'thumbnail\').\'</div>
                        <div class="track_content">\'.apply_filters(\'the_content\',get_the_content()).\'<div>
                    </div></div>\';
            }
            return $out;
        }

        //if its a single track you want:
        $tracks = NEW WP_Query(array(\'post_type\' => \'track\',\'post__in\' => array($tracks) ));
            while($tracks->have_posts()){
                $tracks->the_post();
                //do whatever you want with each track eg:
                $out .= \'<div class="track">
                    <h3>\'.get_the_title($post->ID).\'<h3>
                    <div class="track_inner">
                        <div class="track_img">\'. get_the_post_thumbnail($post->ID, \'thumbnail\').\'</div>
                        <div class="track_content">\'.apply_filters(\'the_content\',get_the_content()).\'<div>
                    </div></div>\';
            }
        return $out;
}  

add_shortcode(\'tracks\',\'get_tracks\');
有了它,您可以像这样简单地调用您的短代码:

[tracks post_tracks="relation_tern_name"]
或者一次只播放一首曲目:

 [tracks tracks="track_id"]

SO网友:mattl

我想你有两个问题。

1-编写简短代码。This Nettuts 本教程非常擅长逐步完成所需的每个步骤。(尽管您不需要在第二部分中添加tinymce按钮)。

2-存储轨道详细信息的方法。我猜你可以为每首曲目使用一篇新的贴子,带有指向音频文件的链接和你想要的任何其他详细信息的自定义元。然后track=ID将引用帖子的ID,您将使用快捷码获取ID,然后使用该ID搜索帖子,然后包含该帖子的meta。

希望这有帮助。

结束

相关推荐

Nested Shortcode Detection

如果您熟悉此代码<?php $pattern = get_shortcode_regex(); preg_match(\'/\'.$pattern.\'/s\', $posts[0]->post_content, $matches); if (is_array($matches) && $matches[2] == \'YOURSHORTCODE\') { //shortcode is being used }&#