[Помогите] Похожие записи по наибольшему количеству совпадающих рубрик

Тема в разделе "Wordpress", создана пользователем Skorp1oN, 22 дек 2011.

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

    Skorp1oN

    Регистр.:
    16 дек 2007
    Сообщения:
    368
    Симпатии:
    25
    Версия WP: 3.2.1

    Доброго времени суток!
    Появилась потребность вывести на странице записи - блок, в котором будут записи с наибольшим количеством совпадающих рубрики. Т.е. запись добавлена в 4 разные рубрики сразу. Надо чтобы в блоке на странице этой записи, выводились записи которые тоже добавлены в эти рубрики и чем больше совпадение по рубрикам - тем выше запись бы выводилась.
    Пока не понимаю как такое реализовать? Возможно, уже кто-то сталкивался с такой проблемой?
    Заранее, большое спасибо за помощь!
     
  2. KainCq

    KainCq Постоялец

    Регистр.:
    15 июн 2011
    Сообщения:
    118
    Симпатии:
    22
    Не совсем понятно что вы хотите, но идея с добавлением 1 статьи в несколько рубрик уже не очень хорошая.
     
  3. Skorp1oN

    Skorp1oN

    Регистр.:
    16 дек 2007
    Сообщения:
    368
    Симпатии:
    25
    Хочу чтобы на страницах записей, был блок, в котором отображались записи с такими же рубриками как у просматриваемой записи.
     
  4. KainCq

    KainCq Постоялец

    Регистр.:
    15 июн 2011
    Сообщения:
    118
    Симпатии:
    22
    Я опять не могу понять что именно вы хотите сделать, но возможно вы имеете внутреннюю перелинковку сайта.
    http://wordpress.org/extend/plugins/related-posts-via-categories/ - Анализирует записи в данной рубрике и выводит похожие статьи только из этой рубрики
    http://wordpress.org/extend/plugins/wordpress-23-related-posts-plugin/ - Анализирует абсолютно ВСЕ записи в блоге и выводит наиболее похожии
     
  5. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Если надо такое, вытащить записи из тех же рубрик и отсортировать записи по количеству рубрик, то вот плагин выводит под текстом записи блок
    PHP:
    <?php
    //Plugin Name: Похожие по категориям записи
    //Author: Polyetilen
     
    function same_category_posts($post){
     
        if(!
    is_single()) return $post;
     
        
    $id get_the_ID();
        
    $categories wp_get_post_categories($id);
        
    //берём макс 10 записей из тех же категорий
        
    $ps get_posts(array('numberposts' => 10'offset'=> 0'category' => implode((array)$categories',')));
     
        if(!
    is_array($ps)) return $post;
     
        
    //идём по записям и вытаскиваем категории каждой
        
    $sorted = array();
        
    $data = array();
        foreach(
    $ps as $p){
        
    $p_cats wp_get_post_categories($p->ID);
            if(
    $p->ID!=$id){
                
    $sorted[$p->ID] = count($p_cats);
                
    $data[$p->ID] = array('post_title'=>$p->post_title);
            }
        }
        if(
    count($sorted)<=0) return $post;
        
    //сортируем по количеству категорий
        
    arsort($sorted);
     
        
    //собираем список категорий
        
    $html '';
        foreach(
    $sorted as $p_id=>$p_c){
            
    $html .= '<li><a href="'.get_permalink($p_id).'">'.$data[$p_id]['post_title'].'</a></li>';
        }
        
    $html '<h2>Похожие по категориям записи</h2><ul>'.$html.'</ul>';
     
        return 
    $post.$html;
    }
    add_filter('the_content''same_category_posts'1);
     

    Вложения:

    Skorp1oN нравится это.
  6. Skorp1oN

    Skorp1oN

    Регистр.:
    16 дек 2007
    Сообщения:
    368
    Симпатии:
    25
    polyetilen, спасибо!
    А как это же сделать не плагином, а кодом? Т.к. мне надо чтобы только в нескольких рубриках такое выводилось и в нужном мне месте.
     
  7. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    тогда такую функцию записать в файл functions.php в папке шаблона темы, если там нету такого файла то создать
    PHP:
    function same_category_posts($cat$max){
        
    //берём макс $max записей из тех же категорий
        
    $ps get_posts(array('numberposts' => $max'offset'=> 0'category' => $cat));
     
        if(!
    is_array($ps)) return $post;
     
        
    //идём по записям и вытаскиваем категории каждой
        
    $sorted = array();
        
    $data = array();
        foreach(
    $ps as $p){
        
    $p_cats wp_get_post_categories($p->ID);
            if(
    $p->ID!=$id){
                
    $sorted[$p->ID] = count($p_cats);
                
    $data[$p->ID] = array('post_title'=>$p->post_title);
            }
        }
        if(
    count($sorted)<=0) return $post;
        
    //сортируем по количеству категорий
        
    arsort($sorted);
     
        
    //собираем список категорий
        
    $html '';
        foreach(
    $sorted as $p_id=>$p_c){
            
    $html .= '<li><a href="'.get_permalink($p_id).'">'.$data[$p_id]['post_title'].'</a></li>';
        }
        
    $html '<h2>Похожие по категориям записи</h2><ul>'.$html.'</ul>';
     
      return 
    $html;
    }
    эта функция позвращает список записей и теперь можно вызывать эту функцию на странице рубрики в файле category.php
    PHP:
    <?
    echo 
    same_category_posts($cat10);
    ?>
    будет 10 записей

    Или функцию и код вызова сразу скопировать в category.php

    Для отдельных рубрик например так:
    PHP:
    <?
    if(
    $cat == 10 || $cat == 11){
        echo 
    same_category_posts($cat10);
    }
    ?>    
     
    Skorp1oN нравится это.
  8. Skorp1oN

    Skorp1oN

    Регистр.:
    16 дек 2007
    Сообщения:
    368
    Симпатии:
    25
    Спасибо вам большое!
    Вот только появилась еще одна потребность - вывести вместе с названием записи, еще превью, пару тегов и т.п.
    Как можно сделать вывод
    PHP:
    <?
    echo 
    same_category_posts($cat10);
    ?>
    чтобы туда можно было вставлять обычные функции... Как например:
    PHP:
    <?php the_excerpt(); ?>
    Заранее, большое спасибо!
     
  9. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    обычные функции можно использовать например после query_posts, тогда в функции изменяется последний цикл так
    PHP:
    function same_category_posts($cat, $max){
        //берём макс $max записей из тех же категорий
        $ps = get_posts(array('numberposts' => $max, 'offset'=> 0, 'category' => $cat));
     
        if(!is_array($ps)) return $post;
     
        //идём по записям и вытаскиваем категории каждой
        $sorted = array();
        $data = array();
        foreach($ps as $p){
        $p_cats = wp_get_post_categories($p->ID);
            if($p->ID!=$id){
                $sorted[$p->ID] = count($p_cats);
                $data[$p->ID] = array('post_title'=>$p->post_title);
            }
        }
        if(count($sorted)<=0) return $post;
        //сортируем по количеству категорий
        arsort($sorted);
     
        echo '<h2>Похожие по категориям записи</h2>';
        foreach($sorted as $p_id=>$p_c){
            query_posts('p='.$p_id);
            while (have_posts()) : the_post();
                ?><h2 class="entry-title"><a href="<? the_permalink()?>"><? the_title() ?></a></h2><?
                the_excerpt();
            endwhile;
        }
    }

    и вызывать так
    PHP:
    same_category_posts($cat10);
     
    Skorp1oN нравится это.
Статус темы:
Закрыта.