• Есть задача вывести три блока с новостями (скорее всего упакую в < div >). В каждом блоке будут новости только из определенной категории. Но условие:

    <?php if(have_posts()): ?>
    <?php while(have_posts()) : the_post(); ?>

    Можно использовать только раз на странице (как не извращался, больше не дает…)

    В итоге, как разбить публикацию новостей блоками на главной и возможно ли это вообще?

    Попробую объяснить популярнее. Создается три рубрики, в каждую рубрику публикуются уникальные материалы. Задача вывести заголовки этих материалов с пермалинком на главную страницу (index.php) в виде трех списков, поместив их в три разных diva. Вывести разумеется не статически. К слову код:
    <?php if (is_home()) { query_posts($query_string.'&cat=ID&showposts=5'); } ?>
    Тоже весьма не удобен… Если кто-то предложит изящное решение, ну или вообще какое-нибудь решение буду рад!

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Можно использовать get_posts или wp_get_recent_posts()
    Можно через шорткоды оформить, назначить (или создать) шаблон для главной страницы и подставлять туда свои теги..
    Вариантов достаточно, вам остается только прочитать, понять и использовать. 😉

    Большое спасибо. Насколько я понимаю для вызова шорткода надо задать функцию <?php add_shortcode(); ?> но с какими параметрами? Для остального не нашел как вывести списком только заголовки с пермалинком, выводит целиком текст…

    <?php wp_get_recent_posts(); ?> выглядит как-то предпочтительнее, но опять же как обрубить текст?

    но опять же как обрубить текст?

    Не понял, какой текст?

    Полный текст материала, нужно вывести только заголовок.

    А пример не помогает? 🙂

    Все, разобрался. Сейчас попробую разобраться в выводом категорий… Большое спасибо.

    Теперь другая проблема, как вывести в третьем блоке помимо заголовка, еще цитату (the_excerpt) и миниатюру (the_post_thumbnail)?

    Опять же:

    <?php if(have_posts()): ?>
    <?php while(have_posts()) : the_post(); ?>

    Не работает…

    Вывел через:
    <?php query_posts();
    while ( have_posts() ) : the_post();
    <!— блок —!>
    endwhile;
    wp_reset_query();

    ?>

    Новая проблема, через этот код вставка любого <div> для выравнивания приводит к ошибке:
    Parse error: syntax error, unexpected ‘<‘ in \index.php on line XX

    Путем долгих проб и ошибок сделал так:

    <div id="maket">
    <?php get_header(); ?>
    <?php get_sidebar(); ?>
    <div id="right">Менюшка, ога</div>
    <div id="maincol">
    <div id="mainnews"><h1>Главное новости:</h1>
    <ul>
    <?php
    $n=5;
    $recent = new WP_Query("showposts=$n");
    while($recent->have_posts()) : $recent->the_post();
    ?>
    <li><div class="onepost">
    <div class="postimg"><?php the_post_thumbnail(); ?></div>
    <h2 class="posttitle"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
    <div id="clr"></div>
    <div class="postprev"><?php the_excerpt(); ?></div>
    </li><div id="clr"></div>
    <?php endwhile; ?>
    </ul></div></div>
    <div id="newslineone"><h1>Recent Posts:</h1>
    <div id="clr"></div>
    <h2><ul>
    <?php
    	$args = array('numberposts'=>'10', 'category' => '14');
    	$recent_posts = wp_get_recent_posts($args);
    	foreach($recent_posts as $recent){
    		echo '<li><a href="' . get_permalink($recent["ID"]) . '" >' .   $recent["post_title"].'</a> </li> ';
    	}
    ?>
    </ul></h2></div>
    <div id="newslinetwo">
    <h1>Recent Posts2:</h1>
    <div id="clr"></div>
    <ul>
    <?php
    	$args = array('numberposts'=>'10', 'category' => '15');
    	$recent_posts = wp_get_recent_posts($args);
    	foreach($recent_posts as $recent){
    		echo '<li><a href="' . get_permalink($recent["ID"]) . '" >' .   $recent["post_title"].'</a> </li> ';
    	}
    	?>
    
    </ul></div><?php get_footer(); ?></div>

    Css:

    body, html {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px;
    }
    h1{
    	font-family:Arial, Helvetica, sans-serif;
    	font-size:14px;
    	font-weight:bold;
    }
    h2{
    	font-family:Arial, Helvetica, sans-serif;
    	font-size:12px;
    	}
    #maket {
    height:100%;
    width:1200px;
    margin:0 auto;
    }
    #search{
    padding-top:20px;
    float:right;
    }
    #header{
    }
    #links{
    height:18px;
    font-family:Verdana, Arial, Helvetica, sans-serif;
    border:solid 1px #000000;
    background:url(img/links.png);
    }
    #left{
    font-family:Geneva, Arial, Helvetica, sans-serif;
    font-size:12px;
    height:100%;
    background:#2288FF;
    border: solid 1px #000000;
    width:160px;
    float:left;
    }
    #right{
    background:#666666;
    width:200px;
    float:right;
    }
    #maincol{
    background:#555555;
    
    margin-left:175px;
    margin-right:215px;
    margin-top:10px;
    width:810px;
    }
    #mainnews{
    border-bottom:1px solid #FF3333;
    }
    #mainnews a{
    color:#000000;
    font-size:12px;
    font-weight: bold;
    }
    #clr{
    margin-top:10px;
    background:#CCCCCC;
    }
    .onepost{
    background:#CCCCCC;
    width:810px;
    height:100px;
    }
    .postimg{
    width:120px;
    float:left;
    }
    .posttitle{
    width:660px;
    margin-left:150px;
    }
    .postprev{
    width:660px;
    margin-left:150px;
    }
    #newslineone{
    margin-left:15px;
    margin-top:10px;
    height:300px;
    border-right: solid 6px #2288FF;
    width:390px;
    float:left;
    }
    #newslinetwo{
    margin-top:10px;
    height:300px;
    width:400px;
    margin-left:10px;
    float:left;
    }
    #footer{
    background:url(img/links.png);
    width:1200px;
    position:fixed; bottom:0;
    }

    Не могу понять где тот самый потерянный <div> из-за которого #maincol заканчивается не у футера…

    Не могу понять где тот самый потерянный <div> из-за которого #maincol заканчивается не у футера…

    Закрывающий тег для #maincol находится перед строкой <div id="newslineone"><h1>Recent Posts:</h1>

    Простой перенос дива в низ же ничего не даст… Пока выровнял два нижних блока относительно края maket, но все равно как-то не хорошо это, кажется… Ибо если #left окажется длиннее странице, всему выравниванию каюк. Что же делать?

    Каким образом можно сделать еще одну колонку? И вызывать ее по типу функций get_sitebar, где вместо sitebar будет название документа (скорее всего .php же?) с кодом?

    Не совсем поняла, что вы выравниваете и в чём именно заключается вопрос.
    У вас есть три колонки, каждая из которых в блоке. Правильно? Относительно чего вы хотите их выравнивать?

    P.S.: Sidebar пишется через «b». Это не от слова «сайт», а от слова «сторона».

    Каюсь. Опечатался.
    170Kb

    Вот на этом изображении виднее.

    Проблема была в том что новости с миниатюрами наезжали одна на другую и получалась некая лесенка вверх тормашками + нижние блоки только с заголовками уезжали к краю страницы, вместо того что-бы оставаться в центре. То есть выравнивание шло от края страницы, а не от сайдбара. Сейчас уже все нормально, вроде… Буду тестировать и по ходу убирать косяки.

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

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

    Можно так:
    http://codex.wordpress.org/Function_Reference/get_template_part

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Тема «Вывод новостей из рубрик блоками на главной.» закрыта для новых ответов.