2014-01-20 4 views
0

Я закодировал пользовательский архив для блога на основе Wordpress на основе отличного кода HERE.Наполнение пользовательского почтового архива WordPress Исключая определенные категории сообщений

В принципе, то, что он делает:

Custom archive image from www.wpbeginner.com

Но мне нужно найти способ фильтрации из архивов определенных должностей, которые подпадают под категории, которые не должны быть archiveable. Например, если категория «Разные идеи» содержит записи, которые на самом деле не являются сообщениями, владелец блога не хочет, чтобы они были доступны в почтовом архиве.

Я искал все и не могу найти то, что работает для меня. Я думаю, что-то в THIS источник может мне помочь, но я тестирую материал и не могу заставить что-то работать для меня. Поэтому я обращаюсь к вам, ребята. Возможно, у вас есть идея ...

Код PHP Я сейчас довольно прост. Очевидно, проблема заключается в фильтрации сообщений в самом запросе, но я не могу найти запрос, который работает для меня.

Плюс/минус мелкие недочеты, которые я сделал к нему для того, чтобы удовлетворить конкретные потребности, это в основном код, полученный из первого источника дают здесь:

global $wpdb; 
$limit = 0; 
if(is_date()) { 
    $year_now = get_the_time('Y'); 
} else { 
    $year_now = date('Y'); 
} 
$year_prev = null; 
$months = $wpdb->get_results("SELECT DISTINCT MONTH(post_date) AS month , YEAR(post_date) AS year, COUNT(id) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now() and post_type = 'post' GROUP BY month , year ORDER BY post_date DESC"); 
foreach($months as $month) : 
$year_current = $month->year; 
if ($year_current != $year_prev){ 
    if ($year_prev != null){ 
     // Do nothing 
    } 

    /* BREAK PHP HERE FOR SOME HTML */ 
    <li class="archive-year"><a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/"><?php echo $month->year; ?></a></li> 
    /* BACK ON REGULAR PHP */ 

} 
if($year_current == $year_now) { 

    /* BREAK PHP HERE FOR SOME HTML */ 
    <li class="archive-month"><a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"><span class="archive-month"><?php echo date_i18n("F", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span></a></li> 
    /* BACK ON REGULAR PHP */ 

} 
$year_prev = $year_current; 
endforeach; 

ответ

0

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

SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year, COUNT(id) as post_count FROM $wpdb->posts 
INNER JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) 
INNER JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
WHERE $wpdb->term_taxonomy.term_id != X AND $wpdb->term_taxonomy.parent != X 
AND $wpdb->term_taxonomy.term_id != Y AND $wpdb->term_taxonomy.parent != Y 
AND $wpdb->term_taxonomy.term_id != Z AND $wpdb->term_taxonomy.parent != Z 
AND $wpdb->term_taxonomy.taxonomy = 'category' 
AND $wpdb->posts.post_status = 'publish' 
AND $wpdb->posts.post_type = 'post' 
AND post_date <= now() and post_type = 'post' GROUP BY month , year ORDER BY post_date DESC 

Где X, Y и Z должны быть заменены номерами категории ID. (Вы можете найти их, перейдя в раздел Wp-admin, где вы редактируете свои категории и зависаете над теми категориями, которые вы хотите скрывать от пользовательского архива, вы увидите, что URL-адрес ссылки имеет часть &tag_ID=#, где # является номер категории.)

Ну, это было просто отлично. Надеюсь, это может помочь кому-то!

Смежные вопросы