• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

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

Статус
В этой теме нельзя размещать новые ответы.

Skorp1oN

Мастер
Регистрация
16 Дек 2007
Сообщения
387
Реакции
31
Версия WP: 3.2.1

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

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

Вложения

  • same_category_posts.zip
    827 байт · Просмотры: 1
polyetilen, спасибо!
А как это же сделать не плагином, а кодом? Т.к. мне надо чтобы только в нескольких рубриках такое выводилось и в нужном мне месте.
 
тогда такую функцию записать в файл 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($cat, 10);
?>
будет 10 записей

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

Для отдельных рубрик например так:
PHP:
<?
if($cat == 10 || $cat == 11){
    echo same_category_posts($cat, 10);
}
?>
 
Спасибо вам большое!
Вот только появилась еще одна потребность - вывести вместе с названием записи, еще превью, пару тегов и т.п.
Как можно сделать вывод
PHP:
<?
echo same_category_posts($cat, 10);
?>
чтобы туда можно было вставлять обычные функции... Как например:
PHP:
<?php the_excerpt(); ?>
Заранее, большое спасибо!
 
обычные функции можно использовать например после 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($cat, 10);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху