Установка изображения заголовка для страницы Wordpress и всех ее дочерних элементов - PullRequest
2 голосов
/ 12 июня 2009

Wordpress. У меня есть несколько страниц, каждая с детьми - разной глубины.

Допустим, это так:

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

Моя проблема: Я хочу установить графический заголовок для всех страниц "about", включая все его дочерние элементы ... и другой графический заголовок для всех страниц "stuff" и всех его дочерних элементов.

Я мог бы сделать это, используя настраиваемое поле для каждой отдельной страницы, но я не доверяю своим пользователям не забывать устанавливать это поле.

Я думал о добавлении в шаблон page.php и указании странице найти свою родительскую страницу верхнего уровня, чтобы определить, в каком «семействе» она находится, а затем установить графические элементы заголовка таким образом ... но я не хочу тратить кучу временных (и временных) ресурсов на обход иерархии.

Есть идеи?

Большое спасибо заранее ...

ОБНОВЛЕНИЕ:

Взяв код снизу, я изменил его для использования вне цикла Wordpress (еще не интегрировал значение «по умолчанию»).

    <?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 ]

1 голос
/ 12 июня 2009

Примечание. В этом ответе предполагается (возможно, неправильно), что для этого не существует встроенного метода.

Вы можете написать что-то в шаблоне, которое ищет предварительно определенное настраиваемое поле. Если ничего не существует, он может запросить у родительской страницы свою версию настраиваемого поля и т. Д.

$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';
}

или что-то в этом роде .....

Я должен отметить, что это может быть очень тяжело для базы данных, поэтому может стоить кэшировать значение для каждого данного URL. Я бы лично порекомендовал memcached, но есть и другие методы.

0 голосов
/ 12 июня 2009

Я бы сказал, тест для семьи текущей страницы. Я не думаю, что это будет слишком сложно, так как это просто короткое замыкание.

Вот предыдущий поток SO о том, как вы выполните это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...