2010-05-07 9 views
3

Existe-t-il un moyen d'exclure une catégorie de wp_get_archives? J'essaie de montrer les mois dans la barre latérale, mais je veux exclure les articles qui ne sont pas des entrées de blog.Exclure la catégorie de wp_get_archives?

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

Répondre

0

wp_get_archives() ne dispose pas d'un mécanisme permettant d'exclure en fonction de la catégorie - il est purement pour les archives basées sur le temps (annuel, mensuel, journalier, hebdomadaire) ou des archives « chaque poste »: postbypost ou poste par poste commandés par titre de l'article.

0

Il existe différentes façons de travailler avec les archives de la catégorie: WordPress › Support » Limit archives to category/date archives for category

J'utilise Archives Clean Reloaded WordPress › Clean Archives Reloaded « WordPress Plugins et exclure certaines catégories autour de la ligne 200:

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

L'un de ces travaux fonctionne-t-il? – markratledge

0

Vous pouvez regarder dans get_categories et se pencher vers votre propre solution personnalisée. Bien que cela puisse vous coûter un peu plus de temps et de travail; vous aurez en effet le résultat d'avoir un contrôle total sur ce que vous essayez d'atteindre.

0

Pouvez-vous utiliser un crochet de filtre sur pre_get_posts à la place?

Je sais que quelque chose comme cela fonctionne pour is_author, is_home et is_feed ...

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

add_filter('pre_get_posts', 'exclude_stuff'); 

dépend si vous pouvez le faire pour quelque chose comme is_archive ou is_monthly

Vous chuterait que dans un fichier php avec un en-tête de plugin:

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

télécharger ensuite dans votre répertoire Plugins et l'activer.

2

Vous pouvez écrire un filtre dans votre fichier functions.php qui modifiera le comportement par défaut de la fonction 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

copié-collé dans mes fonctions.php 6 ans plus tard et ça marche toujours! –

+0

en fait, je le reprends. Cela ne fonctionne que si le poste a * seulement * cette catégorie exclue, et pas d'autres. –

5

Utilisez cette option si vous souhaitez inclure uniquement des catégories spécifiques pour la fonction wp_get_archive dans votre functions.php de votre répertoire thématique

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

Placez le code ci-dessous juste après Ce code fonctionne pour moi déjà :)

<?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

Cela fonctionne pour la boucle principale, pas pour la fonction wp_get_archives() –

1

a couru dans ce problème dans un projet, mais jamais trouvé une solution en ligne - le mien est pas la plus jolie PHP, mais il fait le tour.

Ceci est un jeu du filtre suggéré par Katie, que j'ai rencontré dans quelques forums de support. Cela va dans votre 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)"; 

} 

Dans la deuxième fonction, swap taxonomy-name pour le nom de votre taxonomie personnalisée réelle. Tous les ID des termes de votre taxonomie personnalisée sont capturés dans une chaîne; le reste fonctionne comme la fonction d'origine - seule la liste des catégories de votre taxonomie personnalisée est incluse dans la liste wp_get_archives(). Vous pouvez également modifier le code pour les exclure également (premier exemple ci-dessus).

Si vous souhaitez qu'une seule instance de la liste wp_get_archives() le fasse, ignorez simplement les deux premières lignes de code de votre functions.php qui appliquent les filtres. Ensuite, lorsque vous utilisez la balise wp_get_archives(), appliquer les filtres avant, et les enlever ensuite:

<?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

Il n'y a pas un moyen officiel de le faire. Mais j'ai essayé et testé beaucoup de bloc de code et seulement celui-ci a fonctionné pour moi.

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)"; 
} 

Remplacez your_category_id par l'ID d'origine de votre catégorie de message et le code fonctionnera.

Questions connexes