Cea mai bună colecție de cod pentru fișierul tău 'functions.php'

9 sept. 2010, 11:29:00
Vizualizări: 169K
Voturi: 346

La fel ca mulți alții care citesc acum această postare, am parcurs diverse bloguri, forumuri și grupuri de discuții pentru a-mi îmbunătăți cunoștințele despre WordPress. În ultimele 12 luni am avut misiunea de a înlocui utilizarea plugin-urilor prin adăugarea de cod în fișierul functions.php.

Deși sunt complet de acord că plugin-urile sunt foarte utile în multe situații, experiența mea a demonstrat că în 90% din cazuri, deși ar putea exista un plugin, utilizarea acestuia ar putea crea complicații inutile și probleme de compatibilitate. În plus, în multe cazuri, astfel de plugin-uri au adăugat meniuri și alte elemente administrative pe care nu le doresc sau nu am nevoie de ele.

De cele mai multe ori am descoperit că analizând codul plugin-urilor am putut extrage bucata de cod dorită și o pot implementa direct în functions.php. Acest lucru mi-a oferit exact funcționalitatea de care aveam nevoie fără a include elemente inutile.

Așadar, scopul acestei postări este încercarea mea de a vă implica pe voi, cititori/administratori/dezvoltatori, să împărtășiți cu mine și cu ceilalți de aici orice fragmente de cod pe care le considerați utile și le-ați adăugat în fișierul functions.php al temei voastre pentru a extinde sau îmbunătăți WordPress fără a utiliza un plugin.

Când trimiteți un răspuns aici, vă rog să dați fiecărui fragment de cod un titlu, să ne spuneți cu ce versiune de WordPress știți că este compatibil, să includeți orice descriere care credeți că descrie cel mai bine funcția sa și (dacă este cazul) să includeți un link către plugin-ul original sau sursa unde ați găsit informația.

Aștept cu nerăbdare toate răspunsurile voastre și, bineînțeles, voi adăuga continuu propriile mele descoperiri ori de câte ori le găsesc.

Vă rugăm să votați întrebarea și orice răspunsuri pe care le considerați utile făcând clic pe săgeata sus din partea stângă a întrebării sau răspunsului.

25
Comentarii

Te rog să adaugi și vechile tale constatări existente.

hakre hakre
9 sept. 2010 11:38:16

Salut @NetConstructor: Sunt îngrijorat de această întrebare pentru că este o întrebare de tip "Listă de X" despre care oamenii de la StackExchange ne-au spus să fim atenți: http://meta.stackexchange.com/questions/57226/should-we-have-a-list-of-x-close-reason Principala mea preocupare este că atunci când mă gândesc la întrebarea ta, îmi pot imagina un număr aproape infinit de răspunsuri și, ca urmare, mă îngrijorează că această întrebare va duce la o colecție de răspunsuri aleatorii, dar nimic definitiv. Vreau să aflu și alte opinii înainte de a (vota să) o închid, deoarece nu vreau să fiu prea dur, dar am rezerve.

MikeSchinkel MikeSchinkel
9 sept. 2010 14:00:40

Votul meu este fie pentru închidere, fie pentru transformarea în wiki comunitar.

Chris_O Chris_O
9 sept. 2010 15:37:41

Având în vedere că primele 5 răspunsuri au fost date de OP și întrebarea pare să fie mai degrabă orientată către colectarea unui șir de răspunsuri decât către un singur răspuns definitiv, acesta ar trebui să fie un wiki al comunității.

EAMann EAMann
9 sept. 2010 17:43:16

se pare că nu se poate modifica pur și simplu o întrebare într-un wiki. Este corect?

NetConstructor.com NetConstructor.com
9 sept. 2010 18:31:53

Cu toate acestea, acest lucru este util (am găsit 2 fragmente pe care le voi folosi intens) dacă va fi un wiki al comunității și trebuie creat de la zero pentru a face asta, poate putem muta pur și simplu conținutul de aici acolo?

Lemon Bacon Lemon Bacon
10 sept. 2010 02:58:46

@NetConstructor.com ... Am convertit întrebarea în wiki când am scris ultimul meu comentariu. Îmi pare rău dacă a creat vreo confuzie. În mod normal, tu (ca autorul original) poți transforma o întrebare în wiki în orice moment.

EAMann EAMann
10 sept. 2010 03:56:15

@EAMann mulțumesc... Căutam această opțiune dar nu eram sigur unde se afla. Poate după ce ai convertit-o eu pur și simplu nu am mai văzut opțiunea?

NetConstructor.com NetConstructor.com
10 sept. 2010 08:37:41

@NetConstructor.com - Exact. Odată ce este convertită, este convertită... opțiunea este setată și dispare din pagină.

EAMann EAMann
10 sept. 2010 17:23:26

Aș considera acest lucru un stil nepotrivit și aș prefera plugin-uri. a) Sunt construite de dezvoltatori dedicați b) sunt întreținute și ușor de actualizat. Pentru fragmente mici personalizate, recomand plugin-ul Shortcode Exec PHP care oferă o modalitate foarte curată - și portabilă - de a personaliza WordPress-ul tău.

Raphael Raphael
10 nov. 2010 11:43:21

deși interesant, cred că majoritatea oamenilor ar fi de acord că atunci când dezvolți teme, dorești ca lucrurile să fie localizate în fișierul functions.php

NetConstructor.com NetConstructor.com
24 nov. 2010 19:01:50

@NetConstructor - Dacă ai de gând să editezi intrările altora, te rog să ai grijă când o faci, ai stricat indentarea în postarea mea, eu întotdeauna mă străduiesc să mențin indentarea pentru lizibilitate. Aș aprecia, de asemenea, dacă ai putea să-ți faci timp să explici modificările pe care le faci (nu am văzut niciun motiv pentru care să editezi intrarea mea - și nu a existat niciun rezumat al modificărilor).

t31os t31os
28 ian. 2011 18:53:26

@t31os -- Am editat pentru a păstra consistența cu toate înregistrările

NetConstructor.com NetConstructor.com
7 feb. 2011 15:53:20

Toate răspunsurile care nu sunt legate de o temă ar trebui eliminate. Acest thread este un exemplu bun de practici de codare necorespunzătoare.

fuxia fuxia
13 iun. 2011 15:09:56

Aș fi trebuit să nu fiu de acord. Întrebarea nu era legată de temă. Toate modificările aplicabile functions.PHP sunt binevenite și utilizatorii ar trebui să voteze în sus/jos în consecință.

NetConstructor.com NetConstructor.com
14 iun. 2011 07:56:23

Este interesant că nu se menționează nicăieri că fișierul functions.php este cel din directorul temei tale, ceea ce duce la confuzii, cum ar fi aceasta: http://wordpress.stackexchange.com/questions/25341/error-after-editing-functions-php

scribu scribu
9 aug. 2011 03:07:10

Cred că ar fi mai bine să încurajăm oamenii să creeze un plugin personalizat pentru funcționalități în loc să folosească functions.php din tema lor.

Ian Dunn Ian Dunn
16 ian. 2012 20:49:10

@rarst - Referitor la comentariul tău despre închiderea acestui thread, nu acesta este motivul pentru care este listat în wiki-ul comunității?

User User
19 feb. 2012 15:35:19

@Cor van Noorloos utilizarea statutului de wiki comunitate a fost mult redusă și descurajată de rețea. Mai simplu spus, scuza "nu se potrivește cu întrebările și răspunsurile, dar e wiki comunitate!" nu mai funcționează. Răspunsurile de aici au devenit un haos dezordonat și prost întreținut, vizitat doar pentru factorul de distracție. A existat o mișcare intensă în întreaga rețea pentru a elimina astfel de întrebări.

Rarst Rarst
19 feb. 2012 15:43:03

@rarst - De înțeles. Punctul a fost recepționat.

User User
19 feb. 2012 15:55:04

În legătură cu închiderea acestui "wiki" specific, votez pentru redeschiderea lui. Evident, această postare wiki este foarte populară, demonstrată de faptul că are 30.000 de vizualizări, adică de trei ori mai mult decât ORICE altă întrebare sau wiki de pe acest site, iar subiectul în sine a fost votat pozitiv de 119 ori, adică dublu față de orice altă întrebare sau subiect. Dacă considerați că are valoare, vă rugăm să votați pentru redeschiderea lui făcând clic pe linkul "redeschide".

NetConstructor.com NetConstructor.com
20 feb. 2012 13:12:40

@NetConstructor.com Numărul pur de vizualizări ale paginii nu este un indicator al calității. Ar trebui să încurajăm întrebări specifice cu răspunsuri specifice și practici de codare bune. Acest thread este exact opusul.

fuxia fuxia
22 feb. 2012 04:44:30

@toscho - tocmai de aceea acest subiect a fost configurat ca wiki și, prin urmare, acest post este perfect valid. Punctul menționat în legătură cu numărul de vizualizări a fost adus pentru că acest subiect este evident de 3 ori mai popular decât orice alt subiect de pe acest site. Acest website este popular tocmai datorită întrebărilor de acest gen și, prin urmare, nu are sens să îl închidem. Nu cred că se poate dezbate acest lucru decât dacă interesul comunității pentru astfel de subiecte nu are valoare pentru administratori.

NetConstructor.com NetConstructor.com
24 feb. 2012 18:38:34

Voi adăuga încă un comentariu aici bazat pe niște calcule pe care tocmai le-am făcut. Există mai puțin de 790 de utilizatori înregistrați pe acest website cu un rating de "1" sau mai mult. Presupunând că acest grup de persoane reprezintă cei care votează și/sau contribuie efectiv pe acest site (iar 790 fiind un număr extrem de corect), atunci cei 117 oameni care au votat pozitiv această întrebare reprezintă peste 14% din toți utilizatorii activi care au considerat acest subiect util. Votați pentru redeschiderea subiectului, vă rog.

NetConstructor.com NetConstructor.com
24 feb. 2012 18:47:01

