АРМАДА
схожие записи определенной категории без плагина Wordpress
На страницу 1, 2  След.
Новая тема Написать ответ Advanced Hosters - профессиональный хостинг

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Ср Фев 09, 2011 7:19 pmДобавить в избранноеОтветить с цитатой
Вопрос 1 : как исключить определенную категорию, чтобы для нее не выводились похожие записи.

Вопрос 2 : Как сделать чтобы приоритетно сортировка происходила по тайтлу.


собсно сам код.

Код:

<div class="sample-posts">
<h3>Похожие статьи:</h3>
<?php
$categories = get_the_category($post->ID);
if ($categories) {
   $category_ids = array();
   foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
 
   $args=array(
      'category__in' => $category_ids,
      'post__not_in' => array($post->ID),
      'showposts'=>5, // Number of related posts that will be shown.
      'caller_get_posts'=>1
   );
   // Rest is the same as the previous code
$my_query = new wp_query($args);
   if( $my_query->have_posts() ) {
      echo '<ul>';
      while ($my_query->have_posts()) {
         $my_query->the_post();
      ?>
         <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
      <?php
      }
      echo '</ul>';
   }
   wp_reset_query();
}
?></div>


Codd
Опытный
Зарегистрирован: 13.01.2011
Сообщений: 186
Обратиться по нику
# Добавлено:Ср Фев 09, 2011 8:30 pmОтветить с цитатой
К параметрам получения постов добавьте
'category__not_in' => array(1, 2, 3), // исключение нужных категорий
'orderby' => 'title', // сортировка по заголовкам
'order' => 'ASC' // сортировка по убыванию
т.е. будет


Код:
<div class="sample-posts">
<h3>Похожие статьи:</h3>

$categories = get_the_category($post->ID);
<?php
if ($categories) {
   $category_ids = array();
   foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
 
   $args=array(
      'category__in' => $category_ids,
      'post__not_in' => array($post->ID),
      'showposts'=>5, // Number of related posts that will be shown.
      'caller_get_posts'=>1,
     'category__not_in' => array(1, 2, 3),
     'orderby' => 'title',
     'order' => 'ASC'
   );
   // Rest is the same as the previous code
   
$my_query = new wp_query($args);
   if( $my_query->have_posts() ) {
      echo '<ul>';
      while ($my_query->have_posts()) {
         $my_query->the_post();
      ?>
         <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
      <?php
      }
      echo '</ul>';
   }
   wp_reset_query();
}
?>

</div>


DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Ср Фев 09, 2011 9:05 pmОтветить с цитатой
приятно осознавать, что появился еще один знаток вордпресса. Сенкю вери мач!!!

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Фев 11, 2011 2:22 pmОтветить с цитатой
аха рано обрадовался не работает так, тоесть работает но выводит одни и теже записи без сортировки

убрал нововведение для сортировки, оказывается изначальный код какойто неправильные, он показывает не схожие записи, а паходу последние записи.

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Фев 11, 2011 2:49 pmОтветить с цитатой
Кто нибудь знает код для вывода похожих записией на основе категорий с сортировкой по тайтлу?

Codd
Опытный
Зарегистрирован: 13.01.2011
Сообщений: 186
Обратиться по нику
# Добавлено:Пт Фев 11, 2011 3:57 pmОтветить с цитатой
Код выше выводит последние записи, из тех же категорий, что и текущая запись, сортируя по тайтлу.

Только что проверил, всё соответствует требованиям.

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Фев 11, 2011 4:17 pmОтветить с цитатой
а к чему вообще нужны последние записи? Smile

нужны схожие записи из определенной категории по тайтлу

Например заголовок статьи: "Схожи записи вордпресс" в категории такой то

<>Похожие записи<>

"Схожи записи друпал"
"Схожи записи непал"
"Схожи записи запал"

Codd
Опытный
Зарегистрирован: 13.01.2011
Сообщений: 186
Обратиться по нику
# Добавлено:Пт Фев 11, 2011 5:51 pmОтветить с цитатой
Ну вообще-то последние записи из той же категории, что и текущая запись, есть схожие записи. А если нужен другой метод выбора схожих записей, то проще поставить плагин

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Пт Фев 11, 2011 6:32 pmОтветить с цитатой
этот плагин у меня стоял пару лет, оказывается жрет дико память, именно на основе его и нужен код

