На страницу 1, 2 След. |
|
![]() DK + wordpress |
Зарегистрирован: 18.06.2008
Сообщений: 2425
|
Обратиться по нику
|
DK + |
Ответить с цитатой | | |
|
Вопрос 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
|
Обратиться по нику
|
Codd |
Ответить с цитатой | | |
|
К параметрам получения постов добавьте
'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
|
Обратиться по нику
|
DK + |
Ответить с цитатой | | |
|
приятно осознавать, что появился еще один знаток вордпресса. Сенкю вери мач!!! |
|
|
|
|
|
|
![]() DK + wordpress |
Зарегистрирован: 18.06.2008
Сообщений: 2425
|
Обратиться по нику
|
DK + |
Ответить с цитатой | | |
|
аха рано обрадовался не работает так, тоесть работает но выводит одни и теже записи без сортировки
убрал нововведение для сортировки, оказывается изначальный код какойто неправильные, он показывает не схожие записи, а паходу последние записи. |
|
|
|
|
|
|
![]() DK + wordpress |
Зарегистрирован: 18.06.2008
Сообщений: 2425
|
Обратиться по нику
|
DK + |
Ответить с цитатой | | |
|
Кто нибудь знает код для вывода похожих записией на основе категорий с сортировкой по тайтлу? |
|
|
|
|
|
|
![]() Codd Опытный |
Зарегистрирован: 13.01.2011
Сообщений: 186
|
Обратиться по нику
|
Codd |
Ответить с цитатой | | |
|
Код выше выводит последние записи, из тех же категорий, что и текущая запись, сортируя по тайтлу.
Только что проверил, всё соответствует требованиям. |
|
|
|
|
|
|
![]() DK + wordpress |
Зарегистрирован: 18.06.2008
Сообщений: 2425
|
Обратиться по нику
|
DK + |
Ответить с цитатой | | |
|
а к чему вообще нужны последние записи?
нужны схожие записи из определенной категории по тайтлу
Например заголовок статьи: "Схожи записи вордпресс" в категории такой то
<>Похожие записи<>
"Схожи записи друпал"
"Схожи записи непал"
"Схожи записи запал" |
|
|
|
|
|
|
![]() Codd Опытный |
Зарегистрирован: 13.01.2011
Сообщений: 186
|
Обратиться по нику
|
Codd |
Ответить с цитатой | | |
|
Ну вообще-то последние записи из той же категории, что и текущая запись, есть схожие записи. А если нужен другой метод выбора схожих записей, то проще поставить плагин |
|
|
|
|
|
|
![]() DK + wordpress |
Зарегистрирован: 18.06.2008
Сообщений: 2425
|
Обратиться по нику
|
DK + |
Ответить с цитатой | | |
|
этот плагин у меня стоял пару лет, оказывается жрет дико память, именно на основе его и нужен код |
|
|
|
|
|
|
![]() m_Stasuk Дизайнер |
Зарегистрирован: 23.12.2007
Сообщений: 5967
|
Обратиться по нику
|
m_Stasuk |
Ответить с цитатой | | |
|
я думаю он потому и плагин что позволяет сделать красоту и память поэтому хавает. Не получится походу сделать круто и при этом не отдать памяти. Ну сам подумай, как код будет понимать что эта вот статья больше подходит к исходной, а эта меньше?
Это такой минипоисковик  |
|
|
|
|
|
Зарабатываю на рускамзе
Ростов-на-Дону
|
![]() Codd Опытный |
Зарегистрирован: 13.01.2011
Сообщений: 186
|
Обратиться по нику
|
Codd |
Ответить с цитатой | | |
|
Не знаю, как в 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
|
Обратиться по нику
|
DK + |
Ответить с цитатой | | |
|
теория хорошая, но код не работает, где то там ошибка.
Codd, спасибо за старания! |
|
|
|
|
|
|
![]() Codd Опытный |
Зарегистрирован: 13.01.2011
Сообщений: 186
|
Обратиться по нику
|
Codd |
Ответить с цитатой | | |
|
Как всегда проблема в невнимательности.
'category' => implode(, $category_ids)
заменить на 'category' => implode(',' , $category_ids)
и в самое начало после <?php
добавить $categories = get_the_category($post->ID); |
|
|
|
|
|
|
![]() DK + wordpress |
Зарегистрирован: 18.06.2008
Сообщений: 2425
|
Обратиться по нику
|
DK + |
Ответить с цитатой | | |
|
заработало, релевантность хромает, да и вставляет посты из разных рубрик. |
|
|
|
|
|
|
![]() Codd Опытный |
Зарегистрирован: 13.01.2011
Сообщений: 186
|
Обратиться по нику
|
Codd |
Ответить с цитатой | | |
|
Можно посмотреть пример? Хотя бы просто в виде "Название поста - названия релевантных постов".
Ну и можно попробовать сделать так:
$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'
); |
|
|
|
|
|
|
|