Wordpress Page ve tüm çocuklar için bir Başlık Resmi Ayarı

2 Cevap php

Wordpress. Değişen derinlikler - Ben sayfaların bir avuç, çocukları ile her var.

Diyelim ki bu gibi diyelim:

+about
-- page1
-- page2
+stuff
-- page1
--- sub-sub-page
-- page2

My problem: I want to set a graphic header for all the "about" pages, including all its children... and a different graphic header for all "stuff" pages and all its children.

I could her sayfa için özel bir alanını kullanarak bunu yapmak, ama bu alanı ayarlamak için hatırlamak benim kullanıcıları güvenmiyorum.

Ben page.php şablona ekleme ve öyle, o zaman başlık Grafiği bu şekilde ayarlanmış olan "aile" belirlemek için kendi üst üst-seviye sayfa bulmak için sayfayı söylüyorum düşündüm ... ama ben yatırım yapmak istemiyorum Zaman ton (ve çalışma zamanı) hiyerarşisi geçme kaynaklar.

Herhangi bir fikir?

Çok teşekkürler şimdiden ...

UPDATE:

Aşağıdaki kodu alarak, ben Wordpress döngü (Henüz "default" değer entegre değil) dışında kullanmak için modifiye.

    <?php 
    global $wp_query;
$postid = $wp_query->post->ID;

$header_swf = get_post_meta($postid, 'header_swf', true);

if (!$header_swf) {
    $parent = get_page($wp_query->post->post_parent); //array of values for this page's parent, directly above it

   while (!$header_swf && $parent) {
        $header_swf = get_post_meta($parent->ID, 'header_swf', true);
        $parent = get_page($parent->post_parent); //new parent
    }

}

?>

2 Cevap

Note: This answer assumes (perhaps incorrectly) there is no built-in method to do this.

Önceden tanımlanmış bir özel alan için baktım şablonunda bir şeyler yazabilirsiniz. Hiçbiri yoksa, o böylece özel alan kendi sürümü için ana sayfasını isteyin ve olabilir.

$val = get_post_custom_values('header_image');
if (!val) {
    $parent = get_page($post->post_parent);
    while (!$val && $parent) {
        $val = get_post_custom_values('header_image', $parent->id);
        $parent = get_page($parent->post_parent);
    }
    if (!$parent && !val) // has failed to find a header image!
        $val = 'my default value';
}

Ya da böyle bir şey .....

Ben verilen her bir URL için bir değer önbelleğe değer olabilir böylece gerçekten veritabanı ağır olabilir işaret olmalıdır. Ben şahsen memcached tavsiye ederim ama diğer yöntemler vardır.

Ben geçerli sayfanın ailesi için testi söyleyebilirim. Sadece basit bir kısa devre olduğu gibi ben, çok yıpratıcı olurdu düşünmek olmaz.

İşte a previous SO thread on how you'd accomplish this.