web-dev-qa-db-ja.com

<prev and next>リンクを使用するときに特定の指定されたページをスキップすることは可能ですか?

私の質問を読んでくれてありがとう。私はいくつかのグーグルをしました、そして、私はどこでもこの質問に対する答えを見つけることができないようです。それがすでにスタック交換のどこかにあるのであれば、ご容赦ください。

私は このプラグイン を使用して、私の一連のページで "<prev"および "next>"リンクを許可します。私はwordpressの管理メニューを使ってページの順番を変えることができるので、これはほとんど完璧です。しかし、前のループと次のループでスキップしたいページがいくつかあります。

例えば ​​- 私は静的なホームページを使っています。ある時点で、「次の」リンクはホームページにリンクしています。このループからホームページと他のカップルを除外したいのですが。これは可能ですか?これを行うための最良の方法は何ですか?

ありがとうございます。

ティム

P. S.このプラグインは、Next/Prevポストの組み込み機能が機能するのとほぼ同じ方法で機能します。このループから投稿を除外する方法があれば、プラグインを持つページでも同じように機能すると思います。ありがとう

1
timshutes

あなたが言及したプラグインをチェックしていません...しかし、私は このソリューション を「作者」ナビゲーションをするために使います。

私は機能を調整し、これはおそらくプラグインなしで動作するはずです(未テスト)。もっと除外したい場合は、IDと条件そのものを調整する必要があります。

[編集:訂正された関数、クエリにmenu_order条件がありませんでした]

ノート:

1)ID 99999は、フロントページとして定義された静的ページに対応します。

2)すべてのページは定義されたメニュー順を持っていなければなりません、メニュー順として0(ゼロ)のページがあるなら、これはうまくいかないと思います

//PAGE.PHP
get_next_page_nav();
get_prev_page_nav();

//FUNCTIONS.PHP
function get_next_page_nav($link="%link", $title="%title") {
    global $wpdb, $post;
    $prev = $wpdb->get_row($wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_type='page' AND post_status='publish' AND ID!='99999' AND menu_order < '".$post->menu_order."' ORDER BY menu_order DESC LIMIT 1;"));
    if($prev) {
        $title = preg_replace('/%title/',$prev->post_title, $title);
        echo preg_replace('/%link/', '<a href="'.get_permalink($prev->ID).'" rel="prev" class="next-page">'.$title.'</a> ', $link);
    }
}  

function get_prev_page_nav($link="%link", $title="%title") {
    global $wpdb, $post;
    $next = $wpdb->get_row($wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_type='page' AND post_status='publish' AND ID!='99999'  AND menu_order > '".$post->menu_order."' ORDER BY menu_order ASC LIMIT 1;"));
    if($next) {
        $title = preg_replace('/%title/',$next->post_title, $title);
        echo preg_replace('/%link/', ' <a href="'.get_permalink($next->ID).'" rel="next" class="previous-page">'.$title.'</a>', $link);
    } 
}
1
brasofilo