@NetConstructor.com Discută pe Meta unde oamenii îți pot vedea mai bine argumentele. :)

fuxia fuxia
24 feb. 2012 19:10:14
Arată celelalte 20 comentarii
Toate răspunsurile la întrebare 30
2
109

Activează Funcția Ascunsă de Administrare care Afișează Toate Setările Site-ului

Testat pe: WordPress 3.1 RC3

Acest mic fragment de cod face ceva destul de interesant. Va adăuga o opțiune suplimentară în meniul de setări cu un link către "toate setările" care vă va afișa o listă completă a tuturor setărilor din baza de date legate de site-ul dumneavoastră WordPress. Codul de mai jos va face acest link vizibil doar pentru un utilizator cu rol de administrator și îl va ascunde pentru toți ceilalți utilizatori.

// LINK PERSONALIZAT ÎN MENIUL DE ADMINISTRARE PENTRU TOATE SETĂRILE
   function all_settings_link() {
    add_options_page(__('Toate Setările'), __('Toate Setările'), 'administrator', 'options.php');
   }
   add_action('admin_menu', 'all_settings_link');
10 sept. 2010 12:28:54
Comentarii

Fantastic pentru dezvoltare! Folosesc frecvent tabelul de opțiuni pentru a stoca versiunile bazelor de date pentru plugin-urile mele... utilizarea phpMyAdmin pentru a reveni la o versiune veche a bazei de date și a testa un script de actualizare este o corvoadă... acest lucru o va face mult mai ușor!!!

EAMann EAMann
15 sept. 2010 19:03:00

De asemenea, poți ajunge la aceeași pagină de opțiuni (când ești autentificat) mergând la yoursite/wp-admin/options.php

j08691 j08691
9 oct. 2015 22:55:01
0
89

Modificarea Siglei și a Linkului URL pentru Pagina de Autentificare

Testat pe: WordPress 3.0.1

Acest cod vă va permite să modificați cu ușurință sigla paginii de autentificare WordPress, precum și linkul href și textul titlului acestei sigle.

add_filter( 'login_headerurl', 'namespace_login_headerurl' );
/**
 * Înlocuiește URL-ul siglei din antetul paginii de autentificare
 *
 * @param $url
 */
function namespace_login_headerurl( $url ) {
    $url = home_url( '/' );
    return $url;
}

add_filter( 'login_headertitle', 'namespace_login_headertitle' );
/**
 * Înlocuiește titlul siglei din antetul paginii de autentificare
 *
 * @param $title
 */
function namespace_login_headertitle( $title ) {
    $title = get_bloginfo( 'name' );
    return $title;
}

add_action( 'login_head', 'namespace_login_style' );
/**
 * Înlocuiește sigla din antetul paginii de autentificare
 */
function namespace_login_style() {
    echo '<style>.login h1 a { background-image: url( ' . get_template_directory_uri() . '/images/logo.png ) !important; }</style>';
}

EDIT: Dacă doriți să utilizați sigla site-ului pentru a înlocui sigla paginii de autentificare, puteți folosi următorul cod pentru a prelua dinamic această informație (testat pe WP3.5):

function namespace_login_style() {
    if( function_exists('get_custom_header') ){
        $width = get_custom_header()->width;
        $height = get_custom_header()->height;
    } else {
        $width = HEADER_IMAGE_WIDTH;
        $height = HEADER_IMAGE_HEIGHT;
    }
    echo '<style>'.PHP_EOL;
    echo '.login h1 a {'.PHP_EOL; 
    echo '  background-image: url( '; header_image(); echo ' ) !important; '.PHP_EOL;
    echo '  width: '.$width.'px !important;'.PHP_EOL;
    echo '  height: '.$height.'px !important;'.PHP_EOL;
    echo '  background-size: '.$width.'px '.$height.'px !important;'.PHP_EOL;
    echo '}'.PHP_EOL;
    echo '</style>'.PHP_EOL;
}
10 sept. 2010 12:01:29
3
81

Includere tipuri personalizate de postări în rezultatele căutării.

// FĂ CUSTOM POST TYPES CĂUTABILE
function searchAll( $query ) {
 if ( $query->is_search ) { $query->set( 'post_type', array( 'site', 'plugin', 'theme', 'person' )); } 
 return $query;
}
add_filter( 'the_search_query', 'searchAll' );

Adaugă tipurile personalizate de postări în feed-ul RSS principal al site-ului implicit.

// ADAUGĂ CUSTOM POST TYPES ÎN FEED-UL RSS IMPLICIT
function custom_feed_request( $vars ) {
 if (isset($vars['feed']) && !isset($vars['post_type']))
  $vars['post_type'] = array( 'post', 'site', 'plugin', 'theme', 'person' );
 return $vars;
}
add_filter( 'request', 'custom_feed_request' );

Includere tipuri personalizate de postări în widget-ul "Right Now" din panoul de administrare

Aceasta va include tipurile tale personalizate de postări și numărul de postări pentru fiecare tip în widget-ul "Right Now" din panoul de control.

// ADAUGĂ CUSTOM POST TYPES ÎN WIDGET-UL 'RIGHT NOW' DIN DASHBOARD
function wph_right_now_content_table_end() {
 $args = array(
  'public' => true ,
  '_builtin' => false
 );
 $output = 'object';
 $operator = 'and';
 $post_types = get_post_types( $args , $output , $operator );
 foreach( $post_types as $post_type ) {
  $num_posts = wp_count_posts( $post_type->name );
  $num = number_format_i18n( $num_posts->publish );
  $text = _n( $post_type->labels->singular_name, $post_type->labels->name , intval( $num_posts->publish ) );
  if ( current_user_can( 'edit_posts' ) ) {
   $num = "<a href='edit.php?post_type=$post_type->name'>$num</a>";
   $text = "<a href='edit.php?post_type=$post_type->name'>$text</a>";
  }
  echo '<tr><td class="first num b b-' . $post_type->name . '">' . $num . '</td>';
  echo '<td class="text t ' . $post_type->name . '">' . $text . '</td></tr>';
 }
 $taxonomies = get_taxonomies( $args , $output , $operator ); 
 foreach( $taxonomies as $taxonomy ) {
  $num_terms  = wp_count_terms( $taxonomy->name );
  $num = number_format_i18n( $num_terms );
  $text = _n( $taxonomy->labels->singular_name, $taxonomy->labels->name , intval( $num_terms ));
  if ( current_user_can( 'manage_categories' ) ) {
   $num = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$num</a>";
   $text = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$text</a>";
  }
  echo '<tr><td class="first b b-' . $taxonomy->name . '">' . $num . '</td>';
  echo '<td class="t ' . $taxonomy->name . '">' . $text . '</td></tr>';
 }
}
add_action( 'right_now_content_table_end' , 'wph_right_now_content_table_end' );
9 nov. 2010 05:27:05
Comentarii

Referitor la ultimul fragment din acest răspuns. Aceasta este o adăugare excelentă, deoarece eu adăugam acestea manual pentru fiecare tip de post. Singura problemă pe care o am cu acest lucru este că adaugă datele după intrările implicite pentru "categorie" și "etichetă". Ai putea actualiza răspunsul tău pentru a muta intrările implicite "categorie" sau "etichetă" mai jos sau pentru a le elimina, astfel încât să poată fi adăugate manual?

NetConstructor.com NetConstructor.com
22 feb. 2011 22:06:34

@NetConstructor.com Nu cred că înțeleg cererea ta. Dacă o înțeleg, atunci cred că ar fi ceva mai dificil de realizat și chiar acum nu am timp să descopăr cum să fac asta.

jaredwilli jaredwilli
23 feb. 2011 03:01:27

Include tipuri de posturi personalizate în rezultatele căutării - Cred că acum poți face asta cu parametrul exclude_from_search al funcției register_post_type...

Krzysiek Dróżdż Krzysiek Dróżdż
16 dec. 2013 18:13:55
12
77

Elimină notificarea de actualizare pentru toți utilizatorii, cu excepția ADMIN-ului

Testat pe: WordPress 3.0.1

Acest cod asigură că niciun alt utilizator în afară de "admin" nu va primi notificări de la WordPress când sunt disponibile actualizări.

// ELIMINĂ NOTIFICAREA DE ACTUALIZARE WORDPRESS PENTRU TOȚI UTILIZATORII, CU EXCEPȚIA SYSADMIN
   global $user_login;
   get_currentuserinfo();
   if ($user_login !== "admin") { // Schimbă admin cu numele de utilizator care trebuie să primească actualizările
    add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
    add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
   }

Versiune modificată pentru a afișa notificări de actualizare doar pentru utilizatorii cu rol de administrator (în loc doar pentru utilizatorul 'admin'):

// ELIMINĂ NOTIFICAREA DE ACTUALIZARE WORDPRESS PENTRU TOȚI UTILIZATORII, CU EXCEPȚIA SYSADMIN
       global $user_login;
       get_currentuserinfo();
       if (!current_user_can('update_plugins')) { // Verifică dacă utilizatorul curent are permisiunea de a actualiza plugin-uri
        add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
        add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
       }
9 sept. 2010 17:19:40
Comentarii

Aceasta este departe de a fi ideal. Va funcționa doar dacă numele de utilizator al administratorului este încă implicit 'admin', ceea ce din motive de securitate nu ar trebui să fie. În schimb, ar trebui să verificați o anumită capabilitate pe care doriți ca utilizatorii să o aibă pentru a vedea mesajele.

jerclarke jerclarke
11 sept. 2010 23:28:32

Adică if (!current_user_can('manage_options')) {...add_filter...} -- Îmi cer scuze pentru comentariul dublu, am uitat că apăsarea Enter trimite comentariile)

jerclarke jerclarke
11 sept. 2010 23:29:31

De aceea am adăugat comentariul în cod unde poți schimba numele de utilizator al administratorului. Cum ai îmbunătăți/rescrie codul?

NetConstructor.com NetConstructor.com
12 sept. 2010 12:07:31

