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

12
Gerga
На сайте с 02.08.2015
Offline
94
#11
SeVlad:
ИМХО куда элегантней и безопаснее

да, так и есть :) С таксономией/ПП распределение не скрыто от администратора, возможно именно это и нужно. Даже если хуком save_post ставить терм/произвольное значение, все равно админу нагляднее будет.

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

Да, в моем решении группировка постоянно выполняется, в твоем решении только 1 раз будет установлен терм или произвольное значение. Это лучше.

---------- Добавлено 05.12.2018 в 17:24 ----------

SeVlad:
А обновить посты можно и массово).

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

ТР
На сайте с 24.09.2016
Offline
224
#12
Gerga:


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

Попробовал на локалке, получилось как надо. Теперь буду это же все на рабочий сайт переносить.

Спасибо за подсказку.

Как копирайтеру хорошо зарабатывать (https://copywriting-tarasov.ru/?p=613) https://copywriting-tarasov.ru/ (https://copywriting-tarasov.ru/) Бесплатный аудит РК в Яндекс.Директе
Gerga
На сайте с 02.08.2015
Offline
94
#13

Тарасов Роман, функцию можно немного оптимизировать, избавиться от $lib массива и связанных с ним действий. Не обязательно держать все буквы алфавитов, можно выводить нужною букву только при необходимости.


/**
* Функция возвращает алфавитный указатель указанной категории
* @version 2.0
* @param int $cat - id категори
**/
function get_category_alphabet(int $cat = 1) {
$posts = get_posts([ 'orderby' => 'title',
'order' => 'ASC',
'category' => $cat,
'numberposts' => 999,
]);

$prev_letter = $out = '';

foreach ($posts as $post) {
if (!$post->post_title) {
continue;
}

$letter = mb_strtoupper(mb_substr($post->post_title, 0, 1));

if ($letter != $prev_letter) {
$out .= '<li><span class="letter">' . $letter . '</span>';
$prev_letter = $letter;
}

$out .= '<a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a>';
}

return '<ul class="alphabet">' . $out . '</ul>';
}

echo get_category_alphabet(1); // тут вместо 1 указываете id нужной категории


---------- Добавлено 06.12.2018 в 09:59 ----------

Без учета комментов, размер функции почти в 2 раза уменьшился. Избавились от массива $lib, теперь не нужно вводить в программу все буквы, и от 1 цикла.
12

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