hereswhatidid
  • 0
Новичок

Файл темы для всех страниц, являющихся дочерними для определенной страницы

  • 0

Возможно ли в текущей иерархии именования файлов темы определить шаблон для всех страниц, являющихся дочерними для определенной страницы? Например, в этой навигации:

О нас

  • Контакт
  • Кто мы есть
  • Заявление о сообщении

Есть ли способ просто создать файл темы с именем, например:

страница-о-нас-all.php

Это будет автоматически применяться ко всем страницам, которые являются дочерними страницами «О нас»?

ОБНОВИТЬ

Я пошел с модифицированной версией того, что предложил Bainternet. Вот функция-потомок, с которой я столкнулся:

function is_descendant($ancestor, $tofind = 0) {
    global $post;
    if ($tofind == 0) $tofind = $post->ID;
    $arrpostids = get_post_ancestors($tofind);
    $arrpostslugs = array();
    foreach($arrpostids as $postid) {
        $temppost = get_post($postid);
        array_push($arrpostslugs, $temppost->post_name);
    }
    return (in_array($ancestor, $arrpostids) || in_array($ancestor, $arrpostslugs));
}
// Example use:
is_descendant('about-us');
is_descendant(123);
is_descendant('about-us', 134);

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

Share
  1. Вы хотите, чтобы это работало для всех дочерних страниц вашего сайта или только для дочерних страниц «О нас» ?

    • 0
    • объявление is_descendant() : есть некоторые вещи, которых следует избегать в отношении скорости: подсчет, проверка массива и другие вещи, которые «делают» что-то еще, кроме простого представления значения, обработанного ранее, внутри if/elseif/for/foreach/while — в любом случае: faved & + 1

      • 0
  2. У меня есть удобная маленькая условная функция, сделанная на заказ, которая сделает эту работу за вас.

    Функция:

    function is_child_page($page = NULL){
        global $post;
        if ($page == NULL){
            $p = get_post($post->ID);
            if ($p->post_parent  > 0 ){
                return true;
            }else{
                return false;
            }
        }
        $args = array( 'child_of' => (int)$page);
        $pages = get_pages($args); 
        foreach ($pages as $p){
            if ($p->ID == $post->ID){
                return true;
                break;
            }
        }
        return false;
    }
    

    Применение:

    if (is_child_page()){
        //this page has a parent page
    }
    
    if (is_child_page(23)){
        //this page is a child page of the page with the ID of 23
    }
    

    Теперь вы спросите, как это может вам помочь?

    После того, как вы сохранили эту функцию в файле functions.php вашей темы, отредактируйте файл вашей темы page.php и добавьте в самом верху что-то вроде этого:

    if (is_child_page(12)){
        include (TEMPLATEPATH . '/page-about-us-all.php');
        exit();
    }
    

    Готово! Примечание: этот код предполагает, что идентификатор вашей страницы «О странице»: 12, а файл вашей темы называется: page-about-us-all.php .

    • 0

Оставить ответ

You must login to add an answer.