こんにちは、私は次/前のいとこのページのためのページネーションリンクを構築しようとしています。たとえば、私のページ構造は次のようになります。
A2にいるときは、 'Previous Page'リンクをa1に移動し、 'Next Page'リンクをb1に移動する必要があります(Bをスキップ)。
現時点では素晴らしい 次のページ、次の投稿ではない プラグインを使用していますが、次のページにしか移動できません(そのためBには上記の例).
いとこだけを見せるように修正しようとしていますが、いくつかの問題が発生しています。これまでのところ私はこれを持っています:
// query gand parent page level, go to next parent page, and then loop to find it's next child, eke!
// get grandparent id
$parentInfo = get_page($post->post_parent);
// query the level above's pages
// $getParentPages = get_pages('child_of='.$parentInfo->post_parent.'&parent='.$parentInfo->post_parent.'&'.$getPagesQuery);
$getParentPages = get_pages($getPagesQuery);
$parentPageCount = count($getParentPages);
for($pp=0; $pp < $parentPageCount; $pp++) {
// get the array key for our entry
// if ($post->post_parent == $getParentPages[$pp]->ID) break;
if ($post->ID == $getParentPages[$pp]->ID) break;
}
// assign our next key
$parentNextKey = $pp+1;
if (isset($getParentPages[$parentNextKey])) {
$anchorName = $getParentPages[$parentNextKey]->post_title;
$output = '<a href="'.get_permalink($getParentPages[$parentNextKey]->ID).'" title="'.$anchorName.'">';
}
それでは、どのようにしてそれをBをスキップさせてb1に進むのでしょうか。
助けてくれてありがとう!
- 描いた
これを解決するために、すべてのページを取得し、それらをレベルで割り当ててから、同じレベルの次のページを取得しました。前のページも必要な場合は、おそらくページをレベルでグループ化する機能をキャッシュする必要があります。
function wpse16875_next_page_same_level_link()
{
$next_page_same_level = wpse16875_next_page_same_level();
if ( $next_page_same_level ) {
return '<a href="' . get_permalink( $next_page_same_level ) . '">' . get_the_title( $next_page_same_level ) . '</a>';
}
return '';
}
function wpse16875_next_page_same_level()
{
$current_page = $GLOBALS['post'];
$current_page_level = null;
$all_pages = get_pages();
$pages_by_id = array();
$page_ids_by_parent_id = array();
$page_ids_by_level = array();
foreach ( $all_pages as $page ) {
$pages_by_id[$page->ID] = $page;
if ( ! array_key_exists( $page->post_parent, $page_ids_by_parent_id ) ) {
$page_ids_by_parent_id[$page->post_parent] = array();
}
$page_ids_by_parent_id[$page->post_parent][] = $page->ID;
}
foreach ( $all_pages as $page ) {
$ancestor_page_id = $page->post_parent;
$level = 0;
while ( 0 != $ancestor_page_id ) {
$ancestor_page_id = $pages_by_id[$ancestor_page_id]->post_parent;
$level++;
}
if ( $page->ID == $current_page->ID ) {
$current_page_level = $level;
}
if ( ! array_key_exists( $level, $page_ids_by_level ) ) {
$page_ids_by_level[$level] = array();
}
$page_ids_by_level[$level][] = $page->ID;
}
$current_level_page_ids = $page_ids_by_level[$current_page_level];
$current_page_pos_by_level = array_search( $current_page->ID, $current_level_page_ids );
if ( array_key_exists( $current_page_pos_by_level + 1, $current_level_page_ids ) ) {
return $pages_by_id[$current_level_page_ids[$current_page_pos_by_level + 1]];
}
return null;
}