Obținerea unei liste de articole personalizate după autor

22 iul. 2013, 23:38:12
Vizualizări: 20.7K
Voturi: 5

Î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.

2
Comentarii

Este vorba despre un anumit tip de postare sau te referi la "orice care nu este un tip de postare din nucleul WordPress"?

Pat J Pat J
22 iul. 2013 23:45:40

Este doar un anumit tip de postare personalizată.

m0ngr31 m0ngr31
22 iul. 2013 23:48:33
Toate răspunsurile la întrebare 2
10

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ță

WP_Query class

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.

22 iul. 2013 23:59:38
Comentarii

Ș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.

m0ngr31 m0ngr31
23 iul. 2013 00:26:36

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(?).

Pat J Pat J
23 iul. 2013 00:34:36

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ă.

m0ngr31 m0ngr31
23 iul. 2013 00:48:56

Am actualizat răspunsul meu.

Pat J Pat J
23 iul. 2013 01:55:07

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!

physalis physalis
19 sept. 2014 15:27:32

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).

physalis physalis
19 sept. 2014 15:51:20

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.)

Pat J Pat J
19 sept. 2014 16:08:14

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

Jordan Jordan
23 dec. 2016 21:30:53

Ai uitat paranteza de închidere la instrucțiunea while:

while( $author_posts->have_posts()) {

Jason Glisson Jason Glisson
11 iul. 2020 06:44:22

Așa am făcut. Bună observație. Am rezolvat acum.

Pat J Pat J
11 iul. 2020 23:46:44
Arată celelalte 5 comentarii
2

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 :-)

19 sept. 2014 16:18:20
Comentarii

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.

pjk_ok pjk_ok
11 ian. 2018 22:53:54

Mulțumesc pentru asta. Tocmai am rezolvat problema după ce am încercat alte 10 metode diferite.

Abdul Sadik Yalcin Abdul Sadik Yalcin
7 nov. 2018 17:54:40