2010-01-25 3 views
2

Нужна функция вызова, которая предназначена исключительно для получения количества сообщений, соответствующих критериям. Я считаю, что функция get_posts() слишком дорога для этой операции. Я просто пытаюсь решить, показывать или нет ссылку «Просмотреть больше сообщений», когда есть предопределенное количество сообщений для отображения ...WordPress получает количество сообщений без использования get_posts()?

Например, число ссылок, отображаемых по умолчанию, равно по умолчанию. Я только хочу, чтобы показать «Больше сообщений» ссылку, если общее число сообщений превышает 3.

Вот мой код ...

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

ответ

8

Вы задаетесь вопросом не совсем ясно, так что вот два метода.

Во-первых, если пользователь просматривает страницу категории, и вы хотите отобразить эту информацию, вы можете просто использовать следующее:

$myCount = $wp_query->found_posts; 

Это возвращает число сообщений, найденных в последнем запросе.

Если вы хотите посчитать количество сообщений для каждой категории, скажем, как домашнюю страницу, я бы попробовал ее просто через PHP/MySQL. Вот пример:

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' 

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

echo $row['post_count']; 

или что угодно с данными. Все, что вам нужно сделать, чтобы изменить категории просто изменить последнее предложение WHERE term_id Пункта в

cat_terms.term_id = '13' 

Изменить 13 кошку вы хотели бы рассчитывать.

Если вместо этого вы хотели бы сделать это по категориям имя можно изменить последнюю часть из

cat_terms.term_id = '13' 

в

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

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

+0

Я искал мир для $ wp_query-> found_posts; thx alot <3 – Breezer

0

по состоянию на WordPress 2.5 функция существует для этого: http://codex.wordpress.org/Function_Reference/wp_count_posts

Если вы не tr ust it, используйте запрос $ wpdb или PHP/MySQL без оболочки wordpress

+3

Привет Дэвид, wp_count_posts подсчитывает ВСЕ сообщения. Вам не разрешено указывать «все сообщения в этой категории, а не эту категорию», что важно для моего вопроса. –

0

Вы можете создать собственный WP_Query, в котором вы используете фильтр по адресу posts_fields, чтобы изменить то, что возвращается запросом. Поэтому используйте WP_Query, как обычно, чтобы получить конкретный список сообщений, которые вы используете, и измените поля, которые вытащили, чтобы получить COUNT(wp_posts.ID).

Также не забудьте поменять posts_per_page на -1, чтобы вы получили все сообщения.

Но также, как отмечено выше Дэвидом, объекты запроса будут иметь элемент found_posts, который расскажет вам, сколько всего сообщений соответствует критериям.Таким образом, ваше решение может состоять в том, чтобы использовать полные объекты WP_Query, а не использовать get_posts для получения вашего списка.

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