Cum să obții ID-ul părinte al unui post în WordPress?

25 apr. 2013, 10:06:19
Vizualizări: 17.6K
Voturi: 3

Am un șablon care afișează postările de blog (Pagina de Blog), deschid una dintre postări care utilizează șablonul single.php. Cum pot obține ID-ul părintelui său care este (Pagina de Blog)?

Trebuie să menționez că vreau să folosesc acest ID pentru a obține valoarea meta box a paginii de blog în single.php.

Același lucru este valabil și pentru un tip de postare personalizată, să zicem 'proiect', unde un șablon de pagină listează postările de proiect (Pagina de Proiecte) și single-project.php pentru postarea individuală de proiect. În acest caz, vreau să obțin ID-ul (Pagina de Proiecte) în single-project.php.

Iată cum poți obține ID-ul părintelui:


// Pentru postări obișnuite de blog
$parent_id = wp_get_post_parent_id(get_the_ID());

// Pentru postări personalizate (custom post type)
// Mai întâi trebuie să obții ID-ul paginii de arhivă pentru postarea personalizată
$projects_page_id = get_option('page_for_projects'); // Înlocuiește 'projects' cu slug-ul postării tale personalizate

// Verifică dacă există o pagină părinte
if($parent_id || $projects_page_id) {
    // Folosește ID-ul obținut pentru a prelua metadatele
    $meta_value = get_post_meta($parent_id ? $parent_id : $projects_page_id, 'your_meta_key', true);
}

Pentru paginile de arhivă ale postărilor personalizate, poți folosi și:


// Obține obiectul postării curente
$post = get_queried_object();

// Verifică dacă este o postare personalizată și obține ID-ul paginii de arhivă
if (is_singular('project') && function_exists('get_page_by_path')) {
    $projects_page = get_page_by_path('projects'); // Înlocuiește cu slug-ul paginii tale
    $parent_id = $projects_page->ID;
}
11
Comentarii

Poți explica situația? De ce vrei să obții asta?

Vinod Dalvi Vinod Dalvi
25 apr. 2013 10:11:52

ID-ul părintelui postării nu este o pagină de blog, ci o altă postare. Nu există nicio legătură între postare și pagina ta de blog.

Rajeev Vyas Rajeev Vyas
25 apr. 2013 10:12:05

@VinodDalvi Am editat întrebarea.

metalzade metalzade
25 apr. 2013 10:24:08

@RajeevVyas deci spui că nu există nicio metodă de a obține ID-ul paginii de blog?

metalzade metalzade
25 apr. 2013 10:24:56

@metalzade bineînțeles că există, încearcă să folosești get_option('page_for_posts') sau verifică funcția is_home din codex pentru referință.

Rajeev Vyas Rajeev Vyas
25 apr. 2013 10:37:41

+1 pentru actualizarea întrebării cu mai multe informații. Încă nu sunt sigur ce vrei să spui. Dacă ai un tip de postare personalizată și este setată ca 'hierarchical', atunci poți folosi get_post( $post->post_parent ). Dacă folosești o 'pagină' pentru postările de blog în setări, atunci get_option('page_for_posts') îți va oferi ID-ul. Mai multe informații și poate un fragment de cod ne vor ajuta să oferim un răspuns mai bun.

Mere Development Mere Development
25 apr. 2013 10:45:54

@MereDevelopment Mulțumesc băieți, get_option('page_for_posts') a funcționat pentru pagina de blog, dar pentru tipul personalizat de postare $post->post_parent returnează 0 ceea ce nu este corect. Am editat întrebarea din nou.

metalzade metalzade
25 apr. 2013 11:06:50

Tu combini concepte separate. Părintele unui tip personalizat de postare ierarhic nu este același lucru cu pagina pe care postările sunt afișate.

anu anu
25 apr. 2013 11:22:48

@anu OK, am înțeles acum, dar crezi că există o modalitate de a obține ID-ul acelei pagini în single-project.php?

metalzade metalzade
25 apr. 2013 11:47:46

@metalzade nu există nicio relație decât dacă o definești explicit. De exemplu, dacă ai avea 2 pagini care listează aceleași articole, care ar trebui să fie 'părintele'? Deci, poți fie să o hardcodezi, să o definești în configurare, sau să faci o presupunere implicită (de exemplu prin căutarea paginii care folosește un anumit template)

anu anu
25 apr. 2013 12:00:38

Nu cauți cumva breadcrumbs?

brasofilo brasofilo
25 apr. 2013 15:01:12
Arată celelalte 6 comentarii
Toate răspunsurile la întrebare 2
1

WordPress 5.7 introduce o nouă funcție helper pentru a obține mai ușor ID-ul postării părinte: get_post_parent()

Aceasta poate fi folosită împreună cu has_post_parent(), astfel încât să puteți avea ceva de genul:

<?php if ( has_post_parent() ) : ?>
    <a href="<?php the_permalink( get_post_parent() ); ?>">
        <?php
        echo sprintf(
            esc_html__( 'Înapoi la pagina părinte: %s', 'text-domain' ),
            get_the_title( get_post_parent() )
        );
        ?>
    </a>
<?php endif; ?>

Rețineți că aceste funcții acceptă un parametru "ID-ul postării copil", care implicit este postarea curentă.

https://make.wordpress.org/core/2021/02/10/introducing-new-post-parent-related-functions-in-wordpress-5-7/

10 feb. 2021 23:09:25
Comentarii

"Aceste funcții au fost inițial introduse ca get_parent_post() și has_parent_post() dar au fost ulterior redenumite în get_post_parent() și has_post_parent()"

markdwhite markdwhite
11 iun. 2021 05:37:59
3

Folosește $post->post_parent pentru a obține ID-ul părintelui postului. Aici $post este un obiect cu proprietăți.

25 apr. 2013 10:35:21
Comentarii

Am reușit să obțin ID-ul paginii de blog prin get_option('page_for_posts'), dar fără succes pentru tipul personalizat de postare (custom post type), deoarece $post->post_parent returnează 0.

metalzade metalzade
25 apr. 2013 11:09:40

$post->post_parent funcționează pentru mine. Afișează obiectul tău $post și vei vedea că [post_parent] este acolo.

saifur saifur
25 apr. 2013 14:42:57

Poate ar fi bine să adaugi global $post

Jack Jack
24 oct. 2016 13:11:07