2010-01-25 4 views
2

Vous avez besoin d'un appel de fonction conçu uniquement pour obtenir le nombre de messages correspondant à un critère. Je crois que la fonction get_posts() est trop chère pour cette opération. J'essaie simplement de décider si oui ou non afficher un lien "Afficher plus de messages" quand il y a un nombre prédéfini de messages à afficher ...WordPress obtenir le nombre de messages sans utiliser get_posts()?

Par exemple, le nombre par défaut de liens de publication à afficher est 3. Je veux seulement montrer un lien « Plus de messages » si le nombre total de postes est supérieur à 3.

Voici mon code ...

$cat1=get_cat_ID('test'); 
$cat2=get_cat_ID('test2'); 
$myposts = get_posts(array('cat' => "$cat1,-$cat2",'showposts' => 3)); 
$myposts2 = get_posts(array('cat' => "$cat1,-$cat2")); 
    $mypostcount = count($myposts2); 
foreach($myposts as $idx=>$post) 
?> 
<li><a>Post Info Goes here</a></li> 
<?php 
if ($mypostscount > 3){ ?>Show View All Link<?php ?> 

Répondre

8

Vous n'êtes pas complètement clair, alors voici deux méthodes.

Tout d'abord, si l'utilisateur consulte une page de catégorie et que vous souhaitez afficher ces informations, vous pouvez simplement utiliser les éléments suivants:

$myCount = $wp_query->found_posts; 

qui renverra le nombre de postes trouvés pour la dernière requête.

Si vous voulez compter le nombre de messages pour chaque catégorie, disons pour comme une page d'accueil je voudrais y aller simplement via PHP/MySQL. Voici un exemple:

SELECT COUNT(DISTINCT cat_posts.ID) AS post_count 
FROM wp_term_taxonomy AS cat_term_taxonomy 
INNER JOIN wp_terms AS cat_terms ON cat_term_taxonomy.term_id = cat_terms.term_id 
INNER JOIN wp_term_relationships AS cat_term_relationships ON cat_term_taxonomy.term_taxonomy_id = cat_term_relationships.term_taxonomy_id 
INNER JOIN wp_posts AS cat_posts ON cat_term_relationships.object_id = cat_posts.ID 
WHERE cat_posts.post_status = 'publish' AND cat_posts.post_type = 'post' AND cat_term_taxonomy.taxonomy = 'category' AND cat_terms.term_id = '13' 

Je viens de le tester et cela a fonctionné correctement. Une fois que vous obtenez le retour de la requête saisir tout simplement la ligne, puis procédez comme suit:

echo $row['post_count']; 

ou tout ce que vous aimez avec les données. Tout ce que vous devez faire pour modifier les catégories est simplement changer la dernière clause WHERE term_id

cat_terms.term_id = '13' 

Modifier 13 au chat que vous souhaitez compter.

Si vous plutôt que de le faire par le nom de la catégorie, vous pouvez changer la dernière partie de

cat_terms.term_id = '13' 

à

cat_terms.slug IN ('cookies', 'uncategorized') or cat_terms.slug IN ('cookies') 

Le premier choisira de plusieurs catégories, la seconde à partir de seulement un. Espérons que cela aide,

+0

J'ai cherché dans le monde entier $ wp_query-> found_posts; thx alot <3 – Breezer

0

au 2.5 fonction wordpress existe pour cela: http://codex.wordpress.org/Function_Reference/wp_count_posts

Si vous ne possédez pas ust il, utilisez une requête $ wpdb ou PHP/MySQL sans le wrapper wordpress

+3

Salut David, le wp_count_posts compte TOUS les messages. Vous n'êtes pas autorisé à spécifier "compter tous les messages dans cette catégorie et pas cette catégorie" cependant, ce qui est essentiel pour ma question. –

0

Vous pouvez faire une WP_Query personnalisée dans laquelle vous utilisez un filtre sur posts_fields pour modifier ce qui est retourné par la requête. Donc, utilisez WP_Query comme vous le feriez normalement pour obtenir la liste spécifique des messages que vous recherchez et modifiez les champs qui sont tirés pour obtenir le COUNT(wp_posts.ID).

Assurez-vous également que vous modifiez posts_per_page à -1 afin d'obtenir tous les messages. Mais, aussi, comme indiqué précédemment par David, les objets de la requête auront le membre found_posts qui vous dira combien de messages totaux correspondent aux critères.Votre solution peut donc être d'utiliser des objets WP_Query complets au lieu d'utiliser get_posts pour obtenir votre liste.

Questions connexes