Come ottenere l'ID del post corrente di un custom post type in un loop usando il template single-{custom type}.php?

22 nov 2013, 15:59:14
Visualizzazioni: 42.2K
Voti: 2

Ho un template per custom post type dove sto ciclando attraverso tutti i post. Quello che sto cercando di fare è ottenere l'ID del post corrente nel loop quando vado nella pagina del mio custom post.

Quindi ho provato a verificare se il permalink è lo stesso per il post all'interno del loop, se è lo stesso otterrò l'ID del post corrente nel loop.

Ecco il codice che ho provato

Prima provo a ottenere il permalink all'esterno per controllarlo dentro il loop

$permalink = get_permalink();

Ora ho ottenuto il permalink del post corrente e voglio ottenere l'ID del post corrente

if($query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post();
        if(the_permalink()==$permalink){
            echo get_the_ID();
        }else{
            echo "non trovato";
        }
    endwhile;
    wp_reset_postdata();
endif;

Ho provato queste cose in single-{custom-post-name}.php e ottengo non trovato. Qualcuno può suggerirmi un modo per ottenere l'ID del post corrente in questo template?

2
Commenti

Poiché stai utilizzando get_permalink() al di fuori del loop, potresti dover passare l'ID del post. Altrimenti restituisce false e successivamente, quando esegui il loop, ti dà automaticamente "non trovato"!

sri sri
22 nov 2013 16:09:16

Inoltre, spiegare la motivazione più ampia per cui stai facendo questo potrebbe farti ottenere più risposte e possibilmente migliori.

sri sri
22 nov 2013 16:10:42
Tutte le risposte alla domanda 1
1

Quindi hai due loop: il loop principale e il secondo che utilizza $query.

Vuoi confrontare se ad un certo punto del tuo secondo loop c'è una corrispondenza tra il post corrente (all'interno del loop) e il post elaborato all'interno del loop $query.

Ho capito bene?

Invece di controllare i permalink, proporrei di verificare gli ID.

Quindi nel primo loop crei una variabile con l'ID del post corrente:

$current_post_id = $post->ID;

e nel tuo secondo loop fai semplicemente il confronto:

if($query->have_posts()) : while ($query->have_posts()) : $query->the_post();

    if( $current_post_id === $post->ID ) {
         echo $post->ID; 
    } else {
        echo "non trovato";
    }

endwhile; wp_reset_postdata(); endif;

Non sono sicuro che sia quello che stai cercando, facci sapere.

PS: Dovrei aggiungere di usare un nome più specifico per la tua query, solo per evitare collisioni di nomi da un plugin o altro, come $my_prefix_query

22 nov 2013 16:37:41
Commenti

Hai ragione, stavo cercando la stessa cosa. In precedenza non sapevo come utilizzare il ciclo predefinito have_post. Pensavo che avrebbe recuperato tutti i post. Ma quando ho provato, ho capito che avrebbe recuperato solo il post corrente. Quindi ho usato get_the_id() e ho assegnato una variabile, poi l'ho utilizzata nel ciclo di query. Grazie @Simon

sun sun
23 nov 2013 14:53:34