Come mostrare post correlati per categoria o custom post type?

26 giu 2014, 17:17:15
Visualizzazioni: 15.1K
Voti: 1

Sto cercando il modo migliore per creare, probabilmente, un custom post type dove poter filtrare nelle categorie correlate a quel custom post type nella sidebar.

Ecco il sito su cui sto lavorando on. Originariamente i profili degli studenti e dei donatori dovrebbero essere un tipo di post o categoria che può essere aggiornato dinamicamente quando viene creato un nuovo profilo. Quindi Health & Science, Student Success e Creative community hanno i loro set specifici di profili.

Quindi diciamo che John Doe è un nuovo profilo studente per Student Success, posso assegnargli un tag per farlo apparire solo in quella pagina e quando visualizzo il suo singolo post ho problemi a mostrare le categorie o i profili correlati, in questo caso Student Success. Quindi quando si visualizza il profilo di John Doe, gli altri profili sotto Student Success dovrebbero essere elencati nella sidebar.

Ho notato che WordPress condivide il template file single.php, quindi la sidebar che ho per il file single.php viene utilizzata anche per i profili, cosa che non vogliamo.

In sintesi, se scorri Health & Science, Student Success e Creative community, sto cercando un setup simile ma invece di un processo in 4 passi che il client deve seguire quando carica un nuovo profilo, cerco un processo in un solo passaggio.

Il mio attuale setup prevede che si aggiunga il nuovo profilo come pagina, poi si vada nell'area menu nel dashboard e si aggiunga il nuovo profilo al menu.

Il codice del mio attuale page template.

7
Commenti

Quindi in pratica quello che vuoi è che la sidebar presente in single.php possa rilevare il post che viene caricato nel template della pagina e utilizzare una categoria o un tipo di post per determinare quali profili/post correlati mostrare? Quindi attualmente Health & Science, Student Success e Creative community sono semplicemente pagine con template piuttosto che un custom post type?

RachieVee RachieVee
26 giu 2014 18:08:31

Sì. Ho cercato di capire le istruzioni condizionali che WordPress utilizza ma non riesco a capire come fare in modo che legga quella pagina e mostri i post correlati.

jose jose
26 giu 2014 20:15:28

Ok dammi un po' di tempo per provare a imitare quello che vuoi in un'installazione WordPress mia e vedrò cosa posso fornirti.

RachieVee RachieVee
27 giu 2014 17:32:22

Apprezzo il tuo aiuto @RachieVee. Se diventa troppo complicato, non preoccuparti. Grazie!

jose jose
27 giu 2014 18:03:33

Oh cavolo, haha, sì mi sta prendendo un po' di tempo, ma se per te va bene che non fornisca codice, posso almeno provare a indirizzarti nella giusta direzione. Vedo nel tuo template che stai interrogando i post con una categoria - perché non creare un nuovo loop nella tua area Profili Donatori che ottenga i post di quella categoria e elenchi i link (supponendo che la categoria sia qualcosa come Health-Science o una delle tue tre sezioni)? Oppure puoi usare i post meta nei tuoi profili se non vuoi estrarre una categoria per un menu creato con un loop get_posts. Sento di non essere stata chiara? Fammi sapere.

RachieVee RachieVee
27 giu 2014 18:21:07

Nessun problema. Ho una discreta esperienza di codifica con WordPress. Il mio problema è che se uso la funzionalità di post in WordPress e imposto categorie specifiche per quei profili, WordPress utilizza il template single.php per tutti i post. Quindi il post in News & Events avrà la stessa sidebar che non voglio. Voglio che la sidebar di News & Events rimanga così com'è ora ma mostri i post correlati per i post dei profili. Quindi sto cercando di capire come leggere dinamicamente la categoria della pagina corrente per visualizzare le categorie correlate nella sidebar sinistra. A volte sento di non essere chiaro, haha.

jose jose
27 giu 2014 20:39:16

Mmm, e se manipolassi la classe del body se non mostra già la categoria come classe - e usassi quello come mezzo per rilevare la categoria nella tua sidebar, controllando l'output della tua sidebar verificando quella classe body della categoria? Avevo l'impressione che i tuoi profili fossero visualizzati in una pagina, quindi non sarebbero solo i singoli post a usare single.php? Immagino dipenda anche dal tuo tema...

RachieVee RachieVee
30 giu 2014 07:06:49
Mostra i restanti 2 commenti
Tutte le risposte alla domanda 2
2
<?php
// Ottieni post correlati dalla stessa categoria, escludendo il post corrente
$related = get_posts( array( 'category__in' => wp_get_post_categories($post->ID), 'numberposts' => 5,'post_type' => 'news', 'post__not_in' => array($post->ID) ) );
if( $related ) foreach( $related as $post ) {
setup_postdata($post); ?>
        <li>
        <?php  the_post_thumbnail(); ?>
        <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>

        </li>

<?php }
wp_reset_postdata(); ?>
9 set 2014 07:14:07
Commenti

In che modo questa risposta risponde alla domanda?

Rarst Rarst
9 set 2014 09:56:50

Questo ha funzionato per me..

rwzdoorn rwzdoorn
15 lug 2015 14:42:59
0

Per prima cosa devi creare una query con una tassonomia personalizzata o qualsiasi cosa tu voglia utilizzare per mostrare i tuoi articoli

  function related_posts_by_taxonomy( $post_id, $taxonomy, $args=array() ) {
        $query = new WP_Query();
        $terms = wp_get_object_terms( $post_id, $taxonomy );
    
        // Assicurati di avere i termini dal post corrente
        if ( count( $terms ) ) {
            $post_ids = get_objects_in_term( $terms[0]->term_id, $taxonomy );
            $post = get_post( $post_id );
            $post_type = get_post_type( $post );        
    
            $args = wp_parse_args( $args, array(
                    'post_type' => $type,
                    'post__in' => $post_ids,
                    'taxonomy' => $taxonomy,
                    'term' => $terms[0]->slug,
    
                ) );
            $query = new WP_Query( $args );
        }
    
        // Restituisci i risultati in formato query
        return $query;
    }

Per elencare l'output puoi utilizzare il codice seguente

    $related =  related_posts_by_taxonomy( $post->ID, 'service_category' );
                    while ( $related->have_posts() ): $related->the_post(); ?>
                    <li class="folk-grid__col all">
                                <img class="" data-src="<?php echo get_template_directory_uri(); ?>/images/icons-service/<?php $icon_service = get_post_meta( $post->ID, 'service_options_icons', true ); echo $icon_service; ?>.svg" alt="<?php echo get_the_title( $post->ID ); ?>" src="<?php echo get_template_directory_uri(); ?>/images/icons-service/<?php echo $icon_service; ?>.svg">
                                   <span><a href="<?php echo esc_url( get_permalink( $post->ID ) ); ?>"><?php echo get_the_title( $post->ID ); ?></a></span>
                                     <div>
                                       <a rel="nofollow" class="btn folk-button" style="top: 35%;width: 62%;padding: 10px;" href="<?php echo esc_url( get_permalink( $post->ID ) ); ?>">Richiedi ora</a>
                                     </div>
                               </li>
    endwhile; 
13 lug 2021 20:58:58