it-swarm.com.de

So richten Sie Autorenarchive mit Unterkategorie-URL ein

Ich habe also eine Seite, auf der ich die autors.php-Seite verwendet habe, damit ich die Profilseiten einzelner Benutzer anzeigen kann. Die URL sieht dann ungefähr so ​​aus: http://mydomain.com/author/test/

Was ich tun möchte, ist, es zu haben, damit ich Unterseiten diesem hinzufügen kann, die für jeden Benutzer allgemein sind, dh: http://mydomain.com/author/test/liked-posts/ Hier kann ich alle Posts hinzufügen, die dem Benutzer gefallen haben, zB: liked-posts.php

gibt es einen Ort, an dem ich URLs dieser Struktur mitteilen sollte, dass sie zu einer bestimmten Datei umgeleitet werden sollen? und wie würde ich das machen

Dies ist der vollständige Code, den ich verwende, um meine Beiträge abzufragen:

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

Wie ich in meinem Kommentar erwähnt habe, können Sie dazu add_rewrite_endpoint verwenden.

Fügen Sie zuerst den Endpunkt hinzu:

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

Nach dem Löschen der Umschreiberegeln (besuchen Sie Ihre Settings > Permalinks-Seite in admin) können Autoren-URLs jetzt mit /liked-posts/ angefügt werden.

Fügen Sie als Nächstes author_template einen Filter hinzu, um eine andere Vorlage für diese Anforderungen zu laden. Hiermit wird überprüft, ob die Anforderung die Abfragevariable liked-posts festgelegt hat, und die Vorlage liked-posts.php geladen, falls vorhanden:

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

Innerhalb dieser Vorlage können Sie get_queried_object verwenden, um die Autorendaten für den abgefragten Autor abzurufen, die Sie in zusätzlichen Abfragen zum Laden Ihrer Autorendaten verwenden können.

BEARBEITEN - Die Paginierung funktioniert nicht mit einem Endpunkt, da alles, was nach dem Endpunkt liegt, in die Endpunktabfragevariable eingefügt wird. Um die Seitenzahl zu erhalten, extrahieren Sie sie einfach aus der Abfragevariable:

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