Comprobar si es una página hija de una página específica

24 nov 2014, 04:59:44
Vistas: 39K
Votos: 16

Estoy tratando de mostrar un logo diferente dependiendo de qué página se está visualizando.

<?php 
// Obtener el ID de la página servicios
$services_id = get_page_by_path('services')->ID;

// Verificar si es la página home, servicios o una subpágina de servicios
if ( is_page('home') || is_page('services') || (is_page() && $post->post_parent == $services_id) ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php } 
else { ?>
    <div class="col-md-2 col-sm-4">
        <h1 class="logo imglogo">
            <a href="http://websiteaddress.com">
                <img src="<?php echo get_bloginfo('template_directory');?>/images/picturehere.png" alt="Logo del sitio web" title="Logo principal"></a>
            </h1>
    </div>
<?php } ?>

El código anterior funciona bien, pero ¿cómo aplicar el cambio de logo en las subpáginas de 'servicios'?

0
Todas las respuestas a la pregunta 7
1
16

Puedes hacer eso con $post->post_parent. Tendrás que verificar si el padre de la página hija es la página de Servicios. Así es como lo comprobarás.

Asumí que 123 en el siguiente código es el ID de la página de tus servicios. Sustitúyelo con el ID real.

if ( 123 == $post->post_parent ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php }
24 nov 2014 07:02:47
Comentarios

Solo una nota de que esto no funcionará para descendientes (es decir, dos subpáginas abajo), aunque sigue siendo una mejor respuesta que la seleccionada en mi opinión.

Nathan Nathan
25 may 2017 22:21:48
1

Puedes obtener la página de entrada / nombre de la entrada utilizando este método.

$parent = array_reverse(get_post_ancestors($post->ID));
$page_parent = get_post($parent[0]);
echo $page_parent->post_name;

Puedes usar la condición según tus requisitos.

24 nov 2014 07:16:08
Comentarios

Por favor, formatea tu código correctamente antes de publicarlo.

Robert hue Robert hue
24 nov 2014 07:18:39
0
<?php 
global $post;

if ( is_page('home') || is_page('services') ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php } 

elseif ( preg_match( '#^service(/.+)?$#', $wp->request ) ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php
}

else { ?>
    <div class="col-md-2 col-sm-4">
        <h1 class="logo imglogo">
            <a href="<?php echo esc_url( home_url( '/' ) ); ?>">
                <img src="<?php echo get_bloginfo('template_directory');?>/images/picturehere.png" alt="Logo del sitio"></a>
            </h1>
    </div>
<?php } ?>
27 nov 2014 15:12:44
0

Al igual que la respuesta de Robert Hue, esta solución te dará el ID del elemento padre:

echo get_post_field( 'post_parent' );

El segundo parámetro es opcional y puede contener un ID (para cuando estás fuera del loop o quieres consultar el padre de un elemento específico)

$post_ID = 666;
echo get_post_field( 'post_parent', $post_ID );

Esta función puede obtener cualquier campo de la tabla de posts, como el slug, estado, tipo... consulta la documentación para ver todos los campos disponibles.

En tu caso, la función se vería así:

if ( get_post_field( 'post_parent' ) === 9 ) :
    //hijo de la página con ID 9
endif;
7 abr 2017 12:10:01
0

Prueba esto

if ( wp_get_post_parent_id( get_the_ID() ) != 0 ) {
    echo 'Soy una página hija';
    // tu código
}
30 may 2021 01:16:11
2

Usa get_post_ancestors($post). Esto retornará un array si el post actual mostrado es hijo de tu página padre.

24 nov 2014 05:12:11
Comentarios

Gracias por la rápida respuesta. ¿Podrías aclarar cómo implementaría esto usando o modificando el código que tengo actualmente?

user1752759 user1752759
24 nov 2014 05:15:28

No creo que esto resuelva el problema ya que esta función get_post_ancestors() solo devuelve un array de páginas hijas. Es útil para verificar si una página tiene páginas hijas.

Robert hue Robert hue
24 nov 2014 07:18:06
1

$post_current = get_post();

$args = array(
        'post_parent' => $parent_id, // el ID del padre
        'posts_per_page' => -1,
        'post_type' => 'page',

);
$children = get_posts($args);

$is_child = false;

foreach ($children as $f) {
    if ( $f->ID == $post_current->post_parent ) {
        // es un hijo
        $is_child = true;
        break;
    }
}

if ($is_child) {
    // Es un hijo...
} else {
    // No es un hijo...
}

17 nov 2016 16:31:25
Comentarios

Te recomiendo que proporciones información adicional con tu respuesta. Algunas referencias y contexto serían útiles para el próximo lector. http://wordpress.stackexchange.com/help/how-to-answer

jdm2112 jdm2112
17 nov 2016 16:47:28