2013-10-14 2 views
1

Я управляю сайтом (www.teknologia.no) running Wordpress. Как вы можете видеть на первой странице, у меня есть «главная/отличная» статья в верхней части страницы, показывающая последнюю запись из определенной категории. И под ним у меня есть основной цикл, показывающий все последние сообщения из всех категорий.Исключить только первое сообщение из одной категории из последних сообщений feed, wordpress

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

Мой вопрос в том, что мой заголовок говорит: Как я могу исключить последнее или последнее сообщение из определенной категории из всех сообщений в ластестве.

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

Надеется, что вы можете сэкономить время и помочь мне :)

ответ

3

Вам нужно будет обновить логику шаблона, так что основные скачет цикл вывода поста, подаваемые в верхней части.

Не видя кода шаблона, то трудно быть конкретными, но что-то, как это будет, вероятно, работать:

В верхней части, сохранить идентификатор сообщения, который вы выводите:

$exclude_post_id = get_the_ID(); 

Если вам нужно непосредственно получать идентификатор последней должности в данной категории, а не сохранять его в течение цикла, вы можете это сделать, как это вместо того, чтобы, используя WP_Query:

$my_query = new WP_Query('category_name=my_category_name&showposts=1'); 
while ($my_query->have_posts()): 
    $my_query->next_post(); 
    $exclude_post_id = $my_query->post->ID; 
endwhile; 

Затем в главном цикле, либо изменить the query, чтобы исключить этот пост:

query_posts(array('post__not_in'=>$exclude_post_id)); 

или вручную исключить его внутри цикла, что-то вроде этого:

if (have_posts()): 
    while (have_posts()): 
     the_post(); 
     if ($post->ID == $exclude_post_id) continue; 
     the_content(); 
    endwhile; 
endif; 

Больше информации here, here и here ,

+0

Спасибо, но как я могу убедиться, что последние сообщения цикл всегда проверяет, что $ всегда top_post_id содержат идентификатор последней должности от определенной категории? – Lund

+0

Я предположил, что ваш последний цикл сообщений уже работает - если это так, то вам не нужно - просто сохраните значение, возвращаемое get_the_id() или $ post-> ID внутри цикла с включенными сообщениями, в котором вы выводите top post - это идентификатор выводимого вами сообщения и тот, который вы хотите исключить позже. В основном, когда вы выводите сообщение вверху, сохраните его идентификатор, а затем удалите этот идентификатор позже. –

+0

Проблема заключается в том, что признанная запись получена из другого шаблона с использованием (get_template_part ('includes/feat-slider')). И поэтому выделенный цикл post не находится в том же файле, что и последний цикл сообщений. Поэтому, если есть способ всегда получать идентификатор последнего сообщения в определенной категории. – Lund

0

Инициировать переменный и проверить внутри цикла. Простой способ:

$i=0; 

while(have_posts() == true) 
{ 
++$i; 
if($i==1) //first post 
    continue; 

// Rest of the code 
} 
0

для этого вы можете использовать

query_posts('offset=1'); 

для получения дополнительной информации: blog

0

Метод - 1

$cat_posts = new WP_Query('posts_per_page=1&cat=2'); //first 1 posts 
while($cat_posts->have_posts()) { 
    $cat_posts->the_post(); 
    $do_not_duplicate[] = $post->ID; 
} 

//Then check this if exist in an array before display the posts as following. 
if (have_posts()) { 
    while (have_posts()) { 

    if (in_array($post->ID, $do_not_duplicate)) continue; // check if exist first post 

    the_post_thumbnail('medium-thumb'); 

     the_title(); 

    } // end while 
} 

Метод - 2

query_posts('posts_per_page=6&offset=1'); 
if (have_posts()) : while (have_posts()) : the_post(); 

Этот запрос сообщает, что цикл отображает только 5 сообщений, которые следуют за последним первым сообщением.Важной частью этого кода является «offset», и это волшебное слово делает все это.

Подробнее from Here

1

здесь есть функция, которая делает только что:

function get_lastest_post_of_category($cat){ 
$args = array('posts_per_page' => 1, 'order'=> 'DESC', 'orderby' => 'date', 'category__in' => (array)$cat); 
$post_is = get_posts($args); 
return $post_is[0]->ID; 

}

Использование: сказать, что мой идентификатор категории 22, то:

$last_post_ID = get_lastest_post_of_category(22); 

вы также может передать массив категорий этой функции.

0

Исключить первую из последних пяти сообщений

<?php 
    // the query 
    $the_query = new WP_Query(array(
    'category_name' => 'Past_Category_Name', 
     'posts_per_page' => 5, 
       'offset' => 1 
    )); 
?> 
Смежные вопросы