Cum să obții ID-ul părinte al unui post în WordPress?
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;
}
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ă.

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.

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