Verifică dacă este pe pagina copil a unei anumite pagini

24 nov. 2014, 04:59:44
Vizualizări: 39K
Voturi: 16

Încerc să afișez un logo diferit în funcție de pagina care este vizualizată.

<?php 
// Verifică dacă este pagina principală, pagina de servicii sau orice subpagină a paginii de servicii
if ( is_page('home') || is_page('services') || is_page_template('services') || 
     (is_page() && $post->post_parent == get_page_by_path('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 website" title="Logo principal website"></a>
            </h1>
    </div>
<?php } ?>

Codul de mai sus funcționează bine, dar cum aplic schimbarea logo-ului și pe sub-paginile din 'services'?

0
Toate răspunsurile la întrebare 7
1
16

Puteți face acest lucru cu $post->post_parent. Va trebui să verificați dacă părintele paginii copil este pagina de Servicii. Iată cum puteți verifica acest lucru.

Am presupus că 123 în codul următor este ID-ul paginii dvs. de Servicii. Înlocuiți-l cu ID-ul 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
Comentarii

Doar o notă că această soluție nu va funcționa pentru descendenți (adică paginile situate la două niveluri mai jos), deși tot rămâne un răspuns mai bun decât cel selectat, după părerea mea.

Nathan Nathan
25 mai 2017 22:21:48
1

Puteți obține pagina Post / numele postului folosind această metodă.

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

puteți folosi condiția în funcție de cerințele dumneavoastră.

24 nov. 2014 07:16:08
Comentarii

Te rog să formatezi corect codul înainte de a posta.

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" title="Logo companie"></a>
            </h1>
    </div>
<?php } ?>
27 nov. 2014 15:12:44
0

La fel ca răspunsul lui Robert Hue, această soluție va obține ID-ul elementului părinte:

echo get_post_field( 'post_parent' );

Al doilea parametru este opțional și poate conține un ID (pentru când ești în afara buclei sau vrei să interoghezi părintele unui element specific)

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

Această funcție poate obține orice câmp din tabelul postărilor, cum ar fi slug-ul postării, statusul, tipul... vezi documentația pentru toate câmpurile disponibile.

În cazul tău, funcția ar arăta astfel:

if ( get_post_field( 'post_parent' ) === 9 ) :
    //copil al paginii cu ID 9
endif;
7 apr. 2017 12:10:01
0

Încearcă asta

if ( wp_get_post_parent_id( get_the_ID() ) != 0 ) {
    echo 'Sunt o pagină copil';
    // codul tău
}
30 mai 2021 01:16:11
2

Folosește get_post_ancestors($post). Va returna un array dacă postul afișat în prezent este copil al paginii părinte.

24 nov. 2014 05:12:11
Comentarii

Mulțumesc pentru răspunsul rapid. Poți să clarifici te rog cum aș putea implementa asta folosind sau modificând codul pe care îl am în prezent?

user1752759 user1752759
24 nov. 2014 05:15:28

Nu cred că aceasta va rezolva problema, deoarece această funcție get_post_ancestors() returnează doar un array de pagini copil. Este utilă pentru a verifica dacă o pagină are pagini copil.

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

$post_current = get_post(); // Obține postarea curentă

$args = array(
        'post_parent' => $parent_id, // ID-ul părintelui
        'posts_per_page' => -1, // Toate postările copil
        'post_type' => 'page', // Tipul de postare - pagină

);
$children = get_posts($args); // Obține toate paginile copil

$is_child = false; // Inițializare flag pentru verificare

foreach ($children as $f) {
    if ( $f->ID == $post_current->post_parent ) {
        // Este o pagină copil
        $is_child = true;
        break;
    }
}

if ($is_child) {
    // Este o pagină copil...
} else {
    // Nu este o pagină copil...
}

17 nov. 2016 16:31:25
Comentarii

Vă recomand să furnizați informații suplimentare în răspunsul dumneavoastră. Câteva referințe și context ar fi utile pentru următorul cititor. http://wordpress.stackexchange.com/help/how-to-answer

jdm2112 jdm2112
17 nov. 2016 16:47:28