web-dev-qa-db-ja.com

サブカテゴリURLで著者アーカイブを設定する方法

だから私は私が個々のユーザーのプロフィールページを表示することができるようにauthors.phpページを使用したサイトを持っています.. URLはそれから以下のようになります: http://mydomain.com/author/test/

私がやりたいのは、各ユーザーに共通のサブページをこれに追加できるようにすることです。つまり、 http://mydomain.com/author/test/liked-posts/ ここで、私はすべてを追加できます。ユーザーが気に入った投稿ie:liked-posts.php

私は特定のファイルにリダイレクトされるようにこの構造のURLを言っているべき場所はありますか?そしてどのように私はそれをするのだろうか?

これは私が私の投稿を問い合わせるのに使っている完全なコードです:

<?php
/**
 * Template Name: Posts liked by Author
 *
 * for a child theme of Twenty_Twelve
 */

get_header(); ?>

    <div id="primary" class="site-content">

        <div id="content" role="main">

        <?php
$author = get_user_by( 'slug', get_query_var( 'author_name' ) );
$post_ids = $wpdb->get_col( "SELECT DISTINCT post_id FROM {$wpdb->prefix}wti_like_post WHERE user_id = {$author->ID}" );
if( strpos( $wp_query->query_vars['liked-posts'] ,'page') !== false ) {
    $paged = substr( $wp_query->query_vars['liked-posts'], 5 );
}

$args = array(
    'posts_per_page' => 4,
    'paged' => $paged,
    'order' => 'ASC',
    'post__in' => $post_ids
);

$wp_query = new WP_Query();
$wp_query->query( $args ); ? >

            <?php if( have_posts() ) : ?>

            <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

                <?php get_template_part( 'content', get_post_format() ); ?>
                <?php comments_template( '', true ); ?>
            <?php endwhile; // end of the loop. ?>

   <?php twentytwelve_content_nav( 'nav-below' ); ?> 



            <?php else : ?>
            <article id="post-0" class="post no-results not-found">
                <header class="entry-header">
                    <h1 class="entry-title"><?php _e( 'Nothing Found', 'twentytwelve' ); ?></h1>
                </header>

                <div class="entry-content">
                    <p><?php _e( 'Apologies, but no results were found. Perhaps searching will help find a related post.', 'twentytwelve' ); ?></p>
                    <?php get_search_form(); ?>
                </div><!-- .entry-content -->
            </article><!-- #post-0 -->

            <?php endif; wp_reset_postdata(); ?>


        </div><!-- #content -->
    </div><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
1
Oscar

私が私のコメントで述べたように、あなたはこれを達成するために add_rewrite_endpoint を使うことができます。

まず、エンドポイントを追加します。

function wpa_author_endpoints(){
    add_rewrite_endpoint( 'liked-posts', EP_AUTHORS );
}
add_action( 'init', 'wpa_author_endpoints' );

書き換えルールをフラッシュした後(adminのあなたのSettings > Permalinksページにアクセスしてください)、著者のURLに/liked-posts/を追加することができます。

次に、author_templateにフィルタを追加して、これらの要求に対して異なるテンプレートをロードします。これはリクエストがliked-postsクエリ変数を設定したかどうかをチェックし、もしあればテンプレートliked-posts.phpをロードします。

function wpa_author_template( $template = '' ){
    global $wp_query;
    if( array_key_exists( 'liked-posts', $wp_query->query_vars ) )
        $template = locate_template( array( 'liked-posts.php', $template ), false );
    return $template;
}
add_filter( 'author_template', 'wpa_author_template' );

そのテンプレート内で、 get_queried_object を使用して、照会された著者の著者データを取得できます。これを追加のクエリで使用して、著者データを読み込むことができます。

編集 - ページ付けはエンドポイントでは機能しません。なぜなら、エンドポイントの後にあるものはすべてエンドポイントクエリvarに入れられるからです。そのため、ページ番号を取得するには、クエリvarから抽出するだけです。

if( strpos( $wp_query->query_vars['liked-posts'] ,'page') !== false ) {
    echo substr( $wp_query->query_vars['liked-posts'], 5 );
}
3
Milo