Поддержка Проблемы и решения Отдельные шаблоны для архивов

  • Вот при дизайне понадобилось вывести разные шаблоны оформления для архивов. Сразу поясню, что с отдельными шаблонами для рубрик например проблем нет, создаешь category-твоеid.php и шуруешь на какие рубрики хочешь. А вот с archive php проблема, дело в том, что и твой сайт/?m=20090724 и страницы автора твой сайт/?author=1 и страница меток твой сайт/?tag=ru_wordpress&paged=5 висят на этом файле и как заставить ее работать от разных не пойму пока? пробую так заношу в главный файл и создаю соответственно файлы `

    if ( in_archive(‘1’) ) {
    include(TEMPLATEPATH . ‘/archive_auto.php’);
    } elseif ( in_archive(‘2’) ) {
    include(TEMPLATEPATH . ‘/archive_moto.php’);
    } else {
    include(TEMPLATEPATH . ‘/archive_other.php’);
    }

    Подскажите где притормаживаю, никак не получается, никаких плагинов не хочу(если они есть, не искал)

Просмотр 15 ответов — с 1 по 15 (всего 18)
  • Модератор Yuri

    (@yube)

    ну с тэгами и страницами автора разобрался без проблем, единственная загвозка, создать разный шаблоны вот таким адресам твой сайт/?m=20090724,\
    твой сайт/?m=20090601, taxonomy.php что то не получается подкрутить,не понятно пока как прописать, если брать отсюда то куда не шло term_taxonomy_id, но это все равно немного не то, подскажи как сделать это

    Нет или я торможу или действительно невозможно сделать это. Вот страницы типа /?page_id=,/?cat=,/?tag=,/?author без проблем можно создать что хочешь. А вот со страницами типа /?m= не могу никак разобраться, и в иерархии смотрел, может не то вижу, как говорят смотрю в книгу — вижу фигу. Подскажите, какой файлик править. Все перепробовал вроде, не получается, даже не получается вывести отдельный шаблон /?m=2009, все равно все /?m=любой какой есть, все завязаны на archive.php. Даже так пробовал archive-2009.php — нет, наверное не то не работает
    P.S. Ю.Б. Ткни еще раз, где почитать,(иначе закрою сайт и напишу в закрытии сайта прошу винить Ю.Б. )

    Модератор Yuri

    (@yube)

    Одним больше, одним меньше — мне по барабану. Закрывайте хоть все, включая Фкантакте и Одноквасников :)))

    Смотрим wp-includes/theme.php и видим:

    function get_archive_template() {
    	return get_query_template('archive');
    }

    в то время как у, скажем, get_author_template() есть фрагмент

    if ( $author )
    		$templates[] = "author-{$author}.php";
    	if ( $author_id )
    		$templates[] = "author-{$author_id}.php";

    Из чего делаем вывод, что архив — он и в Африке архив.

    Что делать? Копать глубже.

    Смотрим на функцию get_query_template():

    function get_query_template($type) {
        $type = preg_replace( '|[^a-z0-9-]+|', '', $type );
        return apply_filters("{$type}_template", locate_template(array("{$type}.php")));
    }

    и видим хук «{$type}_template». Учитывая, что для архива параметром является ‘archive’, делаем вывод, что повесив фильтр на хук ‘archive_template’, мы можем вместо archive.php подсовывать темплейтеру нужные нам файлы-шаблоны. Пишем фильтр в function.php Темы, ловим и душим багов и в конце концов наслаждаемся желанным результатом.

    Урок окончен. Все свободны.

    пробую через add_filter(«archive_template», «mifiltre»)? однако не могу правильно прописать сам фильтр(с утра мозги крутит) при каком значении он должен подсовывать один шаблон, а в каком другой, вот например /?m=2009 и другой /?m=20090101? как там прописать? что бы при выводе этих адресов он срабатывал. Что сложно пока в этом направлении у меня

    Модератор Yuri

    (@yube)

    Думаю, что нужно проверять что-то в $wp_query->query_vars. Что именно и как — разбирайтесь сами, иначе, если я начну копать, это уже будет не бесплатная консультация, а работа;)

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Посмотрите внимательнее секцию «Отображение даты».

    Что то трудновато у меня идет, ладно придется пока оставить, единственное, что можно пожелать разработчикам, что бы архивы были так же настраеваемы как категории или страницы автора. Спасибо всем, буду хоть примерно знать, где нужно копать. В отображениях даты ничего толком не нашел, сайт ищет archive.php и не могу прервать это, и тем более указать, что при этом надо искать это, а при том -то.Фильтр пробовал, то фатал выдает, то не работает вообще, а фильтр в function.php темы вообще никак не срабатывает. У архивов нет id и нет slug, в фильтре не к чему не привяжешься, может по месяцам,и годам, то тогда то же не выходит, например указать вывести то что меньше 2009 года это куда не шло, а вот если год на сайте архивов только один, а раскидать по месяцам не выходит, как прописать меньше 2 месяца. Блин, извините за флуд, что то загнался. Будем искать, в поиске решения пока не видел, ни на одном блоге.
    P.S. Или я его подкручу или он меня скрутит окончательно, скорее всего второе.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Вы пробовали создать date.php?

    да я создал его положил в директории там где и archive.php но переход по этому адресу /?m=2009 никак не реагирует на это файл, или при создания файла data.php что то не так, может в него нужно что то определеное прописывать

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    data.php — не то же самое, что date.php.

    Извини Сергей, тогда не пойму о каком файле идет речь, куда его поместить и что там должно быть прописано, я думал ты из иерархия шаблонов имеешь ввиду. Никакой другой файл я не создавал

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Да, из иерархии шаблонов. Проверил на локальной установке:
    1. Создал date.php (не data.php!) в каталоге текущей темы.
    2. Убедился, что при открытии /?m=2009 отобразился именно он.

    да отобразился именно он, все нормал,(действительно date.php совсем не data.php). Отобразился нормально, но вот что с другими подобными файлами делать типа /?m=20090301, как заставить его видеть другой шаблон, на рисунке в иерархии для него нет ни id ни slug, как же решить эту проблему без вмешательство в движок, или все равно придется прикручивать

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Если нужны отдельные шаблоны для архивов за год, месяц и день, в этом же date.php можно написать примерно так (предварительно создав файлы):

    <?php
    if ( is_year() )
    	include 'date-year.php';
    elseif ( is_month() )
    	include 'date-month.php';
    elseif ( is_day() )
    	include 'date-day.php';
    ?>

Просмотр 15 ответов — с 1 по 15 (всего 18)
  • Тема «Отдельные шаблоны для архивов» закрыта для новых ответов.