Поддержка Проблемы и решения Шаблоны страниц и get_posts

  • Решено awayka

    (@awayka)


    Хочу создать страницы, на которых выводятся заголовки записей, отсортированных по названию, выбранных по определенной метке (тагу).
    Реализовать пытаюсь с помощью шаблонов страниц, создав такой:

    <?php
    /*
    Template Name: Reviews 2010
    */
    ?>
    <?php get_header(); ?>
    	<div id="content" class="narrowcolumn" role="main">
    		<ul>
        		<?php $args = array( 'numberposts' => -1, 'tag' => '2010', 'order'=> 'ASC', 'orderby' => 'title' );
        		$postslist = get_posts( $args );
       		foreach ($postslist as $post){  setup_postdata($post); ?>
            		    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
       		<?php } ?>
    		</ul>
      	</div>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    В данном случае, мне нужно создать порядка 70 страниц и 70 шаблонов для них — каждой свой. Это совершенно не оптимальный способ, так как для каждой страницы меняется лишь один параметр «tag».
    Может ли кто-то подсказать, как сделать один шаблон для всех этих страниц, чтобы только параметр где-то как-то указывался (2010, 2009 и т.д.) и передавался в «tag»?

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

    (@yube)

    Посмотрите это обсуждение. Хотя в случае, когда «хвост» состоит только из цифр (/reviews/2009/), можно, я думаю, получать его значение как номер страницы (той, что получатся от <!--nextpage-->). (Блин, достала уже эта путаница с термином «страница»!)

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

    function add_my_var($public_query_vars) {
        $public_query_vars[] = 'year';
        return $public_query_vars;
    }
    
    add_filter('query_vars', 'add_my_var');
    
    function do_rewrite() {
        add_rewrite_rule('kartinyi/([^/]+)/?$', 'index.php?pagename=kartinyi&year=$matches[1]','top');
    }
    
    add_action('init', 'do_rewrite');

    Вроде здесь нигде не ошиблась. Далее, в указанном обсуждении было написано:
    «В обработчике получаете город вызовом get_query_var(‘gorod’)» — я эту фразу поняла следующим образом: создала шаблон для страницы следующий:

    <?php
    /*
    Template Name: Reviews template
    */
    ?>
    <?php get_header(); ?>
    <div id="content" class="narrowcolumn" role="main">
    <?php
    		$paged = (get_query_var('year')) ? get_query_var('year') : 1;
    		$args = array (
    			'orderby' => 'title',
    			'posts_per_page' => '-1'
    
    			); query_posts($args . '&paged=' . $paged); ?>
    
    			 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 
    
                    	<div>
                        <h4><li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> </h4>
                        	</div>
    
    			<?php endwhile; endif; ?>
    
    <?php if(function_exists('wp_pagenavi')) :  wp_pagenavi();  endif; wp_reset_query();?>
    </div>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    И тут проблемы:
    страница выводит только 10 заголовков-записей, причем последних добавленных на сайт — не зависимо от года. Понятное дело, я нигде не указывала ничего вроде 'tag' => '2010' как в предыдущем шаблоне.
    Если подскажете, что нужно сделать, чтобы был один шаблон, по которому можно было бы выводить разные страницы по одному параметру, буду очень рада…

    Модератор Yuri

    (@yube)

    $paged = (get_query_var(‘year’)) ? get_query_var(‘year’) : 1;
    posts_per_page = -1
    query_posts($args . ‘&paged=’ . $paged);

    Объясните логику. Лучше на пальцах. Если урл такой-то, то это равно… и так далее. Бо моя голова не понимать, как можно просить выбрать сразу все посты и одновременно только 2011-ю «порцию».

    Я за вышеназванный результат совсем не ручаюсь, так как лишь попробовала повторить опыт 🙂
    Хорошо, задача такая:
    есть записи (posts) с метками «год» (1985, 2011, 1943 и т.п.)
    есть страница (page, она указана еще как kartinyi в коде), на которой есть список годов (по-русски, криво звучит, но тут, чтобы понятнее было) — в идеале, каждый год является ссылкой на страницу, шаблон для которой я и пытаюсь создать.
    хочется, чтобы вот эта страница_с_особенным_шаблоном автоматически выводила список записей, которые помечены «годом»

    У меня получилось (в самом начале темы) сделать шаблон для страницы, которая выводит список записей для одного года (конкретно 2010). Вот и пытаюсь выяснить возможно ли и как создать 1 шаблон для множества страниц.

    создать custom taxonomy year (аналог тега),
    создать шаблон архива year.
    Не подходит?

    Пошла изучать новый для меня материал — про таксономию…

    Не простое это дело. Прочитала много… В-общем, вышло у меня пока следующее:
    в functions.php такой код:

    // Custom taxonomy for Year & Director
    
    add_action( 'init', 'build_taxonomies', 0 ); 
    
    function build_taxonomies() {
    register_taxonomy('year', 'post',  array(
    'hierarchical' => false, 'label' => 'Год',
    'query_var' =>  true, 'rewrite' => true));
    
    register_taxonomy( 'Director', 'post', array(
    'hierarchical' => false, 'label' => 'Режиссёр',
    'query_var' => true, 'rewrite' => true ) );
    }

    В админке в разделе «Записи» появились «Год» и «Режиссёр». Добавил в «Год» несколько меток (2009, 2010, 2011). Затем проставила к двум записям «Год» — 2009 и 2010 — но они не отображаются для «выбора» (а вроде как должны — типо рубрик, или я тут не права и это только если выставить иерархикал — тру?), а когда нажимаешь на «Выбрать из часто используемых меток» — пишет «Произошла неопределённая ошибка.»
    А также к одной из записей проставила «Год» 1988, который до этого не задавала конкретно через раздел «Год».

    Далее, создала такой шаблон страницы для вывода записей по 1988 году:

    <?php
    /*
    Template Name: Reviews template
    */
    ?>
    <?php get_header(); ?>
    <div id="content" class="narrowcolumn" role="main">
    <ul><?php the_content(); ?>
    <?php
    $args=array(
      'year' => '1988',
      'posts_per_page' => -1,
    );
    $my_query = null;
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      echo 'Рецензии на фильмы 1988 года';
      while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p></ul>
        <?php
      endwhile;
    }
    wp_reset_query();  // Restore global post data stomped by the_post().
    ?>
    
    </div>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    По такому шаблону ничего не отображается (кроме header, sidebar, footer). При этом, если написать, например, с ошибкой 'Year' => '1988', — то есть с большой буквы, то на этой странице выводятся ВСЕ записи сайта.
    Соответственно, вопросы следующие:
    1. Хорошо бы подсказать, как правильнее использовать эту таксономию в моем случае
    2. В итоге сделать один шаблон, а не множество…

    типо рубрик иерархикал — тру? — ага
    Выбрать из часто используемых меток — должно работать

    как правильнее использовать эту таксономию в моем случае

    случай классический для custom post types
    Пример где custom post «фильм» с таксономиями «режиссёр», «актёр», «год»
    Это, наверное, не так просто, есть плагины, упрощающие процесс
    (Custom Post Type UI и другие)

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

    пример шаблона архива (один а не множество)
    http://mondaybynoon.com/2010/09/06/wordpress-archive-pages-taxonomy/
    и здесь еще подробно
    http://sixrevisions.com/wordpress/taxonomy/
    http://codex.wordpress.org/Template_Hierarchy#Custom_Taxonomies_display

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Тема «Шаблоны страниц и get_posts» закрыта для новых ответов.