web-dev-qa-db-de.com

Abrufen einer Liste benutzerdefinierter Beiträge nach Autor

Ich versuche eine Seite zu haben, auf der ein Benutzer alle benutzerdefinierten Beitragstypen anzeigen kann, nachdem er auf einen Autor von einer vorherigen Seite geklickt hat, aber ich habe kein Glück mit irgendetwas, das ich in der integrierten PHP funktioniert mit Wordpress.

Ist das einfach abzufragen? Ich habe nicht viel online darüber gefunden.

4
m0ngr31

So etwas sollte funktionieren:

// Assuming you've got $author_id set
// and your post type is called 'your_post_type'
$args = array(
    'author' => $author_id,
    'post_type' => 'your_post_type',
);
$author_posts = new WP_Query( $args );
if( $author_posts->have_posts() ) {
    while( $author_posts->have_posts()) { 
        $author_posts->the_post();
        // title, content, etc
        $author_posts->the_title();
        $author_posts->the_content();
        // you should have access to any of the tags you normally
        // can use in The Loop
    }
    wp_reset_postdata();
}

Referenz

WP_Query class

Verwenden einer Author-Vorlagendatei

Sie können dies in einer Autorenvorlage tun:

author.php-- Diese Datei gehört in das Verzeichnis Ihres Themes

<?php get_header(); ?>

<div id="content" class="narrowcolumn">

<!-- This sets the $curauth variable -->

<?php
    $curauth = (isset($_GET['author_name'])) ? 
        get_user_by('slug', $author_name) : 
        get_userdata(intval($author));
?>

<h2>About: <?php echo $curauth->nickname; ?></h2>
<dl>
    <dt>Website</dt>
    <dd><a href="<?php echo $curauth->user_url; ?>"><?php echo $curauth->user_url; ?></a></dd>
    <dt>Profile</dt>
    <dd><?php echo $curauth->user_description; ?></dd>
</dl>

<h2>Posts by <?php echo $curauth->nickname; ?>:</h2>

<ul>
<!-- The Loop -->
<?php

// Assuming your post type is called 'your_post_type'
$args = array(
    'author' => $curauth->ID,
    'post_type' => 'your_post_type',
);
$author_posts = new WP_Query( $args );
if( $author_posts->have_posts() ) {
    while( $author_posts->have_posts() {
        $author_posts->the_post();
        // title, content, etc
        the_title();
        the_content();
        // you should have access to any of the tags you normally
        // can use in The Loop
    }
    wp_reset_postdata();
}
?>

<!-- End Loop -->

</ul>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Dieser author.php-Vorlagencode wird schamlos aus dem dem Codex entfernt und sollte wahrscheinlich als Ausgangspunkt und nicht als Endprodukt betrachtet werden.

4
Pat J

Verwenden Sie pre_get_posts , um Ihren benutzerdefinierten Beitragstyp zu Ihrer author.php-Vorlage hinzuzufügen

Fügen Sie in Ihrer functions.php den folgenden Code hinzu. Dadurch wird Ihr benutzerdefinierter Beitragstyp zur Hauptabfrage hinzugefügt, sodass er auf Ihrer Autorenseite angezeigt wird

function wpse107459_add_cpt_author( $query ) {
    if ( !is_admin() && $query->is_author() && $query->is_main_query() ) {
        $query->set( 'post_type', array('post', 'YOUR_CUSTOM_POST_TYPE' ) );
    }
}
add_action( 'pre_get_posts', 'wpse107459_add_cpt_author' );

Auf diese Weise müssen keine Änderungen an Ihren Vorlagendateien vorgenommen werden :-)

2
Pieter Goosen