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 18
0

Adăugarea automată a imaginilor de antet dintr-o locație de director

În tema implicită care vine cu WordPress veți observa un meniu suplimentar de temă care se activează și vă permite să selectați o imagine de antet pentru a fi utilizată. În codul temei implicite, aceste imagini sunt hardcodate în fișierul functions.php. Codul de mai jos permite WordPress să preia automat imagini noi bazate pe un director specific de imagini de antet pe care îl puteți crea pe server (sau în folderul temei dumneavoastră).

Acesta va include automat orice fișiere .jpg sau .jpeg. Fiecare imagine trebuie să aibă un fișier thumbnail asociat, dar acesta poate fi doar o copie a originalului cu un nume diferit care trebuie să se termine cu "-thumbnail". Numele asociat este folosit ca descriere în setările de aspect pentru antete, iar underscore-urile sunt înlocuite automat cu spații. (de ex. My_Header_Image_A.jpg, My_Header_Image_A-thumbnail.jpg va avea descrierea prezentată automat ca "My Header Image A")

if ($handle = opendir( TEMPLATEPATH . '/images/headers/') ) {
    $headers = array();
    while (false !== ($file = readdir($handle))) {
        $pos = strrpos( $file, '.' );
        if( $pos !== false && $pos > 0 ) {
            $file_name = substr( $file, 0, $pos );
            if( strpos( $file_name, "-thumbnail" ) === false ) {
                $file_ext = substr( $file, $pos+1 );
                $file_ext_low = strtolower( $file_ext );
                if( $file_ext_low == "jpg" || $file_ext_low == "jpeg" ) {
                    $headers[$file_name] = array (
                    'url' => '%s/images/headers/' . $file,
                    'thumbnail_url' => '%s/images/headers/' . $file_name ."-thumbnail." . $file_ext,
                    'description' => __( str_replace( "_", " ", $file_name ), 'twentyten' )
                    );
                }
            }
        }
    }
closedir($handle);
register_default_headers( $headers );
}
17 nov. 2010 13:14:14
2

Afisarea informațiilor pentru utilizatorii autentificați

if ( is_user_logged_in() ) {

}

nu funcționează în fișierul functions.php. Puteți utiliza acest cod:

if ( !function_exists('is_user_logged_in') ) :

 function is_user_logged_in() {
$user = wp_get_current_user();

if ( $user->id == 0 ){
// Această secțiune dacă utilizatorul nu este autentificat
} else {
// Această secțiune dacă utilizatorul este autentificat
}
}
endif;
3 dec. 2010 08:44:36
Comentarii

if( !current_user_can('read') ) ar trebui să prindă vizitatorii (adică utilizatorii nelogati) ..

t31os t31os
7 dec. 2010 12:19:22

Tocmai am testat și is_user_logged_in() pare să funcționeze corect în functions.php?.. Ai vreo informație de fundal despre motivul pentru care nu ar trebui să funcționeze?

Rarst Rarst
26 ian. 2011 15:48:01
1

Logo-uri personalizate pentru pagina de autentificare și Admin

/*-----------------------------------------------------------------------------------*/
/*  Logo-uri personalizate
/*-----------------------------------------------------------------------------------*/
function custom_admin_logo() {
    echo '
        <style type="text/css">
            #header-logo { background-image: url('.get_bloginfo('template_directory').'/path/to/images/admin-logo.png) !important; }
        </style>
    ';
}
add_action('admin_head', 'custom_admin_logo');

function custom_login_logo() {
    echo '<style type="text/css">
        h1 a { background-image:url('.get_bloginfo('template_directory').'/path/to/images/login-logo.png) !important; }
    </style>';
}

add_action('login_head', 'custom_login_logo');
13 iun. 2011 14:05:39
Comentarii

Te rog să arunci o privire la acest gist. Există chiar și opțiuni mai bune decât cele afișate în gist. Ai putea încerca să participi și la ticket-ul trac (link în antetul pluginului gist).

kaiser kaiser
13 iun. 2011 17:01:56
5

Eliminare Administrator (Utilizator #1) din Lista de Utilizatori

function your_pre_user_query($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Verifică dacă utilizatorul curent NU este administratorul principal (ID 1)
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where); // Exclude utilizatorul cu ID 1 din interogare
  }
}
add_action('pre_user_query','your_pre_user_query'); // Adaugă acțiunea pentru filtrul pre_user_query
13 iun. 2011 14:11:33
Comentarii