Cea mai bună metodă este să eliminați global $user_login și get_currentuserinfo() și în schimb să folosiți current_user_can în condiția if. Este doar o linie în loc de trei și este metoda standard. Puteți verifica capacitatea specifică necesară pentru a ACȚIONA asupra mesajelor, în acest caz avem 'update_core' și 'update_plugins'.

jerclarke jerclarke
12 sept. 2010 17:00:38

deci: if (!current_user_can('update_plugins')) {/ELIMINĂ MESAJELE/}

jerclarke jerclarke
12 sept. 2010 17:01:51

deci codul complet ar arăta cum exact?

NetConstructor.com NetConstructor.com
14 sept. 2010 02:24:38

@Jeremy Clarke deci acest cod ar fi atunci modul corect de a face lucrurile? Dar, dacă ai vrut doar să permiți unui nume de utilizator specific să primească notificările, codul de mai sus ar fi cea mai bună metodă?

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

NetConstructor.com NetConstructor.com
17 sept. 2010 09:41:47

Dacă ai vrut să verifici un nume de utilizator specific, presupun că codul din răspunsul tău original este acceptabil, deși ar putea exista o metodă puțin mai eficientă. Codul complet folosind soluția mea ar arăta ca ceea ce ai în ultimul tău comentariu. Este același lucru ca răspunsul tău, dar cu verificarea current_user_can() în loc de $user_login !== 'admin'.

jerclarke jerclarke
22 sept. 2010 21:48:42

Am editat răspunsul și am adăugat versiunea care folosește current_user_can('update_plugins')

Travis Northcutt Travis Northcutt
27 sept. 2010 07:03:32

Această logică trebuie inclusă în nucleu

Atif Atif
27 dec. 2010 06:45:28

Tocmai am încercat codurile. Dar primesc o pagină de eroare când folosesc codurile. Aceeași problemă cu ambele coduri

user391 user391
29 iun. 2011 13:50:42

Cred că acest fragment de cod și-a pierdut relevanța de-a lungul anilor. În WordPress-ul actual, doar administratorul vede notificările de actualizare.

netblognet netblognet
28 aug. 2014 11:21:54
Arată celelalte 7 comentarii
8
73

Încărcarea jQuery de pe Google CDN

Testat pe: WordPress 3.0.1

// O includere și mai inteligentă a jQuery :)
add_action( 'init', 'jquery_register' );

