If design isn’t profitable, then it’s art.

WordPress Hooks

Publicat de  Marius N.  |  Marţi, 06 Iulie 2010 12:40

wordpress hooks Prin termenul “hooks” (carlige) intelegem functii personalizate WordPress care se “agata” de functiile standard, schimbandu-le modul de actionare. Aceste functii sunt foarte utile pentru ca nu modifica functiile din fisierele de baza – core files. Mai mult, ele reprezinta baza pluginurilor, desi intre termenii plugin si hook exista diferente.

In acest articol vom prezenta modul de functionare al WordPress Hooks si vom da exemple de functii folositoare si usor de integrat in blogul dumneavoastra.

Ce este un “hook”?

Pentru a adauga diferite functionalitati unui blog WordPress, trebuiesc modificate functiile platformei, deci cu alte cuvinte trebuiesc modificate fisierele de baza (core files). Acest lucru nu este recomandat pentru ca orice modificare se pierde la un upgrade, iar prin modificarea functiilor se pot introduce vulnerabilitati in sistem. Solutia la aceasta problema a reprezentat-o Plugin API. Pluginurile, stim cu totii, sunt pachete de functii personalizate care modifica sau adauga noi capabilitati platformei WordPress.

Hook-urile reprezinta piesele principale folosite la realizarea unui plugin – functii personalizate care “se agata” de functiile standard ale platformei si le altereaza modul de lucru.

In acest articol insa nu voi vorbi despre cum sa faceti un plugin (nu uitati ca pluginurile vin cu propriile fisiere care se adauga in directorul wp-content/plugins), iar functiile personalizate trebuiesc puse undeva. Locatia este acelasi fisier functions.php din directorul wp-content/themes/tema_curenta in care am scris si functiile pentru wordpress shortcodes.

Dezactivarea formatarii automate WordPress

O problema care ne da batai de cap la toata lumea este faptul ca WordPress converteste automat ghilimelele normale in ghilimele curbate. Astfel daca am introdus cod sursa intr-un articol (spre exemplu codul pentru banner exchange), acesta este modificat si nu va mai functiona.
Solutia ar fi sa adaugam in fisierul functions.php urmatorul cod:

function my_formatter($content) {
$new_content = '';
$pattern_full = '{(\[raw\].*?\[/raw\])}is';
$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);

foreach ($pieces as $piece) {
if (preg_match($pattern_contents, $piece, $matches)) {
$new_content .= $matches[1];
} else {
$new_content .= wptexturize(wpautop($piece));
}
}
return $new_content;
}

remove_filter('the_content', 'wpautop');
remove_filter('the_content', 'wptexturize');
add_filter('the_content', 'my_formatter', 99);

Atunci cand vreti sa introduceti cod sursa pe pagina, folositi codul scurt [raw]. Spre exemplu:

[raw]<a href="http://google.com/">Google</a>[/raw]

Dezactivare mesaj “Please Update Now” la WordPress

Personal gasesc utila avertizarea din dashboard cand o noua versiune WordPress a fost lansata. Problema este ca multa lume nu intelege ca inainte de a actualiza platforma de blogging, este necesar un back-up. Astfel se ajunge la pierderea unor informatii sau stricarea completa a platformei. Problema devine si mai grava atunci cand este vorba de blogul unui client, de aceea este mai bine sa nu ii lasam lui aceasta optiune (de a strica blogul, bineinteles).
Cu ajutorul codului urmator, problema este rezolvata:

if (!current_user_can('edit_users')) {
add_action( 'init', create_function( '$a',
"remove_action( 'init', 'wp_version_check' );" ), 2 );
add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
}

Dezactivarea autosalvarilor unui articol

Atunci cand scriem un articol, WordPress salveaza periodic continutul. Desi este o functie utila, exista si cazuri cand doriti sa dezactivati autosalvarea.
Si in acest caz avem cateva linii de cod pe care le vom insera in acelasi fisier functions.php:

function disableAutoSave(){
wp_deregister_script('autosave');
}
add_action( 'wp_print_scripts', 'disableAutoSave' );

Prevenirea continutului duplicat in paginile cu comentarii

Incepand cu versiunea 2.7, WordPress ofera posibilitatea de impartire a comentariilor pe mai multe pagini, existand riscul de a avea continut duplicat. Pentru a evita o astfel de problema, putem folosi tagul rel="canonical". Codul necesar a fi inserat in functions.php este:

function canonical_for_comments() {
global $cpage, $post;
if ( $cpage > 1 ) :
echo "\n";
echo "<link rel='canonical' href='";
echo get_permalink( $post->ID );
echo "' />\n";
endif;
}

add_action( 'wp_head', 'canonical_for_comments' );

Desi shortcode-urile si hook-urile sunt inserate in acelasi fisier si par similare, intre ele exista diferente fundamentale. Shortcode-urile sunt functii de sine statatoare, ce nu interactioneaza cu functiile standard WordPress si nici nu modifica functionalitatile de baza ale platformei. Aceste functii nu sunt executate implicit, ci trebuiesc apelate prin intermediul unui cod. Hook-urile pe de alta parte apeleaza la functii standard WordPress pentru a modifica modul de functionare sau rezultatul final al acestora.

Adauga un comentariu

Campurile notate cu (*) sunt obligatorii.

Newsletter

Abonati-va la newsletterul nostru pentru a primi ultimele noutati pe e-mail.

Contact

Dream Webdesign
Pitesti, Arges

Telefon: 0745.034.871
Email: office@dream-webdesign.ro

Conectare cu noi:

Testimoniale

Andreea M

Dream Webdesign este un partener de incredere, oferindu-ne suport complet pe toata durata proiectului de reconstructie a website-ului.

Aurel N.

Dream Webdesign este o agentie cu care am avut o colaborare fructuoasa, fara de care probabil compania mea nu ar fi ajuns unde este astazi.

Cristian A.

Echipa Dream Webdesign dovedeste, cu fiecare proiect realizat, profesionalism, dedicatie si pasiune, fiind comunicativa, rapida si oferind preturi avantajoase.

Adriana N.

Dream Webdesign este o agentie de top care stie sa intuiasca ceea ce isi doreste un client si ofera chiar mai mult decat si-ar putea acesta imagina.

Florina R.

De-a lungul timpului, am colaborat cu numeroase firme care isi propuneau ca pe primul loc sa fie clientul, iar Dream Webdesign se numara printre ele.