Din nou: utilizatorul 1 poate fi un non-admin. Vezi Roluri și Capabilități.

fuxia fuxia
13 iun. 2011 14:59:29

Este un exemplu. În plus, în instalările implicite utilizatorul 1 este Admin - primul utilizator creat. De aceea am evidențiat (Utilizatorul #1)

Daniel Sachs Daniel Sachs
13 iun. 2011 15:05:06

Acesta este un exemplu care arată cum să nu verifici capabilitățile administrative. Nu ar trebui să folosești acest cod pe un site real.

fuxia fuxia
13 iun. 2011 15:08:17

Exact. Acest cod nu verifică capacitățile, toscho, ci un anumit utilizator. Acest cod nu are nicio legătură cu capacitățile și nu am menționat capacitățile nicăieri. Nu văd de ce acest lucru nu ar putea fi folosit pe site-uri de producție.

Daniel Sachs Daniel Sachs
13 iun. 2011 15:21:04

@Daniel Sachs Dacă cauți primul administrator adăugat vreodată, te rog verifică mai întâi rolurile tuturor utilizatorilor, apoi sortează-i după ID și ia-l pe primul. După cum a spus @toscho: În prezent este "exemplul cum NU ar trebui să faci asta". Motive: a) administratorul real poate să nu fie cel cu ID-ul cel mai mic b) Dacă altcineva ar lucra la asta, ea/el nu ar căuta această funcționalitate într-o temă.

kaiser kaiser
13 iun. 2011 16:56:45
0

Obține Atributele unei Miniaturi Date

Folosește această funcție în buclă pentru a determina lățimea, înălțimea și URL-ul unei imagini miniaturizate. Foarte utilă pentru atribuirea unei imagini miniaturizate ca element de fundal prin CSS inline.

/**
* OBȚINE ATRIBUTELE MINIATURII
*
* Extrage lățimea, înălțimea și URL-ul unei miniaturi.
*
* @author Philip Downer <philip@manifestbozeman.com>
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version v1.0
*
* @param string $return Acceptă 'path', 'width', sau 'height'.
* @param string $size Dimensiunea miniaturii corespunzătoare funcției {@link add_image_size()} din nucleul WP.
* @return mixed Returnează informația solicitată sau 'false' dacă nu există 'Imagine Reprezentativă' asignată.
*/
function get_thumb_attr($return,$size='thumbnail') {
    global $post;

    if (has_post_thumbnail($post->ID)) {
      $thumb = wp_get_attachment_image_src(get_post_thumbnail_id(), 'intro');
      if ( $return == 'path' ) { return $thumb[0]; }
      if ( $return == 'width' ) { return $thumb[1]; }
      if ( $return == 'height' ) { return $thumb[2]; }
    } else {
        return false;
    }
}//end function
14 sept. 2011 21:03:24
1

Afisează conținutul unui widget în afara contextului unei bare laterale folosind ID-ul său. Codul HTML de învelire (before/after) nu este inclus. Trebuie să cunoști ID-ul specific al widget-ului pe care îl cauți (de exemplu 'text-5').

function widget_contents($id) {
    list($type,$number) = explode('-',$id);
    global $wp_registered_widgets;
    $wp_registered_widgets[$id]['callback'][0]->display_callback(array('widget_id'=>$id),$number);
}

Poți verifica rezultatul funcției wp_get_sidebars_widgets() dacă nu ești sigur de ID-ul exact de care ai nevoie.

Un exemplu mai complet preluat din /wp-includes/widgets.php sub funcția dynamic_sidebar():

function render_widget($id) {
    global $wp_registered_widgets;
    $params = array_merge(
            array( array('widget_id' => $id, 'widget_name' => $wp_registered_widgets[$id]['name']) ),
            (array) $wp_registered_widgets[$id]['params']
    );
    $classname_ = '';
    foreach ( (array) $wp_registered_widgets[$id]['classname'] as $cn ) {
            if ( is_string($cn) )
                    $classname_ .= '_' . $cn;
            elseif ( is_object($cn) )
                    $classname_ .= '_' . get_class($cn);
    }
    $classname_ = ltrim($classname_, '_');
    $params[0]['before_widget'] = sprintf($params[0]['before_widget'], $id, $classname_);

    if ( is_callable($wp_registered_widgets[$id]['callback']) )
            call_user_func_array($wp_registered_widgets[$id]['callback'], $params);
}
17 nov. 2011 19:14:37
Comentarii

