Cum să obții ID-ul postării curente pentru un tip de postare personalizat într-o buclă folosind șablonul single-{custom type}.php?

22 nov. 2013, 15:59:14
Vizualizări: 42.2K
Voturi: 2

Am un șablon pentru un tip de postare personalizat unde parcurg toate postările într-o buclă. Ceea ce încerc să fac este ca atunci când accesez pagina postării personalizate să obțin ID-ul postării curente din buclă.

Așa că am încercat să verific dacă permalink-ul este același pentru postarea din interiorul buclei și dacă este identic, voi obține ID-ul postării curente din buclă.

Iată codul pe care l-am încercat

Mai întâi încerc să obțin permalink-ul în exterior pentru a-l verifica în interiorul buclei

$permalink = get_permalink();

Acum că am obținut permalink-ul postării curente, vreau să obțin ID-ul postării curente

if($query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post();
        if(the_permalink()==$permalink){
            echo get_the_ID();
        }else{
            echo "nu a fost găsit";
        }
    endwhile;
    wp_reset_postdata();
endif;

Am încercat aceste lucruri în single-{custom-post-name}.php și primesc nu a fost găsit. Poate cineva să-mi ofere o modalitate de a obține ID-ul postării curente în acest șablon?

2
Comentarii

Deoarece folosești get_permalink() în afara buclei, poate fi necesar să transmiți ID-ul postării. Altfel, returnează false și mai târziu când parcurgi bucla, acesta îți va returna automat „not found”!

sri sri
22 nov. 2013 16:09:16

De asemenea, explicând motivul mai larg pentru care faci acest lucru ar putea să-ți aducă mai multe răspunsuri și poate chiar unele mai bune.

sri sri
22 nov. 2013 16:10:42
Toate răspunsurile la întrebare 1
1

Deci ai două bucle: bucla principală și a doua care folosește $query.

Vrei să compari dacă la un moment dat în a doua buclă există o potrivire între postul curent (din buclă) și postul procesat în bucla $query.

Am înțeles corect?

În loc să verifici permalink-uri, aș sugera să verifici ID-uri.

Deci, în prima buclă creezi o variabilă cu ID-ul postului curent:

$current_post_id = $post->ID;

iar în a doua buclă doar compari:

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

    if( $current_post_id === $post->ID ) {
         echo $post->ID; 
    } else {
        echo "nu s-a găsit";
    }

endwhile; wp_reset_postdata(); endif;

Nu sunt sigur că asta cauți, spune-ne.

PS: Ar trebui să adaug să folosești un nume mai specific pentru interogarea ta, doar pentru a evita coliziuni de nume de la un plugin sau altceva, cum ar fi $my_prefix_query

22 nov. 2013 16:37:41
Comentarii

Ai dreptate, căutam același lucru. Anterior nu știam să folosesc bucla implicită have_post. Credeam că va prelua toate articolele. Dar când am încercat, am aflat că va prelua doar articolul curent. Așa că am folosit get_the_id() și l-am atribuit unei variabile, apoi l-am utilizat în bucla de interogare. Mulțumesc @Simon

sun sun
23 nov. 2013 14:53:34