Алфавитный указатель на вордпресс

12
ТР
На сайте с 24.09.2016
Offline
224
1969

Всем привет!

Возникла задача сделать на некоторых страницах алфавитный указатель. Если точнее будет три категории, в каждой по 100-150 страниц. Есть идея под каждую категорию создать отдельную страницу и туда вывести перечень имеющихся статей по теме.

Выглядеть список должен примерно как на картинке.

[ATTACH]179592[/ATTACH]

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

jpg vivod-tegov-tovara-woocommerce-v-alfavitnom-poryadke.jpg
Как копирайтеру хорошо зарабатывать (https://copywriting-tarasov.ru/?p=613) https://copywriting-tarasov.ru/ (https://copywriting-tarasov.ru/) Бесплатный аудит РК в Яндекс.Директе
SeVlad
На сайте с 03.11.2008
Offline
1609
#1
Тарасов Роман:
Есть идея под каждую категорию создать отдельную страницу и туда вывести перечень имеющихся статей по теме.

Во первых никаких отдельных страниц. Страница рубрики (категории) - она виртуальная, сама появится. //Это если будешь делать именно рубриками//

Во вторых для "алфавита" можно использовать

а) метки или свою аналогичную таксономию

б) произвольные поля

в) готовые плагины (они как правило используют а и/или б)

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
zonar
На сайте с 24.05.2009
Offline
165
#2

Если уж хотите извращаться так то сделайте просто карту сайта для людей и все

Городской дневник ( https://youtu.be/k2qZdPXHoYY )
ТР
На сайте с 24.09.2016
Offline
224
#3
SeVlad:
Во первых никаких отдельных страниц. Страница рубрики (категории) - она виртуальная, сама появится. //Это если будешь делать именно рубриками//

Во вторых для "алфавита" можно использовать
а) метки или свою аналогичную таксономию
б) произвольные поля
в) готовые плагины (они как правило используют а и/или б)

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

Надо копать дальше.

---------- Добавлено 04.12.2018 в 12:58 ----------

zonar:
Если уж хотите извращаться так то сделайте просто карту сайта для людей и все

Так там для людей и делается. Чтобы могли быстро найти описание в списке. В карте сайта копаться муторно, там получается всего около 500 записей, и это только на стартовом этапе, дальше предполагается довести до 2000-3000 записей. Замучаешься листать такую карту😒

Gerga
На сайте с 02.08.2015
Offline
94
#4

Тарасов Роман, смотрите как можно сделать. Создаете массив с буквами алфавита:


$lib = [ 'A' => '',
'B' => '',
'C' => '',
'W' => '',
'...' => '',
'А' => '',
'Б' => '',
'В' => '',
];

затем получите все записи нужной категории и пройдитесь по этим записям сохрания запись в $lib нужной буквы:


$posts = get_posts([ 'category' => 1,
'numberposts' => 999,
]);

foreach ($posts as $post) {
$letter = strtoupper(mb_substr($post->post_title, 0, 1));

if (isset($lib[$letter])) {
$lib[$letter] .= '<li><a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a>';
}
}

теперь можно выводить алфавитный указатель:


$out = '';

foreach ($lib as $key => $value) {
if (!$value) {
continue;
}

$out .= '
<div class="wrapper-letter">
<span class="letter">' . $key . '</span>
<ul>' . $value . '</ul>
</div>
';

}

echo $out;

Если все это дело, для многоразового использования, оформить в функцию, будет так выглядеть:



/**
* Функция возвращает алфавитный указатель указанной категории
* @param int $cat - id категори
**/

function get_category_alphabet(int $cat = 1) {
$lib = [ 'A' => '',
'B' => '',
'C' => '',
'W' => '',
'...' => '',
'А' => '',
'Б' => '',
'В' => '',
];

$posts = get_posts([ 'category' => $cat,
'numberposts' => 999,
]);

foreach ($posts as $post) {
$letter = strtoupper(mb_substr($post->post_title, 0, 1));

if (isset($lib[$letter])) {
$lib[$letter] .= '<li><a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a>';
}
}

$out = '';

foreach ($lib as $letter => $value) {
if (!$value) {
continue;
}

$out .= '
<div class="wrapper-letter">
<span class="letter">' . $letter . '</span>
<ul>' . $value . '</ul>
</div>
';
}

return $out;
}

echo get_category_alphabet(1); // тут вместо 1 указываете id нужной категории
ТР
На сайте с 24.09.2016
Offline
224
#5
Gerga:
Тарасов Роман, смотрите как можно сделать. Создаете массив с буквами алфавита:



затем получите все записи нужной категории и пройдитесь по этим записям сохрания запись в $lib нужной буквы:



теперь можно выводить алфавитный указатель:



Если все это дело, для многоразового использования, оформить в функцию, будет так выглядеть:


Спасибо! Так тоже попробую. Думаю должно быть лучше, чем с плагином, хотя протестирую и плагин, и код.

S
На сайте с 30.09.2016
Offline
469
#6
Gerga:
$letter = strtoupper(mb_substr($post->post_title, 0, 1));

Так мы получим выборку по названиям записей. Но судя по стартпосту, требуется выборка по тегам. А это всё же через допполя надо делать.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Gerga
На сайте с 02.08.2015
Offline
94
#7
Sitealert:
Так мы получим выборку по названиям записей.

да, я думаю именно это и нужно ТСу. Например нужно вывести записи из категории "Справочник запчастей" и сгруппировать эти записи по первой букве из названия как на скрине. Но на скрине показана группировка категорий, нам же нужно сгруппировать записи.

Тарасов Роман:
Думаю должно быть лучше, чем с плагином

Если я вас правильно понял, будет лучше.

SeVlad
На сайте с 03.11.2008
Offline
1609
#8
Gerga:
да, я думаю именно это и нужно ТСу.

Если это нужно то произвольные поля или таксономия будет куда логичнее и проще.

Но я помню что ты любишь кодить :)

Gerga
На сайте с 02.08.2015
Offline
94
#9
SeVlad:
Если это нужно то произвольные поля или таксономия будет куда логичнее и проще.

так для каждой записи нужно ставить букву, а это уже сделано. Меньше движения получится.

---------- Добавлено 05.12.2018 в 16:49 ----------

Еще плюс в первом подходе в том, что если статьи добавлены пропадает необходимость в их редактировании для установки нужной буквы. Опять экономия на движении.

SeVlad
На сайте с 03.11.2008
Offline
1609
#10
Gerga:
Меньше движения получится.

Ну тут согласен.

Однако это не делается так часто чтобы было напряжно. Да и вообще можно написать хук на save_post чтобы присваивал таксономию/ПП (ИМХО куда элегантней и безопаснее. А обновить посты можно и массово).

А в твоём решении не всё однозначно с нагрузкой.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий