ポートフォリオをアップグレードするときに、投稿タイプの(現在の)カテゴリに含まれる投稿の数を示すものを探しています。
例:私は「機能」を持つカテゴリがあります。各機能には独自の説明、アプリ関連、ブログ関連の投稿ページがあります
現在のカテゴリを取得しています:
<?php $cat_id = get_query_var('cat'); ?>
との投稿を取得:
<?php query_posts("post_type=apps&cat=$cat_id&showposts=3");?>
Post_type = appsとcategory = $ cat_idの投稿を数えるにはどうすればいいですか?
PHP/WPの経験が足りないのが残念です。2つのことをうまく動かす方法を誰かが知っていますか?
前もって感謝します。
category
はすでに組み込まれている分類法です。したがって、 get_terms( $tax, array( /* args */ ) );
を使用して用語カウントを取得するのは非常に簡単です。
$terms = get_terms( 'category', array(
'fields' => 'count',
) );
これはかなり速いCOUNT (*)
クエリを実行するので、パフォーマンスについて心配する必要はありません。
get_terms()
を普通に呼び出してから、フィルタを使ってselects
を変更することもできます。
// The core filter:
apply_filters( 'get_terms_fields', $selects, $args )
// Example callback:
add_action( 'get_terms_fields', 'wpse105174_get_terms_fields_cb', 10, 2 );
function wpse105174_get_terms_fields_cb( $selects, $args )
{
return array( 't.term_id', 'COUNT(*)' );
}
... $selects
は配列です(これはカンマ区切りの文字列に分解されます)。
その後、クエリをさらに修正し、WHERE t.slug = whatever
を使用して特定のカテゴリ(用語/分類群)のみに制限することができます。
// The core filter:
apply_filters( 'terms_clauses', compact( $pieces ), $taxonomies, $args );
// Example callback:
add_action( 'terms_clauses', 'wpse105174_terms_clauses_cb', 10, 3 );
function wpse105174_terms_clauses_cb( $pieces, $taxonomies, $args )
{
$pieces['where'] = " WHERE t.slug = whatever";
// Or do some `str_replace`, `preg_replace`, whatever fits in here
return $pieces;
}
$pieces['join'] = '';
-テーブルにアクセスする必要がない場合は、term_taxonomy
も設定できます。
最後に Transients API を使用して結果を(直列化された配列として)DBに保存することができるので、必要なときに毎回カウントを問い合わせる必要はありません。
投稿数は、このようなことのためにカテゴリオブジェクトにキャッシュされます。カテゴリアーカイブでは、次のようなものが最も簡単です。
$category = get_queried_object();
// $category->count has count
そのループを介してカテゴリ内のすべての投稿を取得しようとしている場合は、すべてにposts_per_page=-1
、-1
を使用し、posts_per_page
をshowposts
に置き換えてください。
カテゴリアーカイブへのリンクを作成するには、 get_category_link()
functionを使用します。
最初は多少のトラブルがありましたが、これは私にとってはうまくいきます。
<?php $posts = get_posts("post_type=apps&cat=$cat_id");
$count = count($posts);
echo "$count";
?>