隐藏列表中的特定类别

时间:2014-09-19 12:19:31

标签: wordpress categories taxonomy custom-taxonomy

我正在研究Wordpress主题。主题是来自premiumpress的Classifieds theme。主题有一个短代码列出所有列表。相应的短代码为[LISTINGS]

短代码的功能如下

/* =============================================================================
    [LISTINGS] - SHORTCODE
    ========================================================================== */
function wlt_page_listings( $atts, $content = null ) {

global $userdata, $wpdb, $CORE; $STRING = ""; $extra=""; $i=1; $stopcount = 4;

extract( shortcode_atts( array( 'query' => '', 'show' => '', 'type' => '',  'cat' => '', 'orderby' => '', 'order' => '', 'grid' => "no", 'featuredonly' => "no"), $atts ) );

   // SETUP DEFAULTS
if(!isset($atts['show']) || (isset($atts['show']) && $atts['show'] == "") ){    $atts['show'] = 5; }
 if($atts['type'] == ""){   $atts['type'] = THEME_TAXONOMY.'_type'; }
if($atts['orderby'] == ""){     $atts['orderby'] = "post_title"; }
if($atts['order'] == ""){   $atts['order'] = "desc"; }

// DEFAULT FOR LIST STYLE
if($grid == "yes"){ 
    $sstyle = "grid_style";  
    $STRING .= '<script language="javascript">jQuery(window).load(function() { equalheight(\'.grid_style .item .thumbnail\');});</script>'; 
}else{ 
    $sstyle = "list_style";
} 

$query= str_replace("#038;","&",$query);

if(strlen($query) > 1){
    // ADD ON POST TYPE FOR THOSE WHO FORGET
    if(strpos($query,'post_type') == false){
    $args = $query ."&post_type=".THEME_TAXONOMY."_type";
    }else{
    $args = $query;
    }

 }elseif($featuredonly == "yes"){ 
 $args = array('posts_per_page' => $atts['show'], 
'post_type' => $atts['type'], 'orderby' => $atts['orderby'], 'order' => $atts['order'],
'meta_query' => array (
        array (
          'key' => 'featured',
          'value' => 'yes',
        )
      ) 
 );

}else{
/*** default string ***/
$args = array('posts_per_page' => $atts['show'], 'post_type' => $atts['type'], 'orderby' => $atts['orderby'], 'order' => $atts['order'] );
}

/*** custom category ***/
if(strlen($atts['cat']) > 1){   
$args = array('tax_query' => array( array( 'taxonomy' => str_replace("_type","",$atts['type']) ,'field' => 'term_id','terms' => array( $atts['cat'] ))), 'posts_per_page' => $atts['show'] );
} 

// BUILD QUERY
$the_query = new WP_Query( hook_custom_queries($args) );

 if ( $the_query->have_posts() ) {

    $STRING .= '<div class="_searchresultsdata"><div class="wlt_search_results row '.$sstyle.'">'; 

    while ( $the_query->have_posts() ) {  $the_query->the_post();  $post = get_post();

    $STRING .= '<div class="item '.hook_gallerypage_item_class('col-md-4').$CORE->FEATURED($post->ID).'">'.hook_item_cleanup(hook_gallerypage_item($CORE->ITEM_CONTENT($post))).'</div>';

    }

    $STRING .= '</div></div><div class="clearfix"></div>'; 

} 
// END QUERY
wp_reset_postdata();

return $STRING;     

}
add_shortcode( 'LISTINGS', array($this,'wlt_page_listings') );  

短代码没有隐藏某些类别的属性。我需要显示所有列表,但婚礼类别除外,这是一个自定义分类。有没有办法用上面的代码呢?

这样的事情会起作用吗?

if ( is_tax( 'listing', 'wedding' ) )  {
do not display the wedding listings and display the rest}

有什么建议吗?

编辑:

这是我的在线网站网址:http://webzer.comxa.com/ 主页面显示了所有的产品。我喜欢拥有所有但不是一个来自婚礼类别因为我有单独的页面列出婚礼类别。

我试过这个,其中51是我的家庭商店页面的页面ID

if ( is_page( 51 ) && is_tax( 'listing', 'wedding' ) )  {
?><style>.caption {display:none!important;}</style>
<?php } ?>

这也行不通

1 个答案:

答案 0 :(得分:0)

考虑一下:

更改

function wlt_page_listings( $atts, $content = null ) { 

function wlt_page_listings( $atts, $content = null, $exclude=array(99) ) { // 99 is wedding cat id

其中$ exclude是一个可选的排除猫名称数组(为了便于测试/使用,其中有99个)

然后在

while ( $the_query->have_posts() ) { 

添加如下内容:

$post = get_post(); // get post obj, will use the ID attr
$cats = wp_get_post_categories( $post->ID )); // returns array of IDs for all cats
foreach($exclude as $x){ // loop on the excluded cat ids
    if(in_array($x, $cats))continue; // if excluded skip
}

http://codex.wordpress.org/Function_Reference/wp_get_post_categories

我认为这会起作用或至少让你接近。

display:none是坏mojo,因为内容仍然在您的源代码中,供其他人查看。

我希望我能正确地为你解决问题,欢呼。