// Înregistrare de la Google și pentru footer
function jquery_register() {

    if ( !is_admin() ) {

        wp_deregister_script( 'jquery' );
        wp_register_script( 'jquery', ( 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js' ), false, null, true );
        wp_enqueue_script( 'jquery' );
    }
}

Eliminarea informațiilor despre versiunea WordPress pentru securitate

Testat pe: WordPress 3.0.1

// Elimină informațiile despre versiune din head și feed-uri
function complete_version_removal() {
    return '';
}
add_filter('the_generator', 'complete_version_removal');

Adăugarea linkurilor Spam & Ștergere pentru comentarii pe front-end

Testat pe: WordPress 3.0.1

Acest lucru face mult mai ușoară gestionarea comentariilor din front-end prin adăugarea linkurilor de spam și ștergere.**

// Linkuri spam și ștergere pentru toate versiunile de WordPress
function delete_comment_link($id) {
    if (current_user_can('edit_post')) {
        echo '| <a href="'.get_bloginfo('wpurl').'/wp-admin/comment.php?action=cdc&c='.$id.'">șterge</a> ';
        echo '| <a href="'.get_bloginfo('wpurl').'/wp-admin/comment.php?action=cdc&dt=spam&c='.$id.'">spam</a>';
    }
}

Întârzierea publicării în fluxul RSS

Testat pe: WordPress 3.0.1

În final, îmi place să întârzii publicarea în fluxurile mele RSS cu 10-15 minute pentru că întotdeauna găsesc cel puțin câteva erori în textul meu. Alte utilizări sunt în cazul în care doriți ca conținutul să fie exclusiv pe site-ul dumneavoastră pentru o zi sau o săptămână înainte de a-l distribui cititorilor prin RSS.

// Întârziere actualizare flux
function publish_later_on_feed($where) {
    global $wpdb;

    if (is_feed()) {
        // Timestamp în format WordPress
        $now = gmdate('Y-m-d H:i:s');

        // Valoare pentru așteptare; + unitate
        $wait = '10'; // întreg

        // http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
        $device = 'MINUTE'; // MINUTE, ORA, ZI, SĂPTĂMÂNĂ, LUNA, AN

        // Adăugare sintaxă SQL la $where implicit
        $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
    }
    return $where;
}
add_filter('posts_where', 'publish_later_on_feed');
16 sept. 2010 19:06:46
Comentarii

sursa pe postarea mea: http://wpengineer.com/320/publish-the-feed-later/ cu mai multe informații

bueltge bueltge
17 sept. 2010 11:29:42

De asemenea, poți pur și simplu să elimini filtrul generator: remove_action('wp_head', 'wp_generator');

Gipetto Gipetto
18 sept. 2010 10:01:39

De ce nu folosim CDN-ul Google și pentru admin? Nu am înțeles

Ünsal Korkmaz Ünsal Korkmaz
5 nov. 2010 20:30:06

@Derek Perkins - Poți face fiecare dintre aceste fragmente de cod un răspuns separat, astfel încât să poată fi votate individual?

MikeSchinkel MikeSchinkel
6 nov. 2010 11:52:20

http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js expiră după doar o oră. Întotdeauna folosește versiunea completă, precum http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js – aceasta expiră după un an.

fuxia fuxia
10 nov. 2010 16:41:52

Poți, te rog, să separi fiecare dintre aceste intrări wiki în articole separate în următoarele săptămâni? Voiam să o fac eu, dar nu am vrut să par că încerc să îmi atribui puncte pentru informațiile pe care le-ai împărtășit.

NetConstructor.com NetConstructor.com
26 ian. 2011 16:23:17

Codul "Elimină informațiile despre versiunea WordPress pentru securitate" nu face de fapt nimic pentru a crește securitatea site-ului tău. Nici măcar nu oprește expunerea versiunii de WP utilizată pe site.

Joseph Scott Joseph Scott
11 feb. 2011 08:38:13

Nu este adevărat Joseph, dacă versiunea ta de WordPress este expusă, oamenii pot vedea dacă rulezi o versiune mai veche, expunându-ți astfel vulnerabilitățile. Este întotdeauna o decizie bună să elimini acest lucru din toate instalările WordPress. Personal, nici nu înțeleg de ce au pus-o acolo în primul rând, deoarece ESTE o problemă de securitate.

Jeremy Jeremy
12 mai 2014 18:51:08
Arată celelalte 3 comentarii
4
60

Setează un număr maxim de revizii pentru articole pentru a evita umflarea bazei de date.

Testat pe: WordPress 3.0.1

Implicit, numărul este nelimitat, iar acest cod va seta memorarea doar a ultimelor cinci modificări:

/**
 * Setează reviziile articolelor, cu excepția cazului în care constanta a fost deja setată în wp-config.php
 */
if (!defined('WP_POST_REVISIONS')) define('WP_POST_REVISIONS', 5);

Pentru informații suplimentare, există o mulțime de idei bune pentru CONSTANTE care pot fi setate pe pagina Codex Editarea wp-config.php.

11 sept. 2010 23:35:56
Comentarii

Poate fi setat pe baza fiecărui tip de postare?

NetConstructor.com NetConstructor.com
12 sept. 2010 12:17:31

Analizând utilizarea sa în wp_save_post_revision(), nu pare să existe o modalitate de a face distincția în funcție de tipurile de postări. Nu există niciun filtru sau altceva pe valoare, deși probabil ar trebui să existe.

jerclarke jerclarke
12 sept. 2010 17:24:43

mulțumesc Jeremy - Pentru oricine altcineva, dacă știți cum să faceți acest lucru, vă rog să postați aici.

NetConstructor.com NetConstructor.com
14 sept. 2010 10:18:10

personal, prefer 10. Știu că e dublu, dar de fiecare dată când am nevoie de o revizuire, întotdeauna e mai veche de 5

janw janw
4 sept. 2012 15:04:12
2
59

Instrumente de profilare WordPress

Îmi place să adaug instrumente de profilare într-un fișier separat, pe care apoi îl includ din functions.php când este nevoie:

<?php
    if ( !defined('SAVEQUERIES') && isset($_GET['debug']) && $_GET['debug'] == 'sql' )
        define('SAVEQUERIES', true);

    if ( !function_exists('dump') ) :
        /**
         * dump()
         *
         * @param mixed $in
         * @return mixed $in
         */

        function dump($in = null) {
            echo '<pre style="margin-left: 0px; margin-right: 0px; padding: 10px; border: solid 1px black; background-color: ghostwhite; color: black; text-align: left;">';
            foreach ( func_get_args() as $var ) {
                echo "\n";
                if ( is_string($var) ) {
                    echo "$var\n";
                } else {
                    var_dump($var);
                }
            }
            echo '</pre>' . "\n";
            return $in;
        } # dump()
    endif;

    /**
     * add_stop()
     *
     * @param mixed $in
     * @param string $where
     * @return mixed $in
     */

    function add_stop($in = null, $where = null) {
        global $sem_stops;
        global $wp_object_cache;
        $queries = get_num_queries();
        $milliseconds = timer_stop() * 1000;
        $out =  "$queries interogări - {$milliseconds}ms";
        if ( function_exists('memory_get_usage') ) {
            $memory = number_format(memory_get_usage() / ( 1024 * 1024 ), 1);
            $out .= " - {$memory}MB";
        }
        $out .= " - $wp_object_cache->cache_hits accesări cache / " . ( $wp_object_cache->cache_hits + $wp_object_cache->cache_misses );
        if ( $where ) {
            $sem_stops[$where] = $out;
        } else {
            dump($out);
        }
        return $in;
    } # add_stop()


    /**
     * dump_stops()
     *
     * @param mixed $in
     * @return mixed $in
     */

    function dump_stops($in = null) {

        if ( $_POST )
            return $in;

        global $sem_stops;
        global $wp_object_cache;
        $stops = '';

        foreach ( $sem_stops as $where => $stop )
            $stops .= "$where: $stop\n";

        dump("\n" . trim($stops) . "\n");

        if ( defined('SAVEQUERIES') && $_GET['debug'] == 'sql' ) {
            global $wpdb;
            foreach ( $wpdb->queries as $key => $data ) {
                $query = rtrim($data[0]);
                $duration = number_format($data[1] * 1000, 1) . 'ms';
                $loc = trim($data[2]);
                $loc = preg_replace("/(require|include)(_once)?,\s*/ix", '', $loc);
                $loc = "\n" . preg_replace("/,\s*/", ",\n", $loc) . "\n";
                dump($query, $duration, $loc);
            }
        }

        if ( $_GET['debug'] == 'cache' )
            dump($wp_object_cache->cache);

        if ( $_GET['debug'] == 'cron' ) {
            $crons = get_option('cron');

            foreach ( $crons as $time => $_crons ) {

                if ( !is_array($_crons) )
                    continue;

                foreach ( $_crons as $event => $_cron ) {
                    foreach ( $_cron as $details ) {
                        $date = date('Y-m-d H:m:i', $time);
                        $schedule = isset($details['schedule']) ? "({$details['schedule']})" : '';
                        if ( $details['args'] )
                            dump("$date: $event $schedule", $details['args']);
                        else
                            dump("$date: $event $schedule");
                    }
                }
            }
        }
        return $in;
    } # dump_stops()
    add_action('init', create_function('$in', '
        return add_stop($in, "Încărcare");
        '), 10000000);
    add_action('template_redirect', create_function('$in', '
        return add_stop($in, "Interogare");
        '), -10000000);
    add_action('wp_footer', create_function('$in', '
        return add_stop($in, "Afișare");
        '), 10000000);
    add_action('admin_footer', create_function('$in', '
        return add_stop($in, "Afișare");
        '), 10000000);

    /**
     * init_dump()
     *
     * @return void
     */

    function init_dump() {
        global $hook_suffix;
        if ( !is_admin() || empty($hook_suffix) ) {
            add_action('wp_footer', 'dump_stops', 10000000);
            add_action('admin_footer', 'dump_stops', 10000000);
        } else {
            add_action('wp_footer', 'dump_stops', 10000000);
            add_action("admin_footer-$hook_suffix", 'dump_stops', 10000000);
        }
    } # init_dump()
    add_action('wp_print_scripts', 'init_dump');


    /**
     * dump_phpinfo()
     *
     * @return void
     */

    function dump_phpinfo() {
        if ( isset($_GET['debug']) && $_GET['debug'] == 'phpinfo' ) {
            phpinfo();
            die;
        }
    } # dump_phpinfo()
    add_action('init', 'dump_phpinfo');


    /**
     * dump_http()
     *
     * @param array $args
     * @param string $url
     * @return array $args
     */

    function dump_http($args, $url) {
        dump(preg_replace("|/[0-9a-f]{32}/?$|", '', $url));
        return $args;
    } # dump_http()


    /**
     * dump_trace()
     *
     * @return void
     */

    function dump_trace() {
        $backtrace = debug_backtrace();
        foreach ( $backtrace as $trace )
            dump(
                'Fișier/Line: ' . $trace['file'] . ', ' . $trace['line'],
                'Funcție / Clasă: ' . $trace['function'] . ', ' . $trace['class']
                );
    } # dump_trace()
    if ( $_GET['debug'] == 'http' )
        add_filter('http_request_args', 'dump_http', 0, 2);
?>
28 nov. 2010 13:59:08
Comentarii

există o modalitate rapidă de a modifica acest lucru astfel încât scriptul să fie apelat doar când ești administrator și să adaugi ceva la URL pentru a afișa informațiile de depanare?

NetConstructor.com NetConstructor.com
22 feb. 2011 21:58:01

Așa se face în tema mea: http://www.semiologic.com/software/sem-reloaded/ -- fișierul /inc/debug.php este inclus de /functions.php sau /inc/init.php (nu-mi amintesc exact acum).

Denis de Bernardy Denis de Bernardy
23 feb. 2011 11:50:15
4
56

Mărește Claritatea Imaginilor Redimensionate (doar JPEG)

Această funcție mărește claritatea imaginilor JPEG redimensionate. Iată un exemplu al diferenței:

Comparație claritate imagine redimensionată

function ajx_sharpen_resized_files( $resized_file ) {

    $image = wp_load_image( $resized_file );
    if ( !is_resource( $image ) )
        return new WP_Error( 'error_loading_image', $image, $file );

    $size = @getimagesize( $resized_file );
    if ( !$size )
        return new WP_Error('invalid_image', __('Nu s-a putut citi dimensiunea imaginii'), $file);
    list($orig_w, $orig_h, $orig_type) = $size;

    switch ( $orig_type ) {

        case IMAGETYPE_JPEG:
            $matrix = array(
                array(-1, -1, -1),
                array(-1, 16, -1),
                array(-1, -1, -1),
            );

            $divisor = array_sum(array_map('array_sum', $matrix));
            $offset = 0;
            imageconvolution($image, $matrix, $divisor, $offset);
            imagejpeg($image, $resized_file,apply_filters( 'jpeg_quality', 90, 'edit_image' ));
            break;

        case IMAGETYPE_PNG:
            return $resized_file;

        case IMAGETYPE_GIF:
            return $resized_file;
    }

    return $resized_file;
}

add_filter('image_make_intermediate_size', 'ajx_sharpen_resized_files', 900);
4 dec. 2011 23:33:43
Comentarii

mult mai bune jpeg-urile, mersi mult! testat în 3.4-alpha

brasofilo brasofilo
2 apr. 2012 15:07:18

dacă vreți asta ca plugin: http://wordpress.org/extend/plugins/sharpen-resized-images/

Ünsal Korkmaz Ünsal Korkmaz
3 apr. 2012 12:38:39

unde se pune această funcție?

StevieD StevieD
18 mar. 2019 04:04:20

@StevieD - după cum sugerează și titlul, acest cod se plasează în fișierul functions.php, în cadrul template-ului tău. Totuși, aș fi atent, deoarece această funcție are aproape 8 ani.

Timofey Drozhzhin Timofey Drozhzhin
25 iul. 2019 10:54:23
2
51

Eliminarea Casutelor Meta Implicite din WordPress

Testat pe: WordPress 3.0.1

Acest cod vă va permite să eliminați casutele Meta specifice pe care WordPress le adaugă implicit în ecranele implicite de Adăugare/Editare Articol și Adăugare/Editare Pagină.

// ELIMINARE CASUTE META DIN ECRANUL IMPLICIT DE ARTICOLE
function remove_default_post_screen_metaboxes() {
    remove_meta_box( 'postcustom','post','normal' ); // Caseta Meta Câmpuri Personalizate
    remove_meta_box( 'postexcerpt','post','normal' ); // Caseta Meta Rezumat
    remove_meta_box( 'commentstatusdiv','post','normal' ); // Caseta Meta Comentarii
    remove_meta_box( 'trackbacksdiv','post','normal' ); // Caseta Meta Trackbacks
    remove_meta_box( 'slugdiv','post','normal' ); // Caseta Meta Slug
    remove_meta_box( 'authordiv','post','normal' ); // Caseta Meta Autor
}
add_action('admin_menu', 'remove_default_post_screen_metaboxes');


// ELIMINARE CASUTE META DIN ECRANUL IMPLICIT DE PAGINI
function remove_default_page_screen_metaboxes() {
    remove_meta_box( 'postcustom','page','normal' ); // Caseta Meta Câmpuri Personalizate
    remove_meta_box( 'postexcerpt','page','normal' ); // Caseta Meta Rezumat
    remove_meta_box( 'commentstatusdiv','page','normal' ); // Caseta Meta Comentarii
    remove_meta_box( 'trackbacksdiv','page','normal' ); // Caseta Meta Trackbacks
    remove_meta_box( 'slugdiv','page','normal' ); // Caseta Meta Slug
    remove_meta_box( 'authordiv','page','normal' ); // Caseta Meta Autor
}
add_action('admin_menu', 'remove_default_page_screen_metaboxes');
9 sept. 2010 11:45:50
Comentarii

Conform acestui http://wordpress.stackexchange.com/questions/34030/cant-change-permalink-url-after-hitting-ok-and-update/37779#37779 nu aș ascunde slugdiv în acest fel, ci aș folosi mai degrabă acest https://gist.github.com/1863830

User User
19 feb. 2012 15:25:07

@CorvanNoorloos Link-ul tău de GitHub este stricat.

comesuccingfuccslot comesuccingfuccslot
26 feb. 2017 18:54:27
2
48

Filtru pentru eliminarea corectării "Wordpress" în "WordPress"

Testat pe: WordPress 3.0.1

Începând cu versiunea 3.0 a WordPress, a fost adăugat un filtru care convertește automat toate aparițiile cuvântului "Wordpress" (fără P majuscul) în "WordPress" (cu P majuscul) în conținutul articolelor, titlurile postărilor și textul comentariilor. Unii utilizatori consideră acest filtru prea intrusiv, iar eu personal am nevoie uneori să folosesc varianta incorectă "Wordpress" și am găsit acest filtru destul de enervant.

// Elimină filtrul enervant pentru corectarea literei P
if(function_exists('capital_P_dangit')) {
    foreach ( array( 'the_content', 'the_title' ) as $filter )
        remove_filter( $filter, 'capital_P_dangit', 11 );

    remove_filter('comment_text', 'capital_P_dangit', 31 );
}
15 sept. 2010 18:51:15
Comentarii

o mică descoperire excelentă. Unul dintre acele lucruri care elimină pur și simplu o altă bucată de cod care nu este necesară

NetConstructor.com NetConstructor.com
17 sept. 2010 09:50:07

În WordPress 3.0.1, acest filtru este adăugat cu prioritatea 11, deci trebuie să adaugi 11 ca al treilea parametru pentru a-l elimina.

Jan Fabry Jan Fabry
6 nov. 2010 01:01:03
0
47

Personalizează Panoul de Control

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Elimină aceste widget-uri din panoul de control...

   unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
   unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
   unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);

Adaugă un widget personalizat numit 'Ajutor și Suport'

   wp_add_dashboard_widget('custom_help_widget', 'Ajutor și Suport', 'custom_dashboard_help');
}

Acesta este conținutul pentru widget-ul tău personalizat

 function custom_dashboard_help() {
    echo '<p>Lorum ipsum delor sit amet et nunc</p>';
}
21 oct. 2010 17:52:25
0
43

Adăugare Câmpuri Personalizate în Profilul Utilizatorului

Introdu codul de mai jos în fișierul functions.php pentru a adăuga câmpuri personalizate în profilul utilizatorului. Editează sau adaugă linii după cum consideri necesar.

Nu uita să nu elimini linia: return $contactmethods; altfel funcționalitatea nu va fi activă.

// CÂMPURI PERSONALIZATE PENTRU UTILIZATOR
   function my_custom_userfields( $contactmethods ) {

    // ADAUGĂ CÂMPURI DE CONTACT PERSONALIZATE
    $contactmethods['contact_phone_office']     = 'Telefon Birou';
    $contactmethods['contact_phone_mobile']     = 'Telefon Mobil';
    $contactmethods['contact_office_fax']       = 'Fax Birou';

    // ADAUGĂ CÂMPURI DE ADRESĂ PERSONALIZATE
    $contactmethods['address_line_1']       = 'Adresă Linia 1';
    $contactmethods['address_line_2']       = 'Adresă Linia 2 (opțional)';
    $contactmethods['address_city']         = 'Oraș';
    $contactmethods['address_state']        = 'Județ';
    $contactmethods['address_zipcode']      = 'Cod Poștal';
    return $contactmethods;
   }
   add_filter('user_contactmethods','my_custom_userfields',10,1);

Pentru a afișa câmpurile personalizate poți folosi una din cele două metode prezentate mai jos.

Opțiunea 1:

the_author_meta('facebook', $current_author->ID)

Opțiunea 2:

<?php $current_author = get_userdata(get_query_var('author')); ?>
<p><a href="<?php echo esc_url($current_author->contact_phone_office);?>" title="telefon_birou"> Telefon Birou</a></p>
16 nov. 2010 06:51:32
2
41

Personalizează ordinea meniului de administrare

Testat pe: WordPress 3.0.1

Acest cod vă va permite să reordonați elementele din meniul de administrare. Tot ce trebuie să faceți este să dați click pe un link existent în meniul de administrare și să copiați tot ce este înainte de URL-ul /wp-admin/. Ordinea de mai jos reprezintă ordinea pe care o va avea noul meniu de administrare.

// PERSONALIZEAZĂ ORDINEA MENIULUI DE ADMINISTRARE
function custom_menu_order($menu_ord) {
    if (!$menu_ord)
        return true;
    return array(
     'index.php', // Acesta reprezintă link-ul către panoul de control
     'edit.php?post_type=events', // Acesta este un meniu de tip post personalizat
     'edit.php?post_type=news',
     'edit.php?post_type=articles',
     'edit.php?post_type=faqs',
     'edit.php?post_type=mentors',
     'edit.php?post_type=testimonials',
     'edit.php?post_type=services',
     'edit.php?post_type=page', // Acesta este meniul implicit pentru pagini
     'edit.php', // Acesta este meniul implicit pentru POST-uri în administrare
 );
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
9 sept. 2010 11:37:11
Comentarii

Există într-adevăr un filtru de bază numit custom_menu_order? Nu am reușit să-l găsesc...

kaiser kaiser
1 mar. 2011 18:55:35

@kaiser documentat aici http://codex.wordpress.org/Plugin_API/Filter_Reference/custom_menu_order

Manny Fleurmond Manny Fleurmond
18 aug. 2012 20:08:42
3
41

Funcție pentru modificarea lungimii Excerpt

Testat pe: WordPress 3.0.1

În mod implicit, toate fragmentele de text sunt limitate la 55 de cuvinte. Utilizând codul de mai jos, puteți suprascrie această setare implicită:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

Acest exemplu schimbă lungimea fragmentului la 100 de cuvinte, dar puteți folosi aceeași metodă pentru a o modifica la orice valoare.

12 sept. 2010 10:32:19
Comentarii

@user402... această limită se aplică la cuvinte sau la caractere? Ai putea posta cum se face pentru ambele variante?

NetConstructor.com NetConstructor.com
12 sept. 2010 12:14:18

@NetConstructor.com Această funcție (și hook-ul excerpt_length) limitează după cuvinte.

EAMann EAMann
15 sept. 2010 20:53:24

Heh. Am reușit să adaug acest filtru în nucleu. :)

Dougal Campbell Dougal Campbell
8 mar. 2011 21:22:49
1
40

Adăugare Miniaturi în Lista de Articole/Pagini Administrate

Puteți adăuga acest cod în funcțiile dumneavoastră pentru a afișa în lista de administrare/editare a articolelor și paginilor o coloană nouă cu previzualizarea miniaturii.

/****** Adăugare Miniaturi în Lista de Articole/Pagini Administrate ******/
if ( !function_exists('AddThumbColumn') && function_exists('add_theme_support') ) {
 
    // pentru articole și pagini
    add_theme_support('post-thumbnails', array( 'post', 'page' ) );
 
    function AddThumbColumn($cols) {
 
        $cols['thumbnail'] = __('Miniatură');
 
        return $cols;
    }
 
    function AddThumbValue($column_name, $post_id) {
 
            $width = (int) 35;
            $height = (int) 35;
 
            if ( 'thumbnail' == $column_name ) {
                // miniatura din WP 2.9
                $thumbnail_id = get_post_meta( $post_id, '_thumbnail_id', true );
                // imagine din galerie
                $attachments = get_children( array('post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image') );
                if ($thumbnail_id)
                    $thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true );
                elseif ($attachments) {
                    foreach ( $attachments as $attachment_id => $attachment ) {
                        $thumb = wp_get_attachment_image( $attachment_id, array($width, $height), true );
                    }
                }
                    if ( isset($thumb) && $thumb ) {
                        echo $thumb;
                    } else {
                        echo __('Niciuna');
                    }
            }
    }
 
    // pentru articole
    add_filter( 'manage_posts_columns', 'AddThumbColumn' );
    add_action( 'manage_posts_custom_column', 'AddThumbValue', 10, 2 );
 
    // pentru pagini
    add_filter( 'manage_pages_columns', 'AddThumbColumn' );
    add_action( 'manage_pages_custom_column', 'AddThumbValue', 10, 2 );
}
28 dec. 2010 08:39:19
Comentarii

Cum să mut coloana în extrema stângă?

730wavy 730wavy
8 oct. 2013 20:10:45
3
39

Elimină ping-urile către propriul blog

Testat pe: WordPress 3.0.1

// Elimină ping-urile către sine
function no_self_ping( &$links ) {
    $home = get_option( 'home' );
    foreach ( $links as $l => $link )
        if ( 0 === strpos( $link, $home ) )
            unset($links[$l]);
}
add_action( 'pre_ping', 'no_self_ping' );
15 sept. 2010 17:36:31
Comentarii

cât de des și când se auto-pinge WordPress?

NetConstructor.com NetConstructor.com
17 sept. 2010 09:54:03

De fapt, am această problemă destul de des. Dacă fac o referință internă către un alt articol pe blogul meu WP, primesc un trackback sau pingback (nu mai țin minte care) de la mine însumi. Este enervant.

Sahas Katta Sahas Katta
19 dec. 2010 01:12:01

La fel și eu. Am un blog de știri/revistă și linkez destul de des către alte articole.

Steven Steven
13 feb. 2011 15:24:50
0
36

Activează compresia GZIP pentru output

În mod normal serverul ar trebui să fie configurat să facă acest lucru automat, dar multe hosturi partajate nu fac asta (probabil pentru a crește utilizarea lățimii de bandă a clienților).

 if(extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler"))
   add_action('wp', create_function('', '@ob_end_clean();@ini_set("zlib.output_compression", 1);'));
23 dec. 2010 14:13:26
1
32

Afișează Interogări la Bază de Date, Timp Petrecut și Consum de Memorie

Testat pe: WordPress 3.0.1

function performance( $visible = false ) {

    $stat = sprintf( '%d interogări în %.3f secunde, folosind %.2fMB memorie',
            get_num_queries(),
            timer_stop( 0, 3 ),
            memory_get_peak_usage() / 1024 / 1024
        );

    echo $visible ? $stat : "<!-- {$stat} -->" ;
}

Apoi, acest cod de mai jos va insera automat codul de mai sus în subsolul site-ului tău public (asigură-te că tema ta apelează wp_footer):

add_action( 'wp_footer', 'performance', 20 );

Poate fi apelat de mai multe ori.

15 sept. 2010 20:43:57
Comentarii

pentru php < 5.2 folosește memory_get_usage()

onetrickpony onetrickpony
23 ian. 2011 10:23:30
6
31

Extrage automat prima imagine din conținutul articolului

Testat pe: WordPress 3.0.1

Acest cod va extrage automat prima imagine asociată unui articol și îți va permite să o afișezi/folosești prin apelarea funcției getImage.

// EXTRAGE AUTOMAT PRIMA IMAGINE DIN ARTICOL
function getImage($num) {
    global $more;
    $more = 1;
    $link = get_permalink();
    $content = get_the_content();
    $count = substr_count($content, '<img');
    $start = 0;

    for($i=1;$i<=$count;$i++) {
        $imgBeg = strpos($content, '<img', $start);
        $post = substr($content, $imgBeg);
        $imgEnd = strpos($post, '>');
        $postOutput = substr($post, 0, $imgEnd+1);
        $postOutput = preg_replace('/width="([0-9]*)" height="([0-9]*)"/', '',$postOutput);;
        $image[$i] = $postOutput;
        $start=$imgEnd+1;
    }

    if(stristr($image[$num],'<img')) {
        echo '<a href="'.$link.'">'.$image[$num]."</a>";
    }
    $more = 0;
}
10 sept. 2010 09:26:37
Comentarii

Frumos, dar get_the_image face și el o treabă foarte bună cu asta. http://wordpress.org/extend/plugins/get-the-image/

artlung artlung
15 sept. 2010 18:56:56

corect, dar acesta funcționează diferit și rezolvă diverse probleme pe care get_the_image nu le ia în considerare

NetConstructor.com NetConstructor.com
30 sept. 2010 14:19:05

Ce face diferit față de scriptul get_the_image?

matt matt
5 dec. 2010 06:47:10

@matt -- În WordPress există diferite moduri de a adăuga imagini în articole și cred că scriptul get_the_image verifică doar unul dintre acestea. Acest script verifică mai întâi dacă există o imagine reprezentativă și o folosește pe aceea dacă este disponibilă, apoi cred că verifică prima imagine adăugată în conținutul articolului și dacă nu este găsită, caută în galeria media imaginea cu cel mai mare ordin de sortare (cel puțin așa îmi amintesc ordinea).

NetConstructor.com NetConstructor.com
22 feb. 2011 22:01:44

sugerez http://wordpress.org/extend/plugins/auto-post-thumbnail/ Generează automat imaginea reprezentativă (Featured Thumbnail) din prima imagine din articol sau din orice tip de postare personalizată, doar dacă imaginea reprezentativă nu este setată

Ünsal Korkmaz Ünsal Korkmaz
8 mai 2011 15:47:41

nu fac nicio verificare pentru thumbnail - ești sigur?

Sagive Sagive
22 feb. 2012 01:55:05
Arată celelalte 1 comentarii
2
31

Dezregistrează Widget-urile Implicate în WordPress

Testat pe: WordPress 3.0.1

// Dezregistrează toate widget-urile implicite din WordPress
function unregister_default_wp_widgets() {
    unregister_widget('WP_Widget_Pages');
    unregister_widget('WP_Widget_Calendar');
    unregister_widget('WP_Widget_Archives');
    unregister_widget('WP_Widget_Links');
    unregister_widget('WP_Widget_Meta');
    unregister_widget('WP_Widget_Search');
    unregister_widget('WP_Widget_Text');
    unregister_widget('WP_Widget_Categories');
    unregister_widget('WP_Widget_Recent_Posts');
    unregister_widget('WP_Widget_Recent_Comments');
    unregister_widget('WP_Widget_RSS');
    unregister_widget('WP_Widget_Tag_Cloud');
}
add_action('widgets_init', 'unregister_default_wp_widgets', 1);
15 nov. 2010 01:05:16
Comentarii

L-am folosit pe versiunea 3.1.4. Dar widget-urile încă sunt acolo. Are cineva vreo idee?

user391 user391
1 iul. 2011 17:22:37

Încă funcționează pe WP 4.5 :)

Tim Malone Tim Malone
19 apr. 2016 06:26:07
4
28

Afișează fișierul template folosit de un post/pagină în header

add_action('wp_head', 'show_template');
function show_template() {
    global $template;
    print_r($template);
}

Redu ieșirea implicită a DIV-ului dacă tema ta folosește post_class.

Dacă tema ta folosește ceva de genul:

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

Poți avea DIV-uri extrem de lungi în sursă care ar putea arăta astfel sau chiar mai lung:

<div id="post-4" class="post-4 post type-post hentry category-uncategorized category-test category-test-1-billion category-test2 category-test3 category-testing">

Aceasta poate îngrămădi sursa și pare inutil în majoritatea cazurilor, 3-4 niveluri sunt suficiente.

Pentru exemplul de mai sus putem limita ieșirea astfel:

// Limitează ieșirile lungi ale DIV-urilor
function category_id_class($classes) {
    global $post;
    foreach((get_the_category($post->ID)) as $category)
        $classes[] = $category->category_nicename;
        return array_slice($classes, 0,5);
}
add_filter('post_class', 'category_id_class');

Aceasta limitează ieșirea la doar primele 5 valori, deci exemplul de mai sus devine:

<div id="post-4" class="post-4 post type-post hentry category-uncategorized">

Fă ca arhivele de categorii să afișeze toate postările, indiferent de tipul postării: util pentru postări personalizate

function any_ptype_on_cat($request) {
    if ( isset($request['category_name']) )
        $request['post_type'] = 'any';
    return $request;
}
add_filter('request', 'any_ptype_on_cat');

Elimină elemente nedorite din panoul de control

Acest lucru a fost deja postat, dar nu avea lista completă de elemente. În special acele enervante "legături primite!"

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
    global $wp_meta_boxes;

    // Right Now - Comentarii, Postări, Pagini la o privire
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);

    // Comentarii recente
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);

    // Legături primite
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);

    // Pluginuri - Populare, Noi și Actualizate recent
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);

    // Blogul de dezvoltare WordPress
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);

    // Alte știri WordPress
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);

    // Formular rapid de postare
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);

    // Ciorne recente
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
}

