Скрыть определенную категорию в списках

Я работаю над темой Wordpress. Тема Classifieds theme от premiumpress. В теме есть шорткод для вывода всех списков. Соответствующий шорткод - [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}

Какие-либо предложения?

РЕДАКТИРОВАТЬ:

Это URL моего веб-сайта: http://webzer.comxa.com/ На главной странице показаны все продукты . Мне нравится иметь все, кроме одной, из свадебной категории, потому что у меня есть отдельная страница, чтобы перечислить свадебную категорию.

Я пробовал это, где 51 - это идентификатор страницы моей домашней страницы магазина

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

это тоже не сработало


person Community    schedule 19.09.2014    source источник
comment
У меня сейчас нет времени писать код, но для начала вам нужно изменить налоговый запрос внутри шорткода. Я бы предложил создать дочернюю тему и создать свой собственный шорткод из оригинала. Взгляните на кодексную страницу класса WP_Query по налоговым запросам.   -  person Pieter Goosen    schedule 19.09.2014


Ответы (1)


Учти это :

изменение

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

to

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 - плохое моджо, так как контент все еще будет в вашем исходном коде, чтобы его могли увидеть другие.

Надеюсь, я правильно решил проблему для вас, ура.

person Marc    schedule 19.09.2014
comment
Я добавил это, но он показывает некоторые предупреждения. Я попробовал $ post = get_post (); echo $ cats = wp_get_post_categories ($ post- ›ID); внутри while, но его печать как массив - person ; 20.09.2014
comment
хмм, get_post () по умолчанию должен быть объектом (codex.wordpress.org/Function_Reference/get_post) . Как выглядит $ post? Это должен быть объект (опубликуйте var_dump ()). Пользовательская таксономия не должна мешать. Категории возвращаются из wp_get_post_categories () с использованием действительного идентификатора сообщения для аргумента? - person Marc; 21.09.2014
comment
привет, я не знаю, атуали. Пожалуйста, помогите - person ; 22.09.2014
comment
Мне нравится видеть var_dump () php.net/manual/en/function.var -dump.php из $ post и, в конечном итоге, результаты из wp_get_post_categories (). Вы можете оказаться в крайнем случае, даже в этом случае мое понимание передовой практики WP должно позволить этим вещам работать правильно (настраиваемая таксономия, вообще говоря, это не сообщение или страница, а what_ever_you_want как тип сообщения, в котором хранятся идентификатор и другие ассоциации ). Что касается фильтрации категорий, регистрация пользовательской таксономии становится довольно интенсивной, открывая множество опций и функций codex.wordpress.org/ Function_Reference / register_taxonomy - person Marc; 23.09.2014