Uf. Metoda mult mai simplă ar fi să folosești the_widget() http://codex.wordpress.org/Function_Reference/the_widget

dalethedeveloper dalethedeveloper
8 feb. 2012 17:35:35
0

Emoticoane personalizate (plugin)

/**
 * Emoticoane.
 */
function filter_smilies_src($img_src, $img, $siteurl) {
    return plugins_url('', __FILE__) . '/img/smilies/' . $img;
}
add_filter('smilies_src', 'filter_smilies_src', 1, 10);

Emoticoane personalizate (temă)

/**
 * Emoticoane.
 */
function filter_smilies_src($img_src, $img, $siteurl) {
    return get_bloginfo('stylesheet_directory') . '/images/smilies/' . $img;
}
add_filter('smilies_src', 'filter_smilies_src', 1, 10);
4 dec. 2011 22:45:35
0

Repozitionarea editorului WYSIWYG prin JQUERY

Testat pe: Wordpress 3.0.1

Acest cod vă va permite să eliminați anumite cutii meta pe care WordPress le adaugă implicit pe ecranele de POSTĂRI și PAGINI.

// REPOZITIONAREA EDITORULUI WYSIWYG PRIN JQUERY
   add_action('admin_head','admin_head_hook');
   function admin_head_hook() {
 ?><style type="text/css">
  #postdiv.postarea, #postdivrich.postarea { margin:0; }
  #post-status-info { line-height:1.4em; font-size:13px; }
  .custom-wysiwyg-editor-container { margin:2px 6px 6px 6px; }
  #ed_toolbar { display:none; }
  #postdiv #ed_toolbar, #postdivrich #ed_toolbar { display:block; }
 </style><?php
   }

   add_action('admin_footer','admin_footer_hook');
   function admin_footer_hook() {
 ?><script type="text/javascript">
  jQuery('#postdiv, #postdivrich').prependTo('.custom-wysiwyg-editor-container');
 </script><?php
   }
9 sept. 2010 11:52:16
1

Închidere automată a etichetelor lipsă din editorul WYSIWYG

Testat pe: Wordpress 3.0.1

Acest cod va închide automat orice etichetă lipsă atunci când utilizați editorul WYSIWYG.

// CURĂȚARE AUTOMATĂ A HTML DIN EDITORUL WYSIWYG PRIN ÎNCHIDEREA ETICHETELOR LIPSĂ
   function clean_bad_content($bPrint = false) {
 global $post;
 $szPostContent  = $post->post_content;
 $szRemoveFilter = array("~<p[^>]*>\s?</p>~", "~<a[^>]*>\s?</a>~", "~<font[^>]*>~", "~<\/font>~", "~style\=\"[^\"]*\"~", "~<span[^>]*>\s?</span>~");
 $szPostContent  = preg_replace($szRemoveFilter, '', $szPostContent);
 $szPostContent  = apply_filters('the_content', $szPostContent);
 if ($bPrint == false) return $szPostContent; 
 else echo $szPostContent;
   }
9 sept. 2010 13:51:01
Comentarii

Doar pentru a te anunța că există o opțiune de a face asta în WordPress însuși. Poate fi util dacă cineva trebuie să o impună pentru mai mulți utilizatori, indiferent de setările lor. Dar aș impune salvarea acelei setări în schimb.

Ashfame Ashfame
20 apr. 2011 20:11:18
0

Elimină atributele role="search" pentru get_search_form()

function remove_role_search($role)
{
    $result = array();
    // Caută toate atributele role în șir
    preg_match_all('|role="[^"]*"|U', $role, $result);
    // Elimină fiecare atribut role găsit
    foreach ($result[0] as $role_tag) {
        $role = str_replace($role_tag, '', $role);
    }
    return $role;
}
// Aplică filtrul pe formularul de căutare
add_filter('get_search_form', 'remove_role_search');
28 ian. 2011 19:52:16
1

