Сышышь ты, выходи сюда,
поговорим !

Аптымізуем WordPress header і выдаляем лішнія элементы

Напэўна той, хто задумваўся пра аптымізацыю блога на wordpress ці з ёй ужо сутыкаўся, ведае пра замену функцый header на падобнае значэнне. Гэта значыць, што замест функцыі header выкарыстоўваецца падобнае значэнне, да прыкладу, у месца bloginfo ( 'charset') паказваюць charset = UTF-8. Раней гэты мануал па аптымізацыі базы даволі часта выкарыстоўвалі, а цяпер лічыцца што прадукцыйнасць падчас прапанаванага дзеянні не так і вялікая, таму што большую частку значэнняў wordpress header бярэ з базы дадзеных за однкратное да яе зварот. Нягледзячы на ​​гэты факт, я ўсё ж хачу паглыбіцца ў тэму аптымізацыі wordpress header, таму як некалькі вельмі цікавых момантаў там усё ж ёсць, а адказы на іх я адшукаў у гэтым артыкуле.

Нягледзячы на ​​гэты факт, я ўсё ж хачу паглыбіцца ў тэму аптымізацыі wordpress header, таму як некалькі вельмі цікавых момантаў там усё ж ёсць, а адказы на іх я адшукаў у гэтым артыкуле

Паглядзіце ўважліва на код HTML у wordpress блогу, у галіне head, параўнайце яго з файлам header.php, бачыце, што акрамя названых стыляў CSS і скрыптоў Javascript там знаходзіцца яшчэ мноства радкоў. Гэтыя радкі там з'яўляюцца пры выкарыстанні убудоў, якія дадаюць у HTML свае скрыпты і стылі, бывае так, што выніковы код ствараецца досыць вялікі.

Вось калі разгледзець адзін з часта выкарыстоўваюцца убудоў размежавання на старонкі WP-PageNavi, які выдатна спраўляецца са сваёй задачай, але пры працы упісвае свой уласны файл стыляў CSS. І калі гэта магчыма, то пры аптымізацыі сайта пажадана аб'яднаць нейкая колькасць CSS файлаў і мець адзін. Але не ўсё так проста, як здалося на першы погляд, нельга проста дадаць неабходныя радкі ў свой файл style.css, таму што ад выкліку стыляў плагіна вызваліцца, ня атрымацца без дэактывацыі WP-PageNavi.

Як аказалася пры дапамозе хуков функцыі wp_head рэалізуецца вялікая частка «дадатковых уставак» патрэбных для блока head. ЯЕ, хутчэй за ўсё, можна знайсці ў кодзе файла шаблону header.php. І проста выдаліць яе нельга, так як абавязкова пацягне за сабой пэўныя наступствы, што негатыўна можа адбіцца на працы блога, бо знікнуць не толькі «лішнія ўстаўкі», але і іншыя, без якіх нельга абыйсціся.

Можна пайсці іншым шляхам, дэактываваць некаторыя «ўстаўкі" не выдаляючы функцыю wp_head. Выкарыстоўваем наступны алгарытм.

1) Трэба старанна праглядзець асноўны файл php плагіна, хуки якога Вы сабраліся выдаліць. Адшукайце там наступную канструкцыю:

add_action ( 'wp_head', 'plugin_function_here');

2) Каб карэктна пазбавіцца ад дадзенага выкліку, трэба дадаць у файл functions.php наступны радок:

remove_action ( 'wp_head', 'plugin_function_here');

3) Захоўваем шаблон і правяраем, што ў нас атрымалася.

Унікальныя выпадкі таксама сустракаюцца, пры якіх прымяненне remove_action для wp_head () не працуе. Прывяду ў прыклад WP-PageNavi (версія 2.5.0), там яўнага выкліку функцыі ў wp_head () няма, нягледзячы на ​​гэта, убудова падгружае свой файл стыляў. Уважліва паглядзіце на першапачатковы код wp-pagenavi.php, там ёсць такая функцыя «Enqueue PageNavi Stylesheets», дадавалая стылі праз:

