Как се пише: <em>пръти</em> или <em>прътове</em>?
от Павлина ВърбановаКак се пише: <em>проформа, про-форма</em> или<em> про форма</em>?
от Павлина ВърбановаКак се пише: <em>андалусец</em> или <em>андалусиец</em>?
от Павлина ВърбановаКак се пише: <em>подобект</em> или <em>под-обект</em>?
от Павлина ВърбановаКак се пише: <em>криволича</em> или <em>кривулича</em>?
от Павлина ВърбановаКак да използваме Autoptimize с HTTP/2
от ГонзоВ по-новите версии на Autoptimize има възможност чрез филтър да съставите списък с разрешени за обединяване скриптове. Това позволява да обедините скриптовете, които са задължителни за всички страници в сайта и да оставите скриптовете, които се зареждат само на определени страници извън пакета. Това решава и един друг проблем с Autoptimize – когато различни скриптове се зареждат на различни страници, пакетите, които се генерират са различни. Това води до безконтролно увеличаване на кеша на Autoptimize и до забавяне на зареждането за потребителите, защото вместо да заредят кеширан файл, всеки път теглят различен.
И така, да започнем с обединяването на задължителните скриптове:
/**
* Whitelist scripts to autoptimize
*
* @return: whitelist
*/
function gonzo_js_whitelist() {
$whitelist = array(
'jquery.js',
'jquery-migrate.min.js',
'wp-embed.min.js'
);
return join( ',', $whitelist );
}
add_filter( 'autoptimize_filter_js_whitelist', 'gonzo_js_whitelist' );
След като вече имаме пакет с най-важните скриптове, нужни за сайта, трябва да се погрижим за две неща:
- Да зареждаме обединените скриптове преди останалите, защото пакетът съдържа jQuery, а някои от останалите скриптове най-вероятно разчитат на него.
- Да зареждаме скриптовете асинхронно, за да не блокират изобразяването на страницата.
Генерираният от Autoptimize скрипт елемент може да поставим веднага след елемента title така:
/**
* Where in the HTML optimized JS is injected.
*
* @param array $replacetag, containing the html-tag and the method (inject "before", "after" or "replace")
* @return array with updated values
*/
function gonzo_override_js_replacetag( $replacetag ) {
return array( '</title>', "after" );
}
add_filter( 'autoptimize_filter_js_replacetag', 'gonzo_override_js_replacetag', 10, 1 );
За да зареждаме всички скриптове асинхронно, и в същото време последователно, ще добавим атрибут defer към тях. Така скриптовете не само се зареждат асинхронно, но и не блокират изобразяването на страницата когато се изтеглят. Освен това атрибута defer кара скриптовете да се изпълнят по реда в документа.
/*
* Defer all javascripts
*/
function gonzo_defer_js($tag, $handle) {
if( ! is_admin() ){
$tag = str_replace( ' src', ' defer="defer" src', $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'gonzo_defer_js', 10, 2 );
/**
* Change flag added to Javascript.
*
* @param $defer: default value, "" when forced in head, "defer " when not forced in head
* @return: new value
*/
function gonzo_override_defer( $defer ) {
return "defer ";
}
add_filter( 'autoptimize_filter_js_defer', 'gonzo_override_defer', 10, 1 );
И на края, за да гарантираме, че скриптовете ще се кешират правилно от браузърите и прокситата, ще премахнем GET променливата с версията, която WordPress добавя към адресите на всички ресурси:
/*
* Remove query string from static assets
*/
function gonzo_remove_script_version( $src ){
return remove_query_arg( 'ver', $src );
}
add_filter( 'script_loader_src', 'gonzo_remove_script_version' );
Естествено, подобен подход можем да приложим и към CSS файловете, които сайта зарежда. На края ще имаме бърз сайт за удоволствие на потребителите и печалба на клиента.
2017-та
от Ясен ПраматаровЕдна стара година, за която не ми се пише дълго. Като цяло гадна година, с няколко много готини проблясъка, но тях ние сами си ги направихме, на мускули и с лишения, даже някак напук на всичко. Имаше готини неща, като пренасяне и рождени дни, за тях писах. Но иначе гадна година.
Пак концерти пропуснах, макар много да се навивах да ида, накрая все нещо се случваше и не видях нито Аксепт, нито Хелоуин. И за първи път от дълги години бях в студиото на приятел с китара в ръка и… тотално се отчаях от себе си. Още гледам китарите в ъгъла и не знам кога ще ги взема пак. Въпреки че, както казва пък друг един приятел, свиренето е почти изцяло рутина и няма нищо магично в самото свирене. Важното е да си ентусиаст, както казва пък трети един приятел. Брей, ако не бяха разпръснати тия тримата из градове и държави, да ги бях събрал да правим банда направо…
Освен къщата и всички страхотни часове тук с децата ни, успяхме да обиколим остров Тасос. Приятно ми е, шкипер Ясен. Е, не посмях да съм сам и бяхме с баш шкипер, той се оказа на нашите години и на нашия акъл, та добре стана. Даже сме следвали по едно и също време, даже сме били заедно на спецкурса на Цочо, а и съм сигурен, че имаме общи компании от едно време. Е, не е от философския, но какво да се прави, никой не е съвършен. :)
В началото на годината баща ми влезе в болница за тежка сърдечна операция, от която на практика още не се е възстановил, а и прогнозите са неясни. Годината всъщност беше най-тежка не за мен, а за майка ми. Сигурно е била по-лека за брат ми. Не ми се пише повече.
Честита нова година, добре си ни дошла, добре си ни заварила! Да си опичаш акъла, надежди ти възлагаме!
арх. Георги Николов приключи успешно ангажимент си на проект мениджър от страна на главния изпълнител STRABAG на обект EXPO 2000 Фаза IV
от Архитектурно студио АрхеЕкспортиране на заглавия, съдържащи HTML, от WordPress
от ГонзоWordPress позволява да се въвежда HTML на много места, на които не бихте си помислили да го направите. Например заглавията на публикациите – например за да откроите някои думи, да маркирате правилно абревиатура или по друга причина. Например повечето статии в „Как се пише“ съдържат HTML, за да откроят думите, за които се отнася статията. Обаче ако ви се наложи да експортирате това съдържание, ще откриете, че заглавията са изчистени от всякакъв HTML и форматирането е загубено. Така стандартният експорт на WordPress става безполезен за пазене на архив на съдържанието или за прехвърлянето му на друга инсталация. Обаче има лесно решение.
Ако поровите в кода на функцията export_wp(), ще видите две интересни неща:
- Там е дефинирана функцията
wxr_cdata(), която затваря подадения стринг в CDATA блок. - Заглавията на публикацитиите се филтрита през филтъра
the_title_rss.
Значи за да можем да експортираме заглавията заедно с HTML-а, трябва да махнем от този филтър функцията, която чисти HTML-а (strip_tags естествено, както и esc_html()) и да добавим wxr_cdata(). Всъщност това второ няма да стане, защото функцията е дефинирана само в контекста на export_wp(), така че ще трябва просто да я клонирате.
function htr_cdata_post_title ( $title ) {
$title = '<![CDATA[' . $title . ']]>';
return $title;
}
add_filter( 'the_title_rss', 'htr_cdata_post_title' );
remove_filter( 'the_title_rss', 'strip_tags' );
remove_filter( 'the_title_rss', 'esc_html' );
Това е всичко, при… опа, това беше от друго шоу.