TiA

Рейтинг
116
Регистрация
12.06.2009

Нужно написать функцию для изменения объекта 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

packs:
Вообщем то я уже почти и пришел к ТЗ в таком виде. Кстати, насчет ID - я если что то верстаю, стараюсь избегать ID а в качестве идентификаторов для js использовать только классы из за недопустимости одинаковых ID для двух разных элементов в валидаторе w3c. Используете ли вы ID?

Я использую и ID, и классы.

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

Если речь идет об элементах, которые должны быть в единственном экземпляре на странице (шапка, футер, блок с содержимым, фон для модальных окон и т.д.) и практически не изменяются от странице к странице, то лучше использовать ID. В JS, например, это позволяет работать с одним конкретным элементом и не беспокоится о случаях, если их на странице вдруг будет несколько. Также использование ID позволяет достаточно просто перезадать стили для определенных элементов, специфичность у селекторов c ID выше.

Часто хорошие результаты дает комбинирование ID с классами, когда классы используются для основной стилизации, а селекторы с ID для коррекции стилей и возможности из JS работать только с этим конкретным элементом.

packs:
Возможно в этом есть доля правды :)

Просто как то давно заказывал верстку на фрилансе и верстальщик вроде был с рейтингом и отзывами и опытный а прислал такое что ничего не разберешь - все классы a1 a2 a3 n15 и тд и все наследовано перенаследовано непонятно от чего, со скриптами такая же беда была.

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

Вообе за 6 лет работы я практически не сталкивался с ТЗ, где явно указана схема именования классов, например. Связано это с тем, что если не давать классам осмысленные названия и не использовать внятную структуру наследования, то крайне сложно сверстать сайт с десятком страниц. Та же история и с форматированием кода.

kaaaaaljan:
В общем, вот какая проблема:

Надо сделать пару сотню сайтов по полмиллиона страниц

Есть готовые материалы в txt (и csv) форматах объемами по полмиллиона страниц

Как заливать такие объемы в worpress???


есть CSV файлы по полмиллиона материалов, если даже разбить файлы по 100 000 материалов, то импортируется через плагины очень долго, т.к. замечено, что с каждым импортируемым файлом закидывается все медленнее и медленнее. Если первая 1000 материалов заливается за 2 минуты, то после 10 000 залитых, этот же объем заливается уже за 20 минут, и затем времени надо все больше и больше на тот же объем. А сайтов таких предполагается создать много.

Вот думаю над следующими вариантами,

1. использовать прогу

2 Оптимально разбить мегафайл на файлы по 1-2 тысячи материалов, затем залить их разом в папку на сервере и импортировать ПО ОЧЕРЕДИ, но нужен спец плагин. Пока что я не нашел подходящего

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

Может ли кто-нибудь подсказать другой выход из этой ситуации, как импортировать огромный файл CSV в вордпресс??? У кого какой есть опыт?

Здравствуйте.

Без дополнительной опимизации WordPress с таким объемом материалов будет очень сильно тормозить. Вы уверены, что вам нужно использовать именно эту систему?

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

Коготь дракона:
Такой проблемы как раз нет. Над текущей версией в Google Docs работают 2 человека (один из них я), у обоих есть Гугл-почта, и видно кто какие изменения делал.
Проблема в том, что данные в таблице сейчас обновляются вручную, и надо как-то автоматизировать этот процесс (не обязательно на основе Гугл таблиц, как раз ищу возможные решения).

Здравствуйте.

Подобного рода задачи зачастую решаются вручную и зависят в первую очередь от системы, куда выглужаются данные. В рамках 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'));

}
Glong:
Доброго времени суток!
Посоветуйте CMS для магазина где можно было бы при заказе товара выбрать дополнительные опции, как, например, тут есть дополнительные опции "Объем жидкость", "Концентрация". Цена товара будет меняться в зависимости от выбранных опций.

У практически каждой современного интернет-магазина этот функционал есть. В OpenCart это сделано через опции, в Woocommerce + WP через вариации и атрибуты. В последнем случае для вариации можно указать свою картинку.

Там проблема в начале файла /assets/templates/stomafamily/js/custom.js. Вам нужно правильно подключить библиотеку TweenMax (https://greensock.com/tweenmax)

yura5:
А это будет кеширование на уровне БД?

Фактически кешируются обработанные данные, строки, объекты и массивы. Это позволяет существенно уменьшить количество запросов к базе данных.

Всего: 800