Ottenere una lista di post personalizzati per autore
Sto cercando di creare una pagina dove un utente possa visualizzare tutti i tipi di post personalizzati dopo aver cliccato su un autore da una pagina precedente, ma non riesco a trovare nulla di utile tra le funzioni PHP integrate in WordPress.
Esiste un modo semplice per eseguire questa query? Non ho trovato molto online a riguardo.

Qualcosa come questo dovrebbe funzionare:
// Assumendo che tu abbia $author_id impostato
// e che il tuo post type si chiami '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();
// titolo, contenuto, ecc.
$author_posts->the_title();
$author_posts->the_content();
// avrai accesso a tutti i tag che normalmente
// puoi usare nel Loop
}
wp_reset_postdata();
}
Riferimento
Utilizzo di un file Template per l'Autore
Puoi farlo all'interno di un Template per Autore:
author.php
-- questo file deve trovarsi nella directory del tuo tema
<?php get_header(); ?>
<div id="content" class="narrowcolumn">
<!-- Questo imposta la variabile $curauth -->
<?php
$curauth = (isset($_GET['author_name'])) ?
get_user_by('slug', $author_name) :
get_userdata(intval($author));
?>
<h2>Informazioni su: <?php echo $curauth->nickname; ?></h2>
<dl>
<dt>Sito Web</dt>
<dd><a href="<?php echo $curauth->user_url; ?>"><?php echo $curauth->user_url; ?></a></dd>
<dt>Profilo</dt>
<dd><?php echo $curauth->user_description; ?></dd>
</dl>
<h2>Post di <?php echo $curauth->nickname; ?>:</h2>
<ul>
<!-- The Loop -->
<?php
// Assumendo che il tuo post type si chiami '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();
// titolo, contenuto, ecc.
the_title();
the_content();
// avrai accesso a tutti i tag che normalmente
// puoi usare nel Loop
}
wp_reset_postdata();
}
?>
<!-- Fine Loop -->
</ul>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Questo codice del template author.php
è preso senza vergogna dal Codex, e dovrebbe essere considerato un punto di partenza, non un prodotto finito.

So che riceverò qualche critica per questo.. ma sto cercando di farlo con "Allow PHP in Post and Pages" e sembra avere un problema con l'istruzione if. Non riesco a capire perché, ma smette semplicemente di fare qualsiasi cosa non appena arriva a quel punto.

Il codice che ho postato è pensato per essere aggiunto al tuo file functions.php
o a un plugin. Non ho esperienza con il plugin Allow PHP in Posts and Pages (?).

Come dovrei aggiungerlo al functions.php? Non sono un esperto di PHP. Immagino di doverlo inserire in una funzione, ma non sono sicuro di come fare la parte add_action o come chiamarlo da una pagina.

Ciao, risposta tardiva, ma sto provando il tuo metodo per i post di un utente in un CPT (eventi), purtroppo ottengo un errore 500 del server sulla pagina di un utente che ha effettivamente pubblicato qualcosa - gli utenti senza post (cioè query vuota) funzionano bene. Puoi dare un'occhiata? Vedi un incolla del mio file template dell'autore (ignora la parte con i campi personalizzati :) ) qui: http://pastebin.com/NLNSYC0c. Grazie fin da ora!

Aggiornamento: ho risolto, con la mia limitata conoscenza di PHP. In realtà devi sostituire $author_posts->the_title();
con il classico get_the_title() ecc., e funziona perfettamente (vedi http://pastebin.com/1FHFGFQs). Grazie comunque per avermi indirizzato nella giusta direzione (forse potresti aggiornare la tua soluzione sopra).

Ho aggiornato il codice. Se get_the_title()
funziona, allora anche the_title()
e the_content()
dovrebbero funzionare. (A quanto pare sto facendo qualcosa di molto simile in un sito che ho configurato qualche tempo fa.)

La prima parte funziona benissimo. Ho semplicemente usato get_the_author_meta('ID');
per impostare $author_id
.

Hai dimenticato la parentesi di chiusura nell'istruzione while:
while( $author_posts->have_posts()) {

Utilizza pre_get_posts
per aggiungere il tuo custom post type al template author.php
Nel tuo functions.php, aggiungi il seguente codice. Questo aggiungerà il tuo custom post type alla query principale in modo che appaia nella pagina dell'autore
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' );
Con questo, non c'è bisogno di apportare modifiche ai tuoi file template :-)

Ciao @PieterGoosen Questo è quasi perfetto per quello che mi serve, ma vorrei mostrare solo il CPT. Nella riga $query->set potrei semplicemente rimuovere 'post', ma questo causerà problemi sul blog principale. Sai come potrei impostarlo in modo che il codice si applichi solo ai custom post type? In pseudo codice sarebbe: if (post-type('cpt-name') { // esegui il codice } ma non sembro trovare una soluzione.
