1

作業中のアーカイブ テンプレートがあり、使用しているページの下部にあります

<?php next_posts_link("&laquo; Older Posts", $wp_query->max_num_pages); ?>
<?php previous_posts_link("Newer Posts &raquo;", $wp_query->max_num_pages); ?>

ページネーションを表示します。

これらの関数は、表示する新しい/古い投稿があるかどうかを確認し、前/次のリンクを表示するかどうかを条件付きで決定しているようです。

私が達成しようとしている動作は、特定のページに表示される古い/新しい投稿がない場合、アンカータグは引き続き作成されますが、href 属性は与えられず、別のクラスが与えられるということです。

つまり、最新の投稿を含むページで、表示したい

<a class="previous-posts" href="THE_PREVIOUS_POSTS_PAGE">&laquo; Older Posts</a>
<a class="next-posts disabled">Newer Posts &raquo;</a>

横に何もない「古い投稿」リンクの代わりに (レイアウト上の理由から)。

デフォルト関数の動作をどこで編集できるか、または独自の機能を作成する方法についてのアイデアはありますか?

アップデート:

マイク・ルイスの答えは Next_posts には完璧でしたが、私はまだ previous_posts を台無しにしてしまったようです。

<?php if ($prev_url = previous_posts($wp_query->max_num_pages, false)){
    // next_posts url was found, create link with this url:
    ?><a href="<?= $prev_url ?>">&laquo; Newer Posts</a><?php
} else {
    // url was not found, do your alternative link here
    ?><a class="disabled">&laquo; Newer Posts</a><?php
} ?>

<?php if ($next_url = next_posts($wp_query->max_num_pages, false)){
    // next_posts url was found, create link with this url:
    ?><a href="<?= $next_url ?>">Older Posts &raquo; </a><?php
} else {
    // url was not found, do your alternative link here
    ?><a class="disabled">Older Posts &raquo; </a><?php
} ?>

最初の関数は無効なリンクを常に表示しますが、2 番目の関数は期待どおりに動作します。ここで何が起こっているか分かりますか?

4

1 に答える 1

3

これはトリッキーでした。previous and next_posts_link()関数のコア コードを見ると、next_posts()とが見つかりますprevious_posts()。これらは/wp-includes/link-template.php1552 行あたりにあります。

を使用する場合next_posts($wp_query->max_num_pages, false)、2 番目のパラメーターは$echoであり、これは望ましくないため、値を確認できます。

if ($next_url = next_posts($wp_query->max_num_pages, false)){
    // next_posts url was found, create link with this url:
    ?><a href="<?= $next_url ?>">Next Posts</a><?php
} else {
    // url was not found, do your alternative link here
    ?><a href="#" class="disabled">Next Posts</a><?php
}

編集: previous_posts($echo = true)1 つのパラメーターを取るため、この場合:

previous_posts(false).

于 2013-07-12T14:30:57.683 に答える