WordPress получает количество сообщений без использования get_posts ()? - PullRequest
2 голосов
/ 25 января 2010

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

Например, по умолчанию количество отображаемых ссылок на сообщения равно 3. Я хочу показывать ссылку «Просмотреть еще сообщения», только если общее количество сообщений превышает 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 ?>

Ответы [ 3 ]

9 голосов
/ 25 января 2010

Ваш вопрос не совсем понятен, поэтому вот два метода.

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

$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'];

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

cat_terms.term_id = '13'

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

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

cat_terms.term_id = '13'

до

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

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

1 голос
/ 26 января 2010

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

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

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

0 голосов
/ 25 января 2010

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

Если вы не доверяете этому, используйте запрос $ wpdb или PHP / MySQL без оболочки WordPress

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...