web-dev-qa-db-ja.com

投稿ナビゲーションのために特定の投稿に入れるためのショートコード[NEXT]と[PREVIOUS]の作成

私は本当にいくらか助けを必要としています、私はこの要求で他に向けるべき場所を知りません。自分の投稿にショートコードを追加したいのですが。テンプレートタグget_next_post()およびget_previousは、各投稿ページで投稿ナビゲーションを表示したくないため、表示される場所を制御したいので、使用できません。 HTML構造のDIVでは、投稿で作成しました。

だから私が必要なのはget_next_post()とget_previous_post()からショートコードを生成することです。

4
brett

これはとても簡単です。

 // next   
function next_shortcode($atts) {
        // global $post; -unnecessary 

           return '<div class="nav-next">'.next_post_link( '%link', '%title <span class="meta-nav">' . _x( '', 'Next post link', ' ' ) . '</span>',true ).'</div>';              
        }
        add_shortcode( 'next', 'next_shortcode' );

//prev
 function prev_shortcode($atts) {
     //global $post; -unnecessary 

       return '<div class="nav-previous">'.next_post_link( '%link', '%title <span class="meta-nav">' . _x( '', 'Previous post link', ' ' ) . '</span>',true ).'</div>';              
    }
    add_shortcode( 'prev', 'prev_shortcode' );

がんばろう!ご質問がありましたら....

1
zina

上記のコードにはいくつか問題がありました。正しい場所で画面にエコーを表示させるには、ショートコードの出力をob_start()で囲む必要があります。また、上記のコメントの1つとして、これらの関数はすでに結果をエコーし​​ているので、それらをreturnステートメントに入れても正しく機能しません。

これが私の修正です:

add_shortcode( 'prev', 'prev_shortcode' );
add_shortcode( 'next', 'next_shortcode' );
function next_shortcode($atts) {
    global $post;
    ob_start(); 
    next_post_link( '<div class="nav-next">%link</div>', 'Next post link' );              
    $result = ob_get_contents();
    ob_end_clean();
    return $result;
}

function prev_shortcode($atts) {
    global $post;
    ob_start();
    previous_post_link( '<div class="nav-previous">%link</div>', 'Previous post link' );              
    $result = ob_get_contents();
    ob_end_clean();
    return $result;
}
1
Marty Thornley