Adăugarea unui Link de Autentificare în wp_nav_menu

//ADAUGĂ LINK DE AUTENTIFICARE/DEAUTENTIFICARE ÎN MENIU
add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);

function add_login_logout_link($items, $args) { 

        $loginoutlink = wp_loginout('index.php', false); 

        $items .= '<li>'. $loginoutlink .'</li>'; 

    return $items; 
}
23 feb. 2011 17:32:36
Comentarii

Nu utilizați buffering la ieșire. wp_loginout() are un al doilea parametru $echo pentru a vă ușura viața.

fuxia fuxia
23 feb. 2011 21:30:34
0

Schimbarea numelui meniului "Postări" în admin la orice doriți (de exemplu "Articole")

// conectarea filtrelor de traducere
add_filter('gettext','change_post_to_article');
add_filter('ngettext','change_post_to_article');

function change_post_to_article( $translated ) {
$translated = str_ireplace('Post','Articol',$translated );// ireplace este doar pentru PHP5
return $translated;
}

Credite către smashingmagazine.com

12 mai 2011 16:40:29
1

Elimină Elementul de Meniu Linkuri

Multe dintre instalările mele WordPress nu necesită ca utilizatorii să aibă acces la elementul de meniu 'Linkuri'. Această funcție îl elimină din vedere.

add_action( 'admin_menu', 'custom_admin_menu' );
function custom_admin_menu() 
{
    global $menu;
    // var_dump($menu); // folosește aceasta pentru a identifica cheia pentru elementul de meniu pe care dorești să-l elimini
    unset( $menu[15] ); //cheia 15 este pentru linkuri
    if ( !current_user_can('manage_options') ) { unset( $menu[75] ) }; //cheia 75 este pentru unelte ... dar doar pentru non super admini
}
14 sept. 2011 20:06:05
Comentarii

Începând cu WP 3.1, poți folosi și remove_submenu_page http://codex.wordpress.org/Function_Reference/remove_submenu_page

User User
13 feb. 2012 21:33:05
0

Dezactivare mesaj "Actualizează acum" pentru non-administratori

Personal, nu sunt un mare fan al utilizării acestui cod. În schimb, prefer să permit clienților să-și actualizeze singuri instalările WordPress. Acest lucru ajută la menținerea site-ului la zi și mă forțează să scriu cod mai bun.

if ( !current_user_can( 'manage_options' ) ) {
  add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
  add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
}
14 sept. 2011 20:09:03
0

Adaugă automat un câmp personalizat ascuns și o valoare asociată unui articol atunci când acesta este publicat

add_action('publish_page', 'add_custom_field_automatically');
add_action('publish_post', 'add_custom_field_automatically');
function add_custom_field_automatically($post_ID) {
global $wpdb;
if(!wp_is_post_revision($post_ID)) {
    add_post_meta($post_ID, 'field-name', 'valoare personalizată', true);
}
}
4 dec. 2011 14:04:44
1

Folosește bloginfo prin shortcode...

function digwp_bloginfo_shortcode($atts) {
    
    extract(shortcode_atts(array(
            'key' => '',
            ), $atts));
    
    return get_bloginfo($key);
}

add_shortcode('bloginfo', 'digwp_bloginfo_shortcode');

Utilizare:

[bloginfo key='name']
28 dec. 2010 10:36:30
Comentarii

Poți adăuga câteva exemple de situații în care acest lucru ar putea fi util?

Peter Mortensen Peter Mortensen
1 feb. 2020 21:05:40
0

Adăugați o clasă personalizată la link-urile următoare și anterioare

add_filter('next_posts_link_attributes', 'posts_link_attributes');
add_filter('previous_posts_link_attributes', 'posts_link_attributes');
function posts_link_attributes(){
    return 'class="styled-button"';
    }
4 dec. 2011 14:02:24
0

Adăugare tipuri personalizate de postări pe pagina de arhivă

function namespace_add_custom_types( $query ) {
if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
$query->set( 'post_type', array(
 'post', 'your-custom-post-type-here' // Înlocuiește cu slug-ul tipului tău de postare personalizată
            ));
      return $query;
    }
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );
17 dec. 2011 23:19:27