Elimină saltul "Citește mai mult"**

În schimb, revino la începutul paginii. Știi cum atunci când apeși "citește mai mult" sare la locul din pagină, ceea ce poate fi enervant, acest cod face ca pagina să se încarce normal, fără sărituri!

function remove_more_jump_link($link) {
    $offset = strpos($link, '#more-');
    if ($offset) {
        $end = strpos($link, '"', $offset);
    }
    if ($end) {
        $link = substr_replace($link, '', $offset, $end-$offset);
    }
    return $link;
}
add_filter('the_content_more_link', 'remove_more_jump_link');

Restricționează elementele din meniul ADMIN pe baza numelui de utilizator, înlocuiește username cu numele real al unui utilizator.

function remove_menus()
{
    global $menu;
    global $current_user;
    get_currentuserinfo();

    if($current_user->user_login == 'username')
    {
        $restricted = array(__('Postări'),
                            __('Media'),
                            __('Legături'),
                            __('Pagini'),
                            __('Comentarii'),
                            __('Aspect'),
                            __('Pluginuri'),
                            __('Utilizatori'),
                            __('Unelte'),
                            __('Setări')
        );
        end ($menu);
        while (prev($menu)) {
            $value = explode(' ',$menu[key($menu)][0]);
            if(in_array($value[0] != NULL ? $value[0] : "" , $restricted)) {
                unset($menu[key($menu)]);
            }
        } // end while
    } // end if
}
add_action('admin_menu', 'remove_menus');

