web-dev-qa-db-ja.com

カスタム投稿タイプを表示するショートコード

作成しているショートコードに問題があります。

私は5〜10種類のカスタム投稿タイプを持っていますが、個々の投稿タイプごとにテンプレートを作成するのではなく、Idは通常のページを使用し、ショートコードを使用して投稿をインポートします。

それでさらに説明するために、私はアトラクションと呼ばれるページと 'アトラクション'と呼ばれる投稿タイプを持っています。ページ上に私はショートコードを挿入します - > [feed type = "attraction" limit = "5"]

これは、カスタム投稿タイプ "attraction"の下のすべての投稿を出力します。

私が抱えている問題は、それを正しくページ付けすることです。カスタム投稿タイプをページ分割するための千の方法を読んだことがあるので、私が現在使用しているコードは非常に多くの人々によるとうまくいく傾向がありますが、私はこれをショートコードの中でうまく動かせません。これには理由がありますか?

現在、ページは5つの投稿で問題なく表示されていますが、前の投稿の次のリンクには反映されません。 url +/page/2と入力すると、2ページ目がセクションの次の5つの投稿とともに正しく表示されます。そのため、ページ付けは機能しているようですが、Next/Previous Linkが表示されないため、アクセスできません。

このようにすることの利点は、通常のページを使用し、投稿をインポートし、そして呼ばれたショートコードの上下にコンテンツを含めることができるということです。

これがすべて理にかなっていることを願っています。

私のショートコードコードをヘレス - >

    function section_feed_shortcode( $atts ) {
    extract( shortcode_atts( array( 'limit' => -1, 'type' => 'post'), $atts ) );

    global $paged;
    $q = new WP_Query(  array ( 
        'posts_per_page' => $limit, 
        'post_type' => $type, 
        order => 'ASC', 
        orderby =>'menu_order', 
        'paged' => $paged ) );

    $list = ' ';

    while ( $q->have_posts() ) { $q->the_post();

        $list .= '<article class="listing-view clearfix">' 
        . '<div class="listing-content">' 
        . '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>' 
        .'<p>' . get_the_excerpt() . '</p>'
        . '<a href="' . get_permalink() . '">' . 'View &raquo;' . '</a>'
        . '</div>'
        . '<a class="listing-thumb" href="' . get_permalink() . '">' . get_the_post_thumbnail($page->ID, 'listing-thumb')  . '<span></span></a>'
        . '</article>';
    }

    return 
    '<div class="listings clearfix">' 
    . $list 
    . '<div class="nav-previous">' . next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts' ) ) . '</div>'
    . '<div class="nav-next">' . previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>' ) ) . '</div>'
    . '</div>' .
    wp_reset_query();

}
add_shortcode( 'feed', 'section_feed_shortcode' );
3
Aaron

わかりました、私はまだ2番目のクエリのアイデアを好きではありませんが、アーカイブページにコンテンツを追加するのは難しいことです。

私が見つけた3つの問題がありました:

  1. next_posts_linkとprevious_posts_linkは両方共エコーしているので、get_に相当するものが必要です。

  2. get_next_posts_linkを調べると、グローバル$ wp_query ...に依存していることがわかります。これは、実際の "ページ"用であり、ショートコードのクエリ用ではありません。その後、実際にquery_postsを実行し、元のクエリを削除する必要があります。リセットクエリが機能することを願っていますが、100%確実というわけではありません。あなたはそれをテストする必要があります。

  3. これが問題だったかどうかわからないが、私は通常$ paged変数がこのように定義されているのを見ているので、それを使った。

    function section_feed_shortcode( $atts ) {
    extract( shortcode_atts( array( 'limit' => -1, 'type' => 'post'), $atts ) );
    
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;  
    
    query_posts(  array ( 
        'posts_per_page' => $limit, 
        'post_type' => $type, 
        'order' => 'ASC', 
        'orderby' =>'menu_order', 
        'paged' => $paged ) );
    
    $list = ' ';   
    
    while ( have_posts() ) { the_post();
    
        $list .= '<article class="listing-view clearfix">' 
        . '<div class="listing-content">' 
        . '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>' 
        .'<p>' . get_the_excerpt() . '</p>'
        . '<a href="' . get_permalink() . '">' . 'View &raquo;' . '</a>'
        . '</div>'
        . '<a class="listing-thumb" href="' . get_permalink() . '">' . get_the_post_thumbnail($page->ID, 'listing-thumb')  . '<span></span></a>'
        . '</article>';
    }
    
    return 
    '<div class="listings clearfix">' 
    . $list 
    . '<div class="nav-previous">' . get_next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts' ) ) . '</div>'
    . '<div class="nav-next">' . get_previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>' ) ) . '</div>'
    . '</div>' .
    wp_reset_query();
    
    }
    add_shortcode( 'feed', 'section_feed_shortcode' );
    
3
helgatheviking