web-dev-qa-db-fra.com

Comment configurer des archives d'auteur avec une URL de sous-catégorie

Donc, j'ai un site où j'ai utilisé la page authors.php afin que je puisse afficher les pages de profil d'un utilisateur individuel .. l'url ressemble alors à quelque chose comme: http://mydomain.com/author/test/

Ce que je voudrais faire, c'est de le faire pour pouvoir ajouter des sous-pages communes à chaque utilisateur, à savoir: http://mydomain.com/author/test/liked-posts/ où je peux ajouter tous les messages que l'utilisateur a aimés, par exemple: likés-posts.php

y a-t-il un endroit où je devrais dire aux URL de cette structure d'être redirigé vers un fichier spécifique? et comment ferais-je cela?

C’est le code complet que j’utilise pour interroger mes publications:

<?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

Comme je l'ai mentionné dans mon commentaire, vous pouvez utiliser add_rewrite_endpoint pour accomplir cela.

Tout d'abord, ajoutez le point final:

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

Après avoir purgé les règles de réécriture (visitez votre page Settings > Permalinks dans admin), les URL de l'auteur peuvent désormais être ajoutées avec /liked-posts/.

Ensuite, ajoutez un filtre à author_template pour charger un autre modèle pour ces demandes. Ceci vérifie si la requête a défini la variable liked-posts query et charge le modèle liked-posts.php s'il existe:

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' );

Dans ce modèle, vous pouvez utiliser get_queried_object pour extraire les données de l'auteur de l'auteur demandé, que vous pouvez utiliser dans des requêtes supplémentaires pour charger vos données de l'auteur.

EDIT - la pagination ne fonctionne pas avec un noeud final, car tout ce qui est postérieur au noeud final est placé dans la requête de noeud final var. donc pour obtenir le numéro de page, extrayez-le simplement de la requête var:

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