[Помогите] Как исключить категорию из последних записей?

Тема в разделе "Wordpress", создана пользователем STsoldier, 10 мар 2010.

Статус темы:
Закрыта.
Модераторы: DzSoft, Sorcus
  1. STsoldier

    STsoldier Постоялец

    Регистр.:
    9 дек 2008
    Сообщения:
    100
    Симпатии:
    10
    Здравствуйте, подскажите пожалуйста как исключить показ определенной категории из плагина отображающего последние записи? Из листа категорий исключил прописав exclude=id, но с плагином задача оказалась сложнее. Вот сам код:
    PHP:
    function mdv_recent_posts($no_posts 8$before '<li>'$after "</li>\n"$hide_pass_post true$skip_posts 0) {
        global 
    $wpdb;
        
    $time_difference get_settings('gmt_offset');
        
    $now gmdate("Y-m-d H:i:s",time());
        
    $request "SELECT ID, post_title, DATE_FORMAT(post_date_gmt, '%d %M %Y') as my_date FROM $wpdb->posts WHERE post_status = 'publish' ";
        if(
    $hide_pass_post$request .= "AND post_password ='' ";
        
    $request .= "AND post_type='post' ";
        
    $request .= "ORDER BY post_date DESC LIMIT $skip_posts$no_posts";
        
    $posts $wpdb->get_results($request);
        
    $output '';
        if(
    $posts) {
            foreach (
    $posts as $post) {
                
    $post_title stripslashes($post->post_title);
                
    $permalink get_permalink($post->ID);
                
    $output .= $before .'<a href="' $permalink '" rel="bookmark" title="Permanent Link: ' htmlspecialchars($post_titleENT_COMPAT) . '">' htmlspecialchars($post_title). '</a>';
                
    $output .= $after;
            }
        } else {
            
    $output .= $before "None found" $after;
        }
        echo 
    $output;
    }
    Заранее спасибо.
     
  2. mushrembo

    mushrembo Писатель

    Регистр.:
    2 фев 2009
    Сообщения:
    9
    Симпатии:
    0
    А не легче использовать виджет последние записи?
    А вообще используя codex.wordpress.org можно добиться всего чего хочешь.
     
  3. xbreaker

    xbreaker Вверх ногами

    Регистр.:
    15 авг 2007
    Сообщения:
    245
    Симпатии:
    52

    вот простое решение, исключит посты из категории с ID 11, вместо числа можно использовать массив ID категории array(11,34,22)...
    PHP:
    function mdv_recent_posts($no_posts 8$before '<li>'$after "</li>\n"$hide_pass_post true$skip_posts 0) {
        global 
    $wpdb;
        
    $time_difference get_settings('gmt_offset');
        
    $now gmdate("Y-m-d H:i:s",time());
        
    $request "SELECT ID, post_title, DATE_FORMAT(post_date_gmt, '%d %M %Y') as my_date FROM $wpdb->posts WHERE post_status = 'publish' ";
        if(
    $hide_pass_post$request .= "AND post_password ='' ";
        
    $request .= "AND post_type='post' ";
        
    $request .= "ORDER BY post_date DESC LIMIT $skip_posts$no_posts";
        
    $posts $wpdb->get_results($request);
        
    $output '';
        if(
    $posts) {
            foreach (
    $posts as $post) {
                
    $post_title stripslashes($post->post_title);
                
    $permalink get_permalink($post->ID);
                if ( !
    in_category(11,$post->ID) ) {
                    
    $output .= $before .'<a href="' $permalink '" rel="bookmark" title="Permanent Link: ' htmlspecialchars($post_titleENT_COMPAT) . '">' htmlspecialchars($post_title). '</a>';
                    
    $output .= $after;
                }
            }
        } else {
            
    $output .= $before "None found" $after;
        }
        echo 
    $output;
    }  
     
  4. STsoldier

    STsoldier Постоялец

    Регистр.:
    9 дек 2008
    Сообщения:
    100
    Симпатии:
    10
    Жаль, но не работает.
     
  5. Rast

    Rast Постоялец

    Регистр.:
    25 ноя 2007
    Сообщения:
    60
    Симпатии:
    4
    Перейти по ссылке
    Вот тут, ту -же проблему пытался решить, только с виджетом, ничего не вышло к сожалению. если кто решит может напишите и то как с вииджетом реализовать. :confused:
     
  6. STsoldier

    STsoldier Постоялец

    Регистр.:
    9 дек 2008
    Сообщения:
    100
    Симпатии:
    10
    Виджет вывода последних записей?
     
  7. Rast

    Rast Постоялец

    Регистр.:
    25 ноя 2007
    Сообщения:
    60
    Симпатии:
    4
    Да, именно. хотел сделать так чтоб в нем не показывались записи из 2 х конкретных рубрик.
     
  8. xbreaker

    xbreaker Вверх ногами

    Регистр.:
    15 авг 2007
    Сообщения:
    245
    Симпатии:
    52
    попробуйте еще так:

    если у каждого поста по одной категории (исключим 11 категорию:(
    PHP:
    function mdv_recent_posts($no_posts 8$before '<li>'$after "</li>\n"$hide_pass_post true$skip_posts 0) {
        global 
    $wpdb;
        
    $time_difference get_settings('gmt_offset');
        
    $now gmdate("Y-m-d H:i:s",time());
        
    $request "SELECT ID, post_title, DATE_FORMAT(post_date_gmt, '%d %M %Y') as my_date FROM $wpdb->posts WHERE post_status = 'publish' ";
        if(
    $hide_pass_post$request .= "AND post_password ='' ";
        
    $request .= "AND post_type='post' ";
        
    $request .= "ORDER BY post_date DESC LIMIT $skip_posts$no_posts";
        
    $posts $wpdb->get_results($request);
        
    $output '';
        if(
    $posts) {
            foreach (
    $posts as $post) {
                
    $post_title stripslashes($post->post_title);
                
    $permalink get_permalink($post->ID);
                
    $cats get_the_category($post->ID);
                
    $catval $cats[0]->cat_ID;
                if ( 
    $catval != 11 ) {
                    
    $output .= $before .'<a href="' $permalink '" rel="bookmark" title="Permanent Link: ' htmlspecialchars($post_titleENT_COMPAT) . '">' htmlspecialchars($post_title). '</a>';
                    
    $output .= $after;
                }
            }
        } else {
            
    $output .= $before "None found" $after;
        }
        echo 
    $output;
    }  
    если у поста несколько категорий и нужно исключить две категории (для примера исключим 11 и 13 категорию:(
    PHP:
    function mdv_recent_posts($no_posts 8$before '<li>'$after "</li>\n"$hide_pass_post true$skip_posts 0) {
        global 
    $wpdb;
        
    $time_difference get_settings('gmt_offset');
        
    $now gmdate("Y-m-d H:i:s",time());
        
    $request "SELECT ID, post_title, DATE_FORMAT(post_date_gmt, '%d %M %Y') as my_date FROM $wpdb->posts WHERE post_status = 'publish' ";
        if(
    $hide_pass_post$request .= "AND post_password ='' ";
        
    $request .= "AND post_type='post' ";
        
    $request .= "ORDER BY post_date DESC LIMIT $skip_posts$no_posts";
        
    $posts $wpdb->get_results($request);
        
    $output '';
        if(
    $posts) {
            foreach (
    $posts as $post) {
                
    $post_title stripslashes($post->post_title);
                
    $permalink get_permalink($post->ID);
                
    $skip_by_cat false;
                
    $cats get_the_category($post->ID);
                foreach (
    $cats as $cat) { if ( ($cat->cat_ID == 11) || ($cat->cat_ID == 13)) {$skip_by_cat true}  } 
                if ( 
    $skip_by_cat == false ) {
                    
    $output .= $before .'<a href="' $permalink '" rel="bookmark" title="Permanent Link: ' htmlspecialchars($post_titleENT_COMPAT) . '">' htmlspecialchars($post_title). '</a>';
                    
    $output .= $after;
                }
            }
        } else {
            
    $output .= $before "None found" $after;
        }
        echo 
    $output;
     
    STsoldier нравится это.
  9. STsoldier

    STsoldier Постоялец

    Регистр.:
    9 дек 2008
    Сообщения:
    100
    Симпатии:
    10
    Сделал по другому. Установил АСЕ, выбрал категории для исключения. А в месте вывода последних записей вставил
    PHP:
    <?php wp_get_archives('type=postbypost&limit=10&format=html'); ?>
    Все работает. :)
     
Статус темы:
Закрыта.