2010-05-07 4 views
3

Есть ли способ исключить категорию из wp_get_archives? Я пытаюсь показать месяцы на боковой панели, но я хочу исключить сообщения, которые не являются блогами.Исключить категорию Из wp_get_archives?

$catID = get_cat_id('Projects'); 
$variable = wp_get_archives('type=monthly&show_post_count=1); 
echo $variable; 

ответ

0

wp_get_archives() не имеет механизма для исключения на основе категории - это чисто для архивов на основе времени (ежегодно, ежемесячно, ежедневно, еженедельно) или «каждый пост» архивы: postbypost или пост по почте по заказу Заголовок поста.

0

Существуют различные способы работы с категории архивов: WordPress › Support » Limit archives to category/date archives for category

Я использую Clean Archives Reloaded WordPress › Clean Archives Reloaded « WordPress Plugins и исключающие категории вокруг линии 200:

// Get a simple array of all posts 
$rawposts = get_posts('numberposts=-1&category=-4,-6,-7,-9'); 
+0

Любая из этих работ? – markratledge

0

Вы можете посмотреть, чтобы get_categories и склоняются к ваше собственное решение. Хотя это может стоить вам немного больше времени и работы; вы действительно получите результат полного контроля над тем, чего вы пытаетесь достичь.

0

Вместо этого вы можете использовать крючок фильтра на pre_get_posts?

Я знаю, что-то вроде это работает для is_author, is_home и is_feed ...

function exclude_stuff($query) { 
    if ($query->is_author) { 
     $query->set('cat', '-4, -142'); 
    } 
    return $query; 
} 

add_filter('pre_get_posts', 'exclude_stuff'); 

зависит от того, может ли это сделать что-то вроде is_archive или is_monthly

Вы бы уронить, что в php с заголовком плагина:

<?php 
/* 
* Plugin Name: exclude some stuff 
* Description: blah 
* Author: blah 
* Plugin URI: blah 
* Version: 0.9 
* ======================================================================= 
*/ 
    Put the function here 
?> 

Затем загрузите его в свой каталог плагинов и активируйте его.

2

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

add_filter('getarchives_where', 'customarchives_where'); 
add_filter('getarchives_join', 'customarchives_join'); 

function customarchives_join($x) { 

    global $wpdb; 

    return $x . " 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)"; 

} 

function customarchives_where($x) { 

    global $wpdb; 

    $exclude = '1'; // category id to exclude 

    return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id NOT IN ($exclude)"; 

} 
+0

скопирован в мои функции.php 6 лет спустя, и он все еще работает! –

+0

На самом деле, я забираю его обратно. Это работает только в том случае, если сообщение имеет * только *, что исключало категорию, и никто другой. –

5

Используйте это, если вы хотите включить только определенные категории для wp_get_archive функции в вашем functions.php вашей темы каталога

add_filter('getarchives_where', 'customarchives_where'); 
add_filter('getarchives_join', 'customarchives_join'); 

function customarchives_join($x) { 

    global $wpdb; 

    return $x . " 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)"; 

} 

function customarchives_where($x) { 

    global $wpdb; 

    $includes= '14'; // category id to include 
    return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id = '$includes'"; 

} 
0

Поместите код ниже только после Этот код работает для меня уже :)

<?php 
if ($wp_query->is_archive){ 
$wp_query->query_vars["cat"] = 14; // only the category that you want to inlcude 
$wp_query->query_vars["posts_per_page"] = 10; // for number of posts you want 
$wp_query->get_posts();} 
?> 
+0

Это работает для основного цикла, а не для функции wp_get_archives() –

1

столкнулся с этой проблемой в проекте, но не нашел решения онлайн - мой не симпатичная PHP, но это делает трюк.

Это игра с фильтра, предложенная Кэти, с которой я столкнулся в нескольких форумах поддержки. Это идет в вашем functions.php:

add_filter('getarchives_where', 'customarchives_where'); 
add_filter('getarchives_join', 'customarchives_join'); 

function customarchives_join($x) { 

    global $wpdb; 

    return $x . " 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)"; 

} 

function customarchives_where($x) { 

    global $wpdb; 

    $categories = get_terms('taxonomy-name', 'orderby=id'); 
    $includeIds; 
    $i = 0; 
    foreach($categories as $category) { 
     if($i != 0) $includeIds .= ','; 
     $includeIds .= $category->term_id; 
     $i++; 
    } 


    return $x . " AND $wpdb->term_taxonomy.taxonomy = 'taxonomy-name' 
    AND $wpdb->term_taxonomy.term_id IN ($includeIds)"; 

} 

Во второй функции, поменять taxonomy-name на имя вашего фактического пользовательского систематики.

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

Если вам нужен только один экземпляр списка wp_get_archives(), просто пропустите верхние две строки кода в functions.php, которые применяют фильтры. Затем, когда вы используете wp_get_archives() тег, применять фильтры перед ним, и удалить их потом:

<?php 
add_filter('getarchives_where', 'customarchives_where'); 
    add_filter('getarchives_join', 'customarchives_join'); 

    wp_get_archives(); 

    remove_filter('getarchives_where', 'customarchives_where'); 
    remove_filter('getarchives_join', 'customarchives_join'); 
?> 
0

Существует не официальный способ сделать это. Но я пробовал и тестировал много блока кода, и только этот работал для меня.

add_filter('getarchives_where', 'customarchives_where'); 
add_filter('getarchives_join', 'customarchives_join'); 

function customarchives_join($x) { 
    global $wpdb; 
    return $x . " 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)"; 
} 

function customarchives_where($x) { 
    global $wpdb; 
    $include = 'your_category_id'; // category id to include 
    return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id IN ($include)"; 
} 

Замените your_category_id исходным идентификатором вашей должности и код будет работать.

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