add_action ( 'wp_print_styles', 'pagenavi_stylesheets');

Дапісваем ў файл функцый fuctions.php наступны радок, каб пазбавіцца ад гэтага выкліку:

remove_action ( 'wp_print_styles', 'pagenavi_stylesheets');

У працы з непатрэбнымі выклікамі і хуками праглядаецца пэўны прынцып - Вы шукайце патрэбную функцыю і адключаеце яе.

Можна вызваліцца і ад іншых не патрэбных элементаў, якія вы не выкарыстоўваеце, ужыўшы хакі для functions.php, напрыклад:

remove_action ( 'wp_head', 'feed_links_extra', 3); // спасылкі на дадатковыя rss катэгорый remove_action ( 'wp_head', 'feed_links', 2); // спасылкі на асноўны rss і каментары remove_action ( 'wp_head', 'rsd_link'); // для сэрвісу Really Simple Discovery remove_action ( 'wp_head', 'wlwmanifest_link'); // для Windows Live Writer remove_ action ( 'wp_head', 'wp_generator'); // прыбірае версію wordpress // прыбіраем розныя спасылкі пры адлюстраванні посту - наступная, папярэдняя запіс, арыгінальны url і да т.п. remove_action ( 'wp_head', 'start_post_rel_link', 10,0); remove_action ( 'wp_head', 'index_rel_link'); remove_action ( 'wp_head', 'rel_canonical'); remove_action ( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); remove_action ( 'wp_head', 'wp_shortlink_wp_head', 10, 0);

Ёсць адзін нюанс, некаторыя функцыі могуць, проста на проста, не працаваць у залежнасці ад версіі wordpress, я праводзіў тэставанне для wp 3.0.4, знайсці прыдатныя функцыі Вы можаце ў wp-includes / default-filters.php.

У працэс аптымізацыі можна паглыбіцца яшчэ больш. Здараецца так, што шаблоны блога могуць выклікаць jQuery Javascript праз wp_head () адначасова з іншымі падобнымі скрыптамі па-за wp_head (). Каб не з'яўляліся лішнія выкліку, трэба проста пазбавіцца ад jQuery ў wp_head (), але высветлілася, што зрабіць гэта не так ужо і проста. Механізм remove_action ( 'wp_head', 'jquery'); не працуе, але на шчасце знайшлося іншае рашэнне:

wp_deregister_script ( 'jquery');

Пры размяшчэнні яе ў functions.php, у адміністрацыйнай панэлі кіравання wordpres, перастаюць працаваць некаторыя скрыпты, якія адказваюць за выпадальнае меню і некалькі іншых функцый. Правёўшы некалькі тэставанняў, аўтару арыгінальнай артыкула ўдалося знайсці цікавае рашэнне, ён дадаў адпаведныя радкі не ў файл functions.php, а ў header.php:

<? Php wp_deregister_script ( 'jquery'); ?&gt; <? Php wp_head (); ?>

Я зрабіў некалькі інакш - дадаў некаторы ўмова ў functions.php

if (! is_admin ()) wp_deregister_script ( 'jquery');

Усё працуе!

Атрымліваецца, што дзякуючы дадзеным невялікіх дзівацтваў, Вы можаце паспяхова пазбавіцца ад элементаў у header, якія не выкарыстоўваеце, а таксама аб'яднаць стылі і скрыпты ў адзіны файл.

Для header яшчэ адзін маленькі хак:

remove_action ( 'wp_head', 'wp_syntax_head');

Ён дазваляе прыбіраць падключэнне файлаў стыляў для вылучэння ў тэксце праграмнага кода, змесціва wp-syntax.css не вельмі вялікае і з лёгкасцю яго можна змясціць у звычайны файл стыляў.

крыніца

Php wp_deregister_script ( 'jquery'); ?
Gt; <?
Php wp_head (); ?