セルフQ&Aです。
多くの場合、WordPress ではページ階層を使用してプロジェクト構造を構築します。たとえば、ポートフォリオ サイトを作成する場合、これは一般的です。
- 仕事
- BMW
- モデル
- 3シリーズ
- 5シリーズ
- モデル
- アウディ
- モデル
- A3
- A4
- モデル
- BMW
そのため、ユーザーが 3 シリーズのページにアクセスしているときに、「次の自動車メーカー」へのリンクが必要になることがよくあります。プラグインなしでどうやってそれを行うことができますか?
セルフQ&Aです。
多くの場合、WordPress ではページ階層を使用してプロジェクト構造を構築します。たとえば、ポートフォリオ サイトを作成する場合、これは一般的です。
そのため、ユーザーが 3 シリーズのページにアクセスしているときに、「次の自動車メーカー」へのリンクが必要になることがよくあります。プラグインなしでどうやってそれを行うことができますか?
これらの関数を使用すると、次のページを決定するために使用する深さを設定できます。質問では、ユーザーは「3 シリーズ」を使用していたので、深さは 2 になります。したがって、返されるリンクは「Audi」ページになります。
テンプレートでは次のように使用されます (私の例では、リンク テキストに画像を使用しています)。
$nextIMG = '<img src="'.get_template_directory_uri().'/images/icon-nav-right.png"/>';
echo next_project_link($nextIMG);
これを functions.php に配置します。
/*
* Next Project Link
*/
function next_project_link($html) {
global $post;
// Change this to set what depth you want the next page of
$parent_depth = 2;
$ancestors = get_post_ancestors($post);
$current_project_id = $ancestors[$parent_depth-1];
// Check for cached $pages
$pages = get_transient( 'all_pages' );
if ( empty( $transient ) ){
$args = array(
'post_type' => 'page',
'order' => 'ASC',
'orderby' => 'menu_order',
'post_parent' => $ancestors[$parent_depth],
'fields' => 'ids',
'posts_per_page' => -1
);
$pages = get_posts($args);
set_transient('all_pages', $pages, 10 );
}
$current_key = array_search($current_project_id, $pages);
$next_page_id = $pages[$current_key+1];
if( isset($next_page_id) ) {
// Next page exists
return '<a class="next-project" href="'.get_permalink($next_page_id).'">'.$html.'</a>';
}
}
/*
* Previous Project Link
*/
function previous_project_link($html) {
global $post;
// Change this to set what depth you want the next page of
$parent_depth = 2;
$ancestors = get_post_ancestors($post);
$current_project_id = $ancestors[$parent_depth-1];
// Check for cached $pages
$pages = get_transient( 'all_pages' );
if ( empty( $transient ) ){
$args = array(
'post_type' => 'page',
'order' => 'ASC',
'orderby' => 'menu_order',
'post_parent' => $ancestors[$parent_depth],
'fields' => 'ids',
'posts_per_page' => -1
);
$pages = get_posts($args);
set_transient('all_pages', $pages, 10 );
}
$current_key = array_search($current_project_id, $pages);
$prev_page_id = $pages[$current_key-1];
if( isset($prev_page_id) ) {
// Previous page exists
return '<a class="previous-project" href="'.get_permalink($prev_page_id).'">'.$html.'</a>';
}
}