m_Stasuk
Дизайнер
Зарегистрирован: 23.12.2007
Сообщений: 5967
Contest (Сумма: 2)
Обратиться по нику
# Добавлено:Сб Фев 12, 2011 9:56 amОтветить с цитатой
я думаю он потому и плагин что позволяет сделать красоту и память поэтому хавает. Не получится походу сделать круто и при этом не отдать памяти. Ну сам подумай, как код будет понимать что эта вот статья больше подходит к исходной, а эта меньше?

Это такой минипоисковик Smile
Зарабатываю на рускамзе
Ростов-на-Дону

Codd
Опытный
Зарегистрирован: 13.01.2011
Сообщений: 186
Обратиться по нику
# Добавлено:Сб Фев 12, 2011 4:27 pmОтветить с цитатой
Не знаю, как в yet-another-related-posts сделано, но могу предложить свой вариант поиска релевантных постов по тайтлам.

Код:
<?php

   $category_ids = array();
   foreach($categories as $individual_category)
      $category_ids[] = $individual_category->term_id;

    $current_post_title = explode(' ', $post->post_title);

    $posts = get_posts( array(
                'category' => implode(, $category_ids)
                        ) );

    $posts_relative_ids = array();

    foreach($posts as $post){
        $posts_relative_ids[$post->ID] = 0;

        foreach($current_post_title as $word){
            if( strpos($post->post_title,  $word) != FALSE)
                $posts_relative_ids[$post->ID]++;
        }

    }

    arsort($posts_relative_ids);
    foreach($posts_relative_ids as $id){
        $posts_relative[] = $id;
    }

    $args=array(
        'post__in' => $posts_relative,
        'post__not_in' => array($post->ID),
        'showposts' => 5,
        'caller_get_posts' => 1,
        'category__not_in' => array(1, 2, 3),
        'orderby' => 'title',
        'order' => 'ASC'
   );

    $my_query = new wp_query($args);
    if( $my_query->have_posts() ) {
        echo '<ul>';
        while ($my_query->have_posts()) {
           $my_query->the_post();
        ?>
           <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
        <?php
        }
        echo '</ul>';
    }
     wp_reset_query();

?>



Алгоритм работы: разделяется текущий заголовок на отдельные слова, получаем все посты из тех же категорий, что и текущий пост. Производим поиск каждого слова текущего постав в заголовках постов.
Если слово в тайтле есть, то релевантность данного поста увеличиваем на +1.
На выходе получаем массив, где в качестве ключа ID поста, а в качестве значение его релевантость.
Сортируем массив по убыванию.
Создаём простой массив с ID постов, отсортированных по убыванию.
Добавляем в условия вывода постов полученные ID. В результате в самом начале будут идти самые релевантные посты.

На баги не проверял, если код заработает не выдав ни одной ошибки - это будет чудо. Будет время протестирую на работоспособность.

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Сб Фев 12, 2011 5:04 pmОтветить с цитатой
теория хорошая, но код не работает, где то там ошибка.

Codd, спасибо за старания!

Codd
Опытный
Зарегистрирован: 13.01.2011
Сообщений: 186
Обратиться по нику
# Добавлено:Сб Фев 12, 2011 5:16 pmОтветить с цитатой
Как всегда проблема в невнимательности.

'category' => implode(, $category_ids)
заменить на 'category' => implode(',' , $category_ids)

и в самое начало после <?php
добавить $categories = get_the_category($post->ID);

DK +
wordpress
Зарегистрирован: 18.06.2008
Сообщений: 2425
Обратиться по нику
# Добавлено:Сб Фев 12, 2011 5:48 pmОтветить с цитатой
заработало, релевантность хромает, да и вставляет посты из разных рубрик.

Codd
Опытный
Зарегистрирован: 13.01.2011
Сообщений: 186
Обратиться по нику
# Добавлено:Сб Фев 12, 2011 7:23 pmОтветить с цитатой
Можно посмотреть пример? Хотя бы просто в виде "Название поста - названия релевантных постов".

Ну и можно попробовать сделать так:

$args=array(
'category__in' => $category_ids,
'post__in' => $posts_relative,
'post__not_in' => array($post->ID),
'showposts' => 5,
'caller_get_posts' => 1,
'category__not_in' => array(1, 2, 3),
'orderby' => 'title',
'order' => 'ASC'
);
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





Генеральный спонсор



Партнеры