get_terms()
没有内置的功能来排除草稿帖子,因为它只跟踪学期附加到的帖子总数。我快速搜索了一下,找到了这个片段,但是be warned:
它影响所有人get_terms()
网站上的功能(我排除了管理区域)中有一个SQL查询foreach
循环-它将影响性能返回更多术语==
更大的性能冲击我不建议在live网站上测试它,如果你的流量不是超高的话,你可能会侥幸逃脱。这可能就是为什么没有本地支持的原因——要么是循环查询,要么是WordPress需要跟踪草稿和公共帖子的数量,这也不完美。
SOURCE
这是一个非常粗糙的解决方案,我自己不会使用它。它可能也需要很少的修改。
如果您愿意尝试,请将此添加到functions.php
:
<小时>
// Make sure that we\'re not in admin area
if( ! is_admin() ) {
add_filter( \'get_terms\', \'hide_draft_terms\' );
function hide_draft_terms( $terms, $taxonomies, $args ) {
global $wpdb;
$taxonomy = $taxonomies[0];
if( ! is_array( $terms ) && count( $terms ) < 1 )
return $terms;
$filtered_terms = array();
foreach ( $terms as $term ) {
$result = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts p JOIN $wpdb->term_relationships rl ON p.ID = rl.object_id WHERE rl.term_taxonomy_id = $term->term_id AND p.post_status = \'publish\' LIMIT 1" );
if ( intval( $result ) > 0 ) {
$filtered_terms[] = $term;
}
}
return $filtered_terms;
}
}