Obținerea unei liste de articole personalizate după autor
Încerc să creez o pagină unde un utilizator poate vedea toate tipurile de articole personalizate după ce dă click pe un autor dintr-o pagină anterioară, dar nu reușesc să găsesc nimic util în funcțiile PHP incorporate în WordPress.
Există vreo modalitate simplă de a face această interogare? Nu am găsit prea multe informații online despre acest lucru.

Ceva de genul acesta ar trebui să funcționeze:
// Presupunând că ai $author_id setat
// și tipul tău de postare se numește '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();
// titlu, conținut, etc
$author_posts->the_title();
$author_posts->the_content();
// ar trebui să ai acces la oricare dintre tag-urile pe care le poți
// folosi în mod normal în The Loop
}
wp_reset_postdata();
}
Referință
Folosind un fișier șablon pentru Autor
Poți face asta într-un șablon de Autor:
author.php
-- acest fișier trebuie să fie în directorul temei tale
<?php get_header(); ?>
<div id="content" class="narrowcolumn">
<!-- Aceasta setează variabila $curauth -->
<?php
$curauth = (isset($_GET['author_name'])) ?
get_user_by('slug', $author_name) :
get_userdata(intval($author));
?>
<h2>Despre: <?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>Profil</dt>
<dd><?php echo $curauth->user_description; ?></dd>
</dl>
<h2>Postări de <?php echo $curauth->nickname; ?>:</h2>
<ul>
<!-- The Loop -->
<?php
// Presupunând că tipul tău de postare se numește '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();
// titlu, conținut, etc
the_title();
the_content();
// ar trebui să ai acces la oricare dintre tag-urile pe care le poți
// folosi în mod normal în The Loop
}
wp_reset_postdata();
}
?>
<!-- End Loop -->
</ul>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Acest cod pentru șablonul author.php
este preluat direct din Codex și ar trebui considerat un punct de plecare, nu un produs finit.

Știu că voi primi câteva critici pentru asta... dar încerc să fac asta cu "Allow PHP in Post and Pages" și se pare că are o problemă cu instrucțiunea if. Nu pot să-mi dau seama de ce, dar pur și simplu renunță să mai încerce să facă orice imediat ce ajunge în acel punct.

Codul pe care l-am postat este menit să fie adăugat în fișierul tău functions.php
sau într-un plugin. Nu am experiență în utilizarea pluginului Allow PHP in Posts and Pages(?).

Cum aș putea să-l adaug în functions.php? Nu sunt foarte bun cu PHP. Presupun că trebuie să-l pun într-o funcție, dar nu sunt sigur cum să fac partea cu add_action sau cum să o apelez dintr-o pagină.

Salut, răspuns întârziat, dar încerc metoda ta pentru postările unui utilizator într-un CPT (evenimente), dar din păcate, primesc o eroare 500 de server pe pagina unui utilizator care are de fapt postări - utilizatorii fără postări (adică query gol) funcționează perfect. Poți să arunci o privire? Vezi aici un paste din fișierul meu de șablon author (ignoră partea cu câmpurile personalizate :) ): http://pastebin.com/NLNSYC0c. Mulțumesc anticipat!

Actualizare: Am rezolvat, cu cunoștințele mele limitate de PHP. De fapt, trebuie să înlocuiești $author_posts->the_title();
cu get_the_title() standard etc., și funcționează perfect (vezi http://pastebin.com/1FHFGFQs). Totuși, mulțumesc că m-ai îndrumat în direcția bună (poți să actualizezi soluția ta de mai sus).

Am actualizat codul. Dacă get_the_title()
funcționează, atunci the_title()
și the_content()
ar trebui să funcționeze și ele. (Se pare că fac ceva foarte asemănător pe un site pe care l-am configurat acum ceva timp.)

Prima parte funcționează perfect. Am folosit simplu get_the_author_meta('ID');
pentru a seta $author_id
.

Ai uitat paranteza de închidere la instrucțiunea while:
while( $author_posts->have_posts()) {

Folosește pre_get_posts
pentru a adăuga tipul tău de postare personalizată în șablonul author.php
În fișierul tău functions.php, adaugă următorul cod. Acesta va adăuga tipul tău de postare personalizată la interogarea principală, astfel încât să apară pe pagina autorului
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' );
Cu această soluție, nu este nevoie să faci modificări în fișierele de șablon :-)

Bună @PieterGoosen Asta este aproape perfect pentru ce am nevoie, dar aș dori să afișez doar CPT-urile. Pe linia $query->set aș putea pur și simplu să elimin 'post', dar asta va cauza probleme pe blogul principal. Știi cum aș putea seta codul să se aplice doar tipurilor de postări personalizate? În cod pseudo ar fi: if (post-type('cpt-name') { // executa codul } dar nu reușesc să găsesc o soluție.
