私は投稿のメタキー "Due"を持っています....投稿が期限切れになった場合(現在の日付を過ぎているかそれと等しくない)、それは件数に表示されません(件数を表示するコードがあります。例えば、今のところは89を持っていると言っていますが、残りは期限切れになっているので、実際は26しかないはずです....では、カウントが表示される前にどうすれば投稿を除外できますか?
これが私のコードです:
<?php
$categories = get_categories('hide_empty=0&exclude=13,1,1460&orderby=count&order=DESC&number=6');
if (!empty($categories)) {
$i = 0;
foreach ($categories as $cat) {
$class = ( $i % 3 ) ? 'span4' : 'span4';
$thumbnail_id = get_option('seamless_term_thumb_' . $cat->term_id);
$image = wp_get_attachment_url($thumbnail_id);
get_the_category()
?>
<div class="<?php echo $class . ' ' . 'category-' . $cat->term_id;?>">
<div class="thumb one">
<?php
echo '<a href="' . get_field('category_link', $post->ID) . '">' . '<div class="two">' . $cat->count . '</div>' . '</a>';
?>
<a href="<?php echo get_field('category_link', $post->ID); ?>">
<img src="<?php echo $image; ?>" alt="<?php echo get_cat_name($cat->term_id); ?>" class="item-image">
</a>
</div> <!-- end .thumb -->
</div>
<?php $i++; } } ?>
これは、新しくて更新されたコードですが、たくさんのクエリを作成しました。
/**
* Function to list all category with thumbnail custom link, etc..
*
* How to use this function:
* Add in template: <?php my_category_list(); ?>
*
*/
function my_category_list(){
/* LIST OF CATS DATA */
$cats_data = array();
/**
* Get Categories
* @link http://codex.wordpress.org/Function_Reference/get_categories
*/
$cat_args = array(
'hide_empty' => 0,
'exclude' => '13,1,1460'
);
$categories = get_categories( $cat_args );
/* If category found, load list of category */
if ( !empty( $categories ) ) {
$i = 0;
/* Foreach category: display the data */
foreach ( $categories as $cat) {
/* ======= HTML CLASS ========= */
/* dynamic class (?) need fix */
$class = ( $i % 3 ) ? 'span4' : 'span4';
$classes = $class . ' ' . 'category-' . $cat->term_id;
/* ======= POST COUNT ========= */
/* Get all posts in category + in due date
* this only to get the post count.
* @link http://themehybrid.com/support/topic/issue-with-filtering-due-meta-key
*/
$query_args = array(
'post_type' => 'post',
'category_name' => $cat->slug,
'meta_query' => array(
array(
'key' => 'Due',
'value' => date( 'Ymd' ),
'type' => 'DATE',
'compare' => '>=', // greater than or equal to
)
)
);
$my_query = new WP_Query( $query_args );
$post_count = $my_query->found_posts;
/* ====== CATEGORY THUMBNAIL ======== */
$thumbnail_id = get_option('seamless_term_thumb_' . $cat->term_id);
$image = wp_get_attachment_url($thumbnail_id);
/* ====== LINK TO SEARCH: no need fields ======= */
$link_to = 'http://www.scholarships360.org/discover/?search_query=&orderby=blank&tax_category=' . $cat->slug .'&wpas=1';
/* MERGE DATA IN ARRAY */
$cats_data[] = array(
'classes' => $classes,
'post_count' => $post_count,
'image' => $image,
'name' => $cat->name,
'link' => $link_to,
);
$i++;
} // end foreach
/**
* NOW THE FUN PART
* =================
*/
/* Sort Cat Data by Post Count */
usort($cats_data, 'my_sort_cat_data');
/* Cut only 6 item to display */
$cats_data = array_slice( $cats_data, 0, 6 );
/* Display it */
foreach ($cats_data as $cat_data ){ ?>
<div class="<?php echo $cat_data['classes'];?>">
<div class="thumb one">
<a href="<?php echo $cat_data['link'] ?>">
<div class="two"><?php echo $cat_data['post_count'] . ' Scholarships' ?></div>
</a>
<a href="<?php echo $cat_data['link'] ?>">
<img src="<?php echo $cat_data['image']; ?>" alt="<?php echo esc_attr( $cat_data['name'] ); ?>" class="item-image">
</a>
</div> <!-- end .thumb -->
</div>
<?php
}
}
/* No category found */
else {
echo '<p>No category found...</p>';
}
}
/**
* Sort Cat Data Helper Function
* @link http://stackoverflow.com/questions/2699086/sort-multidimensional-array-by-value-2
*/
function my_sort_cat_data( $a, $b ){
return $b['post_count'] - $a['post_count'];
}
@ Jagst3r15で指摘されているように、メタキーを保持している投稿を除外するために、各カテゴリの投稿をループする必要があります。
大まかな答えとして、postsテーブルをどのように取り込むかの例として、_pad_term_counts()
で発生するINNER JOIN
ロジックを調べることをお勧めします。次に、get_terms
フックをフィルタリングしてそれらの結果をループ処理し、不要なものを除外します。
残念ながら、それほど単純ではない答えを持つ良い質問です。