web-dev-qa-db-ja.com

ショートコードを使用して、投稿内に特定の「カスタム投稿タイプ」投稿のコンテンツを投稿する

私たちの音楽ブログの投稿には通常、複数の音楽トラックが含まれています。

個々のトラックをそれぞれ独自のエンティティ、つまり "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
Harley Barnes

そのようにしたいのであれば、代わりにショートコードを使用してショートコードを使用して簡単に作成できるショートコードを作成することができる場合は、投稿とその「トラック」間のリレーションまたはトラック投稿のグループ化に新しいカスタム分類法を作成することをお勧めします。ショートコードを何度も呼び出して並べ替えるには、カスタムフィールドを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"]
2
Bainternet

ここに2つの問題があります。

1 - 短いコードを作る。 このNettuts チュートリアルは、必要な各ステップを順を追って説明するのに優れています。 (ただし、最後のボタンを追加するための後半は必要ありません)。

2 - トラックの詳細を保存する方法。私はあなたがオーディオファイルへのリンクとあなたが望む他のどんな詳細でカスタムメタで各トラックのためにあなたが新しいポストを使うことができると思います。次にtrack = IDは投稿のIDを参照し、ショートコードを使用してIDを取得し、そのIDで投稿を探し出してから、その投稿のメタを含めます。

それが役立つことを願っています。

0
mattl