1

セルフQ&Aです。

多くの場合、WordPress ではページ階層を使用してプロジェクト構造を構築します。たとえば、ポートフォリオ サイトを作成する場合、これは一般的です。

  • 仕事
    • BMW
      • モデル
        • 3シリーズ
        • 5シリーズ
    • アウディ
      • モデル
        • A3
        • A4

そのため、ユーザーが 3 シリーズのページにアクセスしているときに、「次の自動車メーカー」へのリンクが必要になることがよくあります。プラグインなしでどうやってそれを行うことができますか?

4

1 に答える 1

2

これらの関数を使用すると、次のページを決定するために使用する深さを設定できます。質問では、ユーザーは「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>';
        }

    }
于 2013-04-05T19:01:23.280 に答える