//alternativ, poți folosi if($current_user->user_login != 'admin'), probabil mai util

Stilizează norul de etichete

// Personalizare nor de etichete
add_filter('widget_tag_cloud_args', 'style_tags');
function style_tags($args) {
    $args = array(
         'largest'    => '10',
         'smallest'   => '10',
         'format'     => 'list',
         );
    return $args;
}

O referință completă a opțiunilor este aici (sunt multe!) http://codex.wordpress.org/Function_Reference/wp_tag_cloud

Schimbă intervalul implicit de actualizare pentru Widget-ul RSS

(Implicit este 6 sau 12 ore - nu mai țin minte (1800 = 30 minute).

add_filter( 'wp_feed_cache_transient_lifetime', create_function('$fixrss', 'return 1800;') );
10 nov. 2010 00:18:07
Comentarii

poți, te rog, să separi fiecare dintre acestea în răspunsuri separate în următoarele săptămâni. Voiam să o fac eu, dar nu am vrut să par că îmi atribui meritul pentru răspunsurile tale. În orice caz - încerc să păstrez asta organizat, astfel încât utilizatorii să poată găsi cu ușurință informațiile pe care le caută. Mulțumesc anticipat

NetConstructor.com NetConstructor.com
26 ian. 2011 16:25:16

tocmai foloseam codul "Restrict ADMIN menu items based on username, replace username with an actual user's name" care este grozav, dar poți actualiza codul pentru a arăta și cum se poate face acest lucru pentru un "rol de utilizator" specific. Cred că ar fi foarte util!

NetConstructor.com NetConstructor.com
22 feb. 2011 22:13:04

Îmi pare rău NetConstructor, tocmai am văzut acum comentariul tău. Pentru rolul de utilizator, aș folosi "current_user_can". Nu am timp acum să testez, dar când voi avea, îl voi adăuga.

Wyck Wyck
4 mar. 2011 05:47:47

valoarea implicită pentru wp_feed_cache_transient_lifetime este 43200 (12 ore)

brasofilo brasofilo
3 apr. 2012 01:15:46
1
27

Elimină notificarea de actualizare DOAR pentru plugin-uri INACTIVE

function update_active_plugins($value = '') {
    /*
    Tabloul $value transmis conține lista de plugin-uri cu marcajele de timp
    când ultima dată grupurile au fost verificate pentru potrivirea versiunii
    Nodul $value->response conține un tablou cu elementele care sunt
    depășite. Acest nod response este folosit de meniul 'Plugin-uri'
    de exemplu pentru a indica că există actualizări. De asemenea, în lista
    actuală de plugin-uri pentru a afișa caseta galbenă sub un anumit plugin
    care indică faptul că este necesară o acțiune din partea utilizatorului.
    */
    if ((isset($value->response)) && (count($value->response))) {

        // Obține lista plugin-urilor active curente
        $active_plugins = get_option('active_plugins');    
        if ($active_plugins) {
           
            //  Aici începem să comparăm elementele din $value->response
            //  verificând fiecare în raport cu lista de plugin-uri active.
            foreach($value->response as $plugin_idx => $plugin_item) {

                // Dacă elementul din response nu este un plugin activ, îl eliminăm.
                // Acest lucru va împiedica WordPress să indice că plugin-ul necesită acțiuni de actualizare.
                if (!in_array($plugin_idx, $active_plugins))
                    unset($value->response[$plugin_idx]);
            }
        }
        else {
             // Dacă nu există plugin-uri active, ignorăm cele inactive care sunt depășite.
            foreach($value->response as $plugin_idx => $plugin_item) {
                unset($value->response);
            }          
        }
    }  
    return $value;
}
add_filter('transient_update_plugins', 'update_active_plugins');    // Hook pentru 2.8.+
//add_filter( 'option_update_plugins', 'update_active_plugins');    // Hook pentru 2.7.x
14 nov. 2010 19:11:58
Comentarii

Aceasta nu este neapărat o idee bună - un plugin inactiv este încă prezent în sistemul de fișiere, iar unul nesigur poate fi în continuare utilizat pentru a hack-ui site-ul. Plugin-urile ar trebui întotdeauna să fie actualizate.

Tim Malone Tim Malone
11 apr. 2016 23:45:44
0
25

Elimină informațiile și HTML-ul inutile din tag-ul <head>

// elimină informațiile inutile din header
add_action( 'init', 'remove_header_info' );
function remove_header_info() {
    remove_action( 'wp_head', 'rsd_link' );
    remove_action( 'wp_head', 'wlwmanifest_link' );
    remove_action( 'wp_head', 'wp_generator' );
    remove_action( 'wp_head', 'start_post_rel_link' );
    remove_action( 'wp_head', 'index_rel_link' );
    remove_action( 'wp_head', 'adjacent_posts_rel_link' );         // pentru WordPress < 3.0
    remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' ); // pentru WordPress >= 3.0
}

// elimină CSS-ul adițional injectat de widget-ul 'Comentarii Recente'
add_action( 'widgets_init', 'remove_recent_comments_style' );
function remove_recent_comments_style() {
    global $wp_widget_factory;
    remove_action( 'wp_head', array(
        $wp_widget_factory->widgets['WP_Widget_Recent_Comments'],
        'recent_comments_style'
    ) );
}
9 nov. 2010 11:48:50
1
24

Activarea Depanării și Înregistrării Erorilor pentru Utilizare pe Site-uri Live

Acesta este un fragment de cod pe care l-am scris pentru a utiliza constantele WP_DEBUG care sunt de obicei dezactivate implicit. Am creat o metodă de a nu numai activa WP_DEBUG pentru a-l putea folosi pe un site live fără efecte negative, dar am și utilizat alte constante de depanare pentru a forța afișarea erorilor și pentru a crea un fișier de log al erorilor și Notificărilor în directorul /wp-content.

Introdu acest cod în fișierul wp-config.php (DUPA CE AI SALVAT O COPIE DE SIGURANȚĂ, CA PRECAUȚIE) și apoi poți adăuga parametrii ?debug=1, 2 sau 3 la sfârșitul oricărei URL pe site-ul tău.

?debug=1 = afișează toate erorile/notificările ?debug=2 = forțează afișarea lor ?debug=3 = creează un fișier debug.log cu toate erorile în directorul /wp-content.

/**
* Scris de Jared Williams - http://new2wp.com
* @wp-config.php înlocuiește constanta WP_DEBUG cu acest cod
* Activează depanarea WP pentru utilizare pe un site live
* http://core.trac.wordpress.org/browser/trunk/wp-includes/load.php#L230
* Adaugă parametrul '?debug=#' la sfârșitul oricărei URL pe site
*
* http://exemplu.com/?debug=1, /?debug=2, /?debug=3
*/
if ( isset($_GET['debug']) && $_GET['debug'] == '1' ) {
    // Activează raportarea notificărilor în timpul dezvoltării - E_ALL
    define('WP_DEBUG', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '2' ) {
    // Trebuie să fie true pentru ca WP_DEBUG_DISPLAY să funcționeze
    define('WP_DEBUG', true);
    // Forțează afișarea erorilor
    define('WP_DEBUG_DISPLAY', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '3' ) {
    // Trebuie să fie true pentru ca WP_DEBUG_LOG să funcționeze
    define('WP_DEBUG', true);
    // Înregistrează erorile în debug.log în directorul wp-content
    define('WP_DEBUG_LOG', true);
}

Intru în mai multe detalii în postarea pe care am scris-o ca oaspete pentru Comluv dacă ești interesat, aici: http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

Încă lucrez la o metodă de a face acest lucru fie protejat prin parolă, sau preferabil, să funcționeze doar dacă (current_user_can('manage_themes') și is_logged_in().

Dar acolo devine mult mai complicat.

13 nov. 2010 12:26:27
Comentarii

Folosim ceva similar pentru a configura detalii de conexiune la bazele de date live, staging și dev.

Tom Tom
7 mar. 2011 19:14:36
0
21

Adăugare Automată a Titlurilor Dinamice pe Paginile Publice

Testat pe: WordPress 3.0.1

Utilizând codul de mai jos, veți crea automat titluri dinamice pentru paginile/articolele afișate public.

/* Titluri Dinamice **/
// Acest cod setează <title> în funcție de pagina vizitată, pentru un format mai bun și pentru SEO
// Trebuie să setați variabila $longd cu un text personalizat la începutul funcției
function dynamictitles() {
    $longd = __('Introduceți descrierea lungă aici.', 'texdomainstring');
        if ( is_single() ) {
          wp_title('');
          echo ' | '.get_bloginfo('name');

    } else if ( is_page() || is_paged() ) {
          bloginfo('name');
          wp_title('|');

    } else if ( is_author() ) {
          bloginfo('name');
          wp_title(' | '.__('Autor', 'texdomainstring'));

    } else if ( is_category() ) {
          bloginfo('name');
          wp_title(' | '.__('Arhivă pentru', 'texdomainstring'));

    } else if ( is_tag() ) {
          echo get_bloginfo('name').' | '.__('Arhivă etichetă pentru', 'texdomainstring');
          wp_title('');

    } else if ( is_archive() ) {
          echo get_bloginfo('name').' | '.__('Arhivă pentru', 'texdomainstring');
          wp_title('');

    } else if ( is_search() ) {
          echo get_bloginfo('name').' | '.__('Rezultate Căutare', 'texdomainstring');
    } else if ( is_404() ) {
          echo get_bloginfo('name').' | '.__('Eroare 404 (Pagina nu a fost găsită)', 'texdomainstring');

    } else if ( is_home() ) {
          echo get_bloginfo('name').' | '.get_bloginfo('description');

    } else {
          echo get_bloginfo('name').' | '.($blog_longd);
    }
}
10 sept. 2010 03:49:55
13
21

Noi Roluri și Capabilități - Rulează o singură dată!

Le țin la îndemână, acesta este modul corect de a le face fără un plugin. Acestea setează un singur câmp (prefix_user_roles) în baza de date de opțiuni și nu ai nevoie de un plugin pentru a le seta. Consultă pagina Codex pentru o listă cu capabilitățile disponibile și descrieri despre ce fac. Trebuie doar să decomentezi unul dintre aceste blocuri, să încarci orice pagină și apoi să le comentezi din nou! Aici creez un rol care are capabilitățile de care am nevoie:

/* Capabilități */

// Pentru a adăuga noul rol, folosind 'international' ca nume scurt și
// 'International Blogger' ca nume afișat în lista de Utilizatori și pagina de editare:
/*
add_role('international', 'International Blogger', array(
    'read' => true, // True permite acea capabilitate, False o elimină în mod specific.
    'edit_posts' => true,
    'delete_posts' => true,
    'edit_published_posts' => true,
    'publish_posts' => true,
    'edit_files' => true,
    'import' => true,
    'upload_files' => true //ultimul din array nu are nevoie de virgulă!
));
*/


// Pentru a elimina un rol complet sau unul dintre cele implicite:
/* 
remove_role('international');
*/

Uneori este util să adaugi/elimini dintr-un rol existent în loc să îl elimini și să îl adaugi din nou. Din nou, trebuie doar să îl decomentezi, să reîncarci o pagină și apoi să îl comentezi din nou. Acest lucru va stoca rolul/capabilitatea corect în tabelul de opțiuni. (Acest lucru îți permite, dezvoltatorului, să le controlezi și elimină overhead-ul plugin-urilor voluminoase care fac același lucru.) Aici modific rolul de autor pentru a-și șterge postările publicate (implicit), dar le permit capabilitatea de a-și edita postările publicate (ceea ce nu este posibil pentru acest rol implicit) -- folosind *add_cap* sau *remove_cap*.

/*
$edit_role = get_role('author');
   $edit_role->add_cap('edit_published_posts');
   $edit_role->remove_cap('delete_published_posts');
*/

Țin un fișier Excel cu grila de pe pagina Codex pentru site-urile care modifică în acest fel, astfel încât să-mi amintesc cum sunt setate lucrurile, deși lăsând codul comentat în fișierul functions.php va funcționa și el. Nu lăsa aceste exemple decomentate, altfel va scrie în baza de date la fiecare încărcare de pagină!

9 nov. 2010 09:39:14
Comentarii

Funcțiile menționate mai sus scriu într-un câmp din baza de date de opțiuni. Comentarea și decomentarea lor este soluția corectă. Există plugin-uri pentru rolurile utilizatorilor, dar dacă folosești funcțiile menționate mai sus, nu poți lăsa aceste funcții să ruleze și NU trebuie să le configurezi mai mult de o dată sau să le setezi în funcție de dacă un anumit utilizator accesează ceva. Dacă dorești asta, configurează acel utilizator cu un rol specific, unic. Consultă codex-ul, tot ce am scris mai sus este 100% corect dacă faci asta fără un plugin.

Pentru aproape fiecare caz, trebuie să setezi rolurile utilizatorilor doar o singură dată.

tomcat23 tomcat23
2 feb. 2011 10:58:14

@tomcat23: Pentru a ilustra, am încapsulat-o într-o funcție care adaugă rolul doar dacă acesta nu există deja. O altă observație: Cred că ar fi mai ușor să plasezi rolul undeva în ierarhia de roluri, preluând capabilitățile dintr-un rol predefinit și apoi adăugând/eliminând capabilitățile din rolul predefinit. Asta ar face mai clar și mai ușor de reținut dacă capabilitățile sale sunt plasate undeva între, de exemplu, administrator și editor. - Sper că nu te supări că am editat răspunsul tău. Dacă da, te rog să-l revii. :)

kaiser kaiser
1 mar. 2011 18:25:59

Susțin răspunsul meu așa cum l-am lăsat. Funcția ta ratează esența și nu oferă același răspuns ca textul meu. De asemenea, consider că este destul de nepoliticos din partea ta să modifici codul și răspunsul meu.

tomcat23 tomcat23
12 mar. 2011 01:50:11

Nu numai atât, dar funcția ta nu face același lucru ca codul meu. Funcția ta lasă doar încă o verificare în loc, get_role('international', care nu este necesară! Am folosit acest cod pentru a muta un client care avea un server care folosea php4 și, prin urmare, nu putea utiliza pluginul role scoper pe care îl utilizaseră, care era doar pentru php5. (Și era singurul plugin care avea nevoie de php5 pentru instalarea lor.) Ca dezvoltator, am văzut că singurul motiv pentru care aveau nevoie de el era să configureze câteva roluri și să schimbe unele capabilități. Și acest cod, răspunsul meu original de aici, este cum să faci asta!

tomcat23 tomcat23
12 mar. 2011 02:04:34

Nu trebuie, și nici nu ar trebui, să înfășori asta într-o funcție. Ai nevoie doar să setezi corect rolurile și capabilitățile. Dacă vrei să te joci cu ele, există câteva pluginuri grozave (deși umflate) pentru asta.

Dacă înțelegi rolurile și capabilitățile în WordPress și nu doar încerci să te joci cu ele, și nu scrii propriul tău plugin, atunci așa se face corect. Te rog să nu editezi codul meu. L-am readus la forma originală. Înfășurarea ta în funcție este în istoric pentru oricine să vadă, deși sunt în dezacord cu ceea ce ai făcut.

tomcat23 tomcat23
12 mar. 2011 02:06:37

Pentru a clarifica în continuare, nu ai nevoie să înfășori asta într-o funcție sau să faci verificări de admin. add_role(), remove_role(), add_cap() și remove_cap(), așa cum arăt în răspunsul meu original, nu trebuie să fie executate mereu -- ele doar setează un câmp în tabelul de opțiuni care nu trebuie scris mereu -- de aceea înfășurarea ta în funcție este greșită. Știu, adaugi o acțiune la after_setup_theme, dar setarea unui rol cu acel hook nu era despre ce vorbeam în răspunsul meu. (Și, în general, rolurile nu trebuie să fie incluse în teme.)

tomcat23 tomcat23
12 mar. 2011 02:17:34

Puh... Cum am scris: "Sper că nu te deranjează că am editat răspunsul tău. Dacă da, te rog să îl revii la versiunea anterioară. :)". Ai revenit la versiunea anterioară, ai explicat motivul și ghici ce: E în regulă. Așa că calmează-te. Dar ca să-ți ofer aceeași cantitate de explicații: Eu mereu încapsulez lucrurile în funcții și le adaug în folderul cu fișierele de test ale temei mele. În felul acesta pot testa ușor diverse lucruri, de exemplu răspunsurile WA și le pot adăuga rapid dacă am nevoie de ceva, așa că încapsularea într-o funcție e ok. Mai mult, e mai ușor să dezactivezi (doar apelul add_action) și să permiți comentarii doc cu /**/ în loc de comentarii multiline cu //. Cam atât despre „de ce” al meu.

kaiser kaiser
12 mar. 2011 17:35:37

@tomcat23 - Reține că suntem o comunitate care se sprijină reciproc, nu una care se provoacă reciproc, decât în mod academic. După cum vezi din răspunsul lui @kaiser, el încerca doar să ajute.

MikeSchinkel MikeSchinkel
12 mar. 2011 23:48:51

@MikeSchinkel Îmi amintesc că au fost două comentarii de la @kaiser pe 1 februarie, motiv pentru care am răspuns atunci așa cum am făcut-o. (Ești moderator, poți verifica dacă a făcut asta? Pentru că nu cred că greșesc în a crede că a avut 2 comentarii despre faptul că modul meu de utilizare nu i s-a părut ok.) Nu am simțit că codul meu sau explicația aveau nevoie de ajutor și i-am spus asta pe 1 februarie. Mă întorc ceva timp mai târziu și constat că el mi-a modificat codul - prima mea expunere la aspectul „wiki” al acestui site - și am fost, în opinia mea, pe bună dreptate iritat că în timp ce textul și comentariile mele discutau un lucru, codul în sine era diferit.

tomcat23 tomcat23
13 mar. 2011 05:50:54

Răspunsul meu este în spiritul întrebării originale. Acesta este codul meu util, acesta este ceea ce funcționează bine pentru mine și nu îl folosesc încadrat într-o funcție. Dacă @kaiser ar fi vrut să răspundă la această întrebare cu codul încadrat într-o funcție și atașat la un hook, el este în continuare liber să o facă.

Din nou, @kaiser, ceea ce ai făcut schimbând codul meu dar nu și textul a fost dăunător pentru alți oameni care ar veni aici, l-ar vedea și ar descoperi că discuția mea despre cod nu avea sens. De aceea consider că a fost nepoliticos din partea ta să faci ceea ce ai făcut și de aceea am răspuns ieri atât de aspru.

tomcat23 tomcat23
13 mar. 2011 05:51:33

@tomcat23 - Apa trecută sub pod în acest moment. Tot ce spun este că nu sunt interesat să atribui vina, ci doar să avem pace pentru toți în continuare. :)

MikeSchinkel MikeSchinkel
13 mar. 2011 08:55:27

@MikeSchinkel Da, ai dreptate.

@kaiser Îmi cer scuze dacă te-am jignit.

tomcat23 tomcat23
13 mar. 2011 10:08:50

@MikeSchinkel: mulțumesc pentru readucerea liniștii. @tomcat23: Nu, nu ai făcut-o. Pot face față acestui tip de critică. Și eu îmi cer scuze.

kaiser kaiser
13 mar. 2011 19:44:19
Arată celelalte 8 comentarii
0
20

Activează shortcode-uri în widget-uri

// shortcode în widget-uri
if ( !is_admin() ){
    add_filter('widget_text', 'do_shortcode', 11);
}
14 nov. 2010 15:59:37
0
20

Wordpress Footer Personalizat în Administrare


// personalizare text footer administrare
function custom_admin_footer() {
        echo 'adaugă aici textul tău personalizat și html pentru footer';
}
add_filter('admin_footer_text', 'custom_admin_footer');

Folosesc acest cod pe site-urile clienților ca o simplă referință pentru a mă contacta pe mine ca developer.

28 dec. 2010 02:45:15
2
19

Funcție pentru Dezactivarea Fluxurilor RSS

Testat pe: WordPress 3.0.1

Puteți dezactiva fluxurile RSS dacă doriți să mențineți site-ul WordPress ca unul static.

Puteți utiliza această funcție:

function fb_disable_feed() {
wp_die( __('Nu există flux disponibil, vă rugăm să vizitați <a href="'. get_bloginfo('url') .'">pagina noastră principală</a>!') );
}

add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);
12 sept. 2010 10:24:32
Comentarii

Sursă: http://bueltge.de/wordpress-feeds-deaktivieren/794/ (Frank Bueltge)

fuxia fuxia
16 sept. 2010 13:06:04

Mulțumesc Toscho! sursa este disponibilă și în engleză http://wpengineer.com/287/disable-wordpress-feed/

bueltge bueltge
17 sept. 2010 11:27:47
2
16

Schimbă mesajul "Howdy" în "Bine ați venit"

Cu această funcție poți personaliza mesajul "Howdy" din partea dreaptă sus a zonei de administrare.
Această funcție folosește JQuery pentru a schimba mesajul "Howdy" în "Bine ați venit".

/****** Personalizează mesajul de administrare "Howdy" în "Bine ați venit" ******/
$nohowdy = "Bine ați venit";

if (is_admin()) {
    add_action('init', 'artdev_nohowdy_h');
    add_action('admin_footer', 'artdev_nohowdy_f');
}
// Încarcă jQuery
function artdev_nohowdy_h() {
    wp_enqueue_script('jquery');
}
// Modifică
function artdev_nohowdy_f() {
global $nohowdy;
echo <<<JS
<script type="text/javascript">
//<![CDATA[
var nohowdy = "$nohowdy";
jQuery('#user_info p')
    .html(
    jQuery('#user_info p')
        .html()
        .replace(/Howdy/,nohowdy)
    );
//]]>
JS;
}

Versiune PHP, folosind filtrul gettext:

add_filter('gettext', 'change_howdy', 10, 3);

function change_howdy($translated, $text, $domain) {

    if (!is_admin() || 'default' != $domain)
        return $translated;

    if (false !== strpos($translated, 'Howdy'))
        return str_replace('Howdy', 'Bine ați venit', $translated);

    return $translated;
}
28 dec. 2010 08:46:48
Comentarii

Nu se poate deja edita pe partea de PHP astfel încât să nu fie deloc afișat?

hakre hakre
14 feb. 2011 21:13:33

Funcționează corect aici în versiunile 3.0+ cu siguranță, dar de ce nu și în versiunile mai vechi? Verifică dacă alt plugin pe care îl folosești este responsabil pentru aceasta. Textul de aici a fost înlocuit cu JQuery, poate un plugin JQuery?

Philip Philip
14 feb. 2011 22:25:52