Тарасов Роман, функцию можно немного оптимизировать, избавиться от $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 нужной категории
да, так и есть :) С таксономией/ПП распределение не скрыто от администратора, возможно именно это и нужно. Даже если хуком save_post ставить терм/произвольное значение, все равно админу нагляднее будет.
Да, в моем решении группировка постоянно выполняется, в твоем решении только 1 раз будет установлен терм или произвольное значение. Это лучше.---------- Добавлено 05.12.2018 в 17:24 ----------
Да, я это понимаю, но нужно соответствующее решение. Найти плагин который по первой букве из названия распределит записи или нанять программиста, чтобы он это сделал.
так для каждой записи нужно ставить букву, а это уже сделано. Меньше движения получится. ---------- Добавлено 05.12.2018 в 16:49 ---------- Еще плюс в первом подходе в том, что если статьи добавлены пропадает необходимость в их редактировании для установки нужной буквы. Опять экономия на движении.
да, я думаю именно это и нужно ТСу. Например нужно вывести записи из категории "Справочник запчастей" и сгруппировать эти записи по первой букве из названия как на скрине. Но на скрине показана группировка категорий, нам же нужно сгруппировать записи.
Если я вас правильно понял, будет лучше.
DominantBlogge, как я понял, этот файл
загружается на твоем сайте и домен сайта не ngrinko.com ?
оценивайте на соответствие техническому заданию. Например, если в ТЗ вы не требуете кроссбраузерности, она не обязательно будет реализована.
Те, которые вам нужны. Например, если вам нужна адаптивность, значит спросите об адаптивности.
Вам не обязательно вникать в реализацию. Вы можете использовать любый объект в этом мире не вникая в детали реализации, так же и с версткой.
Да. Так обычно и делается.
Supersheva, в теории нужно следать за сменой статуса заказа. Если статус заказа был установлен completed, значит для товаров из списка заказа нужно уменьшить количество запаса ровно на столько, сколько указано в заказе. Пример:
function woo_change_product_quantity($order_id) { $order = wc_get_order($order_id); foreach ($order->get_items() as $item_id => $item_data) { $product = $item_data->get_product(); $quantity = $product->get_stock_quantity() - $item_data->get_quantity(); wc_update_product_stock($product->get_id(), $quantity); }} add_action('woocommerce_order_status_completed', 'woo_change_product_quantity');
Charli, как заметил burunduk, кешируйте результат выборки на сутки/неделю/месяц. Каждый запрос фильтра проверяйте на наличие и актуальность кеша. Если все ок, отдавайте результат из кеша. Если нет, делайте запрос к БД, сохраняйте результат в кеш и отдавайте клиенту. Конечно если эти махинации действительно необходимы.
Тарасов Роман, смотрите как можно сделать. Создаете массив с буквами алфавита:
$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 нужной категории