Нужно написать функцию для изменения объекта WP_Query и прицепить ее к действию pre_get_posts:
add_action('pre_get_posts', 'tw_pre_get', 1);function tw_pre_get($query) { global $wp_query; if (!is_admin() && $query->is_main_query() && $query->is_category()) { $query->set('orderby', 'rand'); return; } }
Самый простой способ - это добавить функцию для обрезки в шаблон темы. Для своих проектов я написал несколько функций:
function tw_strip($text, $len, $allowed_tags = false, $find = ' ', $dots = '...') { if ($allowed_tags) { $allowed_tags_list = 'i|em|b|strong|s|del'; if ($allowed_tags != '+' and mb_strpos($allowed_tags, '+') === 0) { $allowed_tags = str_replace('+', '', $allowed_tags); $allowed_tags_list = $allowed_tags_list . '|' . $allowed_tags; } else { $allowed_tags_list = $allowed_tags; } $allowed_tags_list = '<' . implode('><', explode('|', $allowed_tags_list)) . '>'; } elseif ($allowed_tags === false) { $allowed_tags_list = '<i><em><b><strong><s><del>'; } else { $allowed_tags_list = ''; } $text = strip_tags(strip_shortcodes($text), $allowed_tags_list); if ($find and mb_strlen($text) > $len) { $pos = mb_strpos($text, $find, $len); if ($pos < $len or $pos > ($len + 20)) $pos = $len; $text = mb_substr($text, 0, $pos) . $dots; } else { $pos = $len; $text = mb_substr($text, 0, $pos); } if (mb_strpos($allowed_tags_list, '<a>') !== false) { $link_start = mb_strrpos($text, '<a'); if ($link_start !== false) { $link_end = mb_strpos($text, '</a>', $link_start); if ($link_end === false) { $text = mb_substr($text, 0, $link_start) . $dots; } } $text = preg_replace('#<a[^>]*?></a>#is', '', $text); } if ($allowed_tags_list) $text = force_balance_tags($text); return $text; }function tw_text($item = false, $len = 250, $allowed_tags = false, $find = ' ', $force_cut = true) { if (isset($item->post_content)) { $text = $item->post_content; $excerpt = $item->post_excerpt; } else { $text = get_the_content(); $excerpt = get_the_excerpt(); } if ($excerpt and mb_strlen($excerpt) > 0) { if ($force_cut) { echo tw_strip($excerpt, $len, $allowed_tags, $find); } else { echo $excerpt; } } elseif (mb_strpos($text, '<!--more') !== false) { $pos = mb_strpos($text, '<!--more'); if ($force_cut) { echo tw_strip(mb_substr($text, 0, $pos), $len, $allowed_tags, $find); } else { echo tw_strip(mb_substr($text, 0, $pos), $pos, $allowed_tags, $find); } } else { echo tw_strip($text, $len, $allowed_tags, $find); }}
Обрезку выполяет функция tw_strip. Она позволяет оставлять определенные теги, чистить шорткоды и обрезать по словам. Вторая функция tw_text - это обертка для более удобной работы. В цикле ее можно использовать так:
<?php echo tw_text($post, 200); ?>
Весь код доступен на GitHub
Я использую и ID, и классы.
Для отдельных элементов и блоков с содержимым, которые могут повторяться в разных местах проекта уместно использовать классы. В верстке в основном используются именно они. Помимо этого достоинством классов является простота модификации стилей с помощью классов-модификаторов.
Если речь идет об элементах, которые должны быть в единственном экземпляре на странице (шапка, футер, блок с содержимым, фон для модальных окон и т.д.) и практически не изменяются от странице к странице, то лучше использовать ID. В JS, например, это позволяет работать с одним конкретным элементом и не беспокоится о случаях, если их на странице вдруг будет несколько. Также использование ID позволяет достаточно просто перезадать стили для определенных элементов, специфичность у селекторов c ID выше.
Часто хорошие результаты дает комбинирование ID с классами, когда классы используются для основной стилизации, а селекторы с ID для коррекции стилей и возможности из JS работать только с этим конкретным элементом.
В таком случае нужно перед началом работ в явном виде оговаривать, что у классов и ID должны быть осмысленные названия, а сам код должен содержать отступы для лучшего понимания другими.
Вообе за 6 лет работы я практически не сталкивался с ТЗ, где явно указана схема именования классов, например. Связано это с тем, что если не давать классам осмысленные названия и не использовать внятную структуру наследования, то крайне сложно сверстать сайт с десятком страниц. Та же история и с форматированием кода.
Здравствуйте.
Без дополнительной опимизации WordPress с таким объемом материалов будет очень сильно тормозить. Вы уверены, что вам нужно использовать именно эту систему?
По поводу самой проблемы. Зачастую она решается или разбиением файла на части, или оптимизацией самого скрипта, который выполняет загрузку. Нужно, чтобы он считывал большой файл в построчном режиме для уменьшения объема потребяемой памяти.
Подобного рода задачи зачастую решаются вручную и зависят в первую очередь от системы, куда выглужаются данные. В рамках WP, например, можно создать новый тип записии, указать для него дополнительное поле "Адрес сайта" и написать фильтр, который будет проверять уникальность этого поля при сохранении. Функционал ревизий у WP есть.
Также можно написать скрипт, который будет автоматически собирать данные, проверять URL и добавлять их в качестве отдельных записей. После проверки редактор их будет просто публиковать.
Вы можете установить плагин для реализации дополнительных полей (Advanced Custom Fields, например), добавить дополнительное поле с текстовым редактором для рубрики, а потом выводить его в шаблоне:
if (is_category() and (!get_query_var('paged') or get_query_var('paged') == 1)) { echo get_field('название_поля', 'category_' . get_query_var('cat')); }
У практически каждой современного интернет-магазина этот функционал есть. В OpenCart это сделано через опции, в Woocommerce + WP через вариации и атрибуты. В последнем случае для вариации можно указать свою картинку.
Там проблема в начале файла /assets/templates/stomafamily/js/custom.js. Вам нужно правильно подключить библиотеку TweenMax (https://greensock.com/tweenmax)
Фактически кешируются обработанные данные, строки, объекты и массивы. Это позволяет существенно уменьшить количество запросов к базе данных.