De ce să folosești funcția function_exists în WordPress?

23 aug. 2013, 07:30:20
Vizualizări: 61.6K
Voturi: 35

Am observat că mulți developeri de teme WordPress folosesc acest lucru în functions.php

if (function_exists('register_nav_menus')) {
    register_nav_menus (array('primary' => 'Navigare în antet'));
}

Eu, personal, folosesc întotdeauna add_action pentru fiecare funcție pe care o utilizez în functions.php

Deci, codul de mai sus ar fi scris astfel:

add_action('init', 'my_register_nav_menus');

function my_register_nav_menus() {
    register_nav_menus (array('primary' => 'Navigare în antet'));
}

Am două întrebări:

  1. De ce se folosește instrucțiunea if în prima metodă?

  2. Care este metoda corectă?

0
Toate răspunsurile la întrebare 5
0
43

Verificarea existenței funcțiilor încorporate în WordPress înainte de a le apela este pentru compatibilitate inversă, care, după părerea mea, nu este necesară.

Deci, dacă vezi if ( function_exists( 'register_nav_menus' ) ), autorul temei suportă versiuni anterioare versiunii 3.0.

Mai vezi uneori if ( function_exists( 'dynamic_sidebar' ) ). De ce? Nu aș putea să-ți spun, deoarece dynamic_sidebar a fost introdus în versiunea 2.2.

Un alt motiv pentru a folosi această verificare este pentru a face tema sau pluginul tău "pluggable". O funcție "pluggable" este una care poate fi suprascrisă într-o temă copil sau într-un alt plugin.

Aceasta se face la definire, nu la apelare, și folosești operatorul ! pentru a te asigura că funcția nu există deja înainte de a o defini.

if ( ! function_exists( 'my_awesome_function' ) ) {
/**
 * Funcția mea minunată este minunată
 *
 * @param array $args
 * @return array
 */
function my_awesome_function( $args ) {
  //conținutul funcției
  return array();
  }
}

Când se face acest lucru, o temă copil sau alt plugin poate suprascrie acea funcție cu propria implementare.

23 aug. 2013 10:31:38
0

Funcția function_exists nu este o altă metodă de a încărca funcția precum add_action, ci este folosită pentru a verifica codul tău și a te asigura că nu există altă funcție cu același nume, astfel încât să nu strici codul. Conform php.net:

Verifică lista de funcții definite, atât cele încorporate (interne) cât și cele definite de utilizator, pentru function_name.

Dacă ai aceeași funcție de două ori în codul tău, aceasta va cauza probleme, de aceea prefixezi funcția ta cu altceva decât wp_.

Citește mai multe: http://php.net/manual/en/function.function-exists.php

23 aug. 2013 07:43:07
0

poți folosi http://php.net/function_exists

if(function_exists('my_function')){
   // funcția my_function este definită
}

SAU dacă dorești să vezi toate funcțiile disponibile, astfel încât să le poți afișa pe toate,

echo "<pre>"; print_r(get_defined_functions());

afișează pe pagină și poți căuta acea funcție; dacă nu este găsită în listă, înseamnă că nu este disponibilă pentru utilizare.

poate fi necesar să activezi extensia pentru o anumită bibliotecă.

8 feb. 2017 11:22:25
0

function_exists ar trebui folosit după numele funcției într-o temă, nu înainte.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Aceasta verifică dacă plugin-ul este activ înainte de a afișa o funcție și/sau markup, altfel s-ar putea să primiți o eroare precum apel la funcție nedefinită.

29 mar. 2018 13:55:30
0

php.net definește acest lucru ca

(PHP 4, PHP 5, PHP 7) function_exists — Returnează TRUE dacă funcția dată a fost definită

Trebuie să fiu de acord cu Michelle în ceea ce privește utilizarea, și anume că ar trebui să folosești această verificare doar pentru ceva similar cu verificarea tipului; deci ai verifica dacă o funcție există (pe acea pagină sau din orice este apelat pe acea pagină/referință de fișier) pentru a ști dacă este sigur să rulezi o altă funcție sau să analizezi un șablon HTML.

După cum a menționat cineva, este folosit în mod obișnuit pentru a verifica dacă fișierul/tema ta (folosind WordPress) poate rula cerința ta necesară. Eu am folosit-o pentru a verifica dacă o temă are o parte specifică de șablon.

if ( function_exists( 'register_sidebar' ) ) { get_sidebar(); }

24 iun. 2019 03:41:41