Modul corect de a include/require fișiere PHP în WordPress

27 oct. 2015, 13:44:35
Vizualizări: 96.1K
Voturi: 14

Sunt un dezvoltator WordPress începător și recent am avut probleme (pe mai multe site-uri) cu include_once și require_once pentru fișierele PHP. Dacă includ (get_theme_directory_uri() . 'subdir/file') fișierul specificat este inclus (sau required, ceea ce duce la erori fatale), dar dacă orice funcție WordPress este apelată în 'file' primesc ceva similar cu:

'Apel către funcție nedefinită add_action() în /calea/completă/către/fișier'.

Soluția aparentă pe care am găsit-o este să fac:

include(dirname(__FILE__) . "/subdir/filename");

Este corect sau am ratat 'modul WordPress' de a include fișierele undeva?

1
Toate răspunsurile la întrebare 3
4
25

Dacă verifici https://codex.wordpress.org/Function_Reference/get_template_directory_uri

Vei vedea că get_template_directory_uri() returnează un URI, nu o cale pe server.

Ar trebui să folosești în schimb funcția get_template_directory(), care returnează calea către tema, fără slash la final:

include get_template_directory() . '/subdir/filename.php';

Pentru un plugin poți folosi funcția plugin_dir_path():

include plugin_dir_path( __FILE__ ) . '/subdir/filename.php';
27 oct. 2015 19:39:26
Comentarii

Vreau să precizez că acest lucru este în principal destinat localizării căilor în plugin-uri arbitrare. În interiorul unui plugin specific, căile relative sunt cunoscute și includerile PHP de bază (fără componente WP) sunt o practică normală.

Rarst Rarst
27 oct. 2015 19:46:51

Cu comentariul lui Rarst, mi-am dat seama că răspunsul meu este pentru plugin-uri, nu pentru teme. Pentru teme, folosește get_template_directory() în loc de get_template_directory_uri(). Simplu!

thomascharbit thomascharbit
27 oct. 2015 19:58:09

poți încerca - /subdir/filename.php?

Jon Jon
15 apr. 2019 11:53:48

@Jon mulțumesc, aceeași observație. Am trimis o editare la răspuns.

kontur kontur
16 feb. 2023 14:44:47
2
19

WordPress 4.7+ introduce funcțiile get_theme_file_path() pentru a include fișiere în tema WordPress.

Includeți astfel:

include get_theme_file_path( '/subdirector/numele-fisierului.php' );

Avantajul utilizării acestei funcții este că în tema copil puteți suprascrie fișierul din tema părinte.

Referință : https://developer.wordpress.org/reference/functions/get_theme_file_path/

14 mai 2019 12:09:51
Comentarii

Exact ceea ce căutam! Acesta ar trebui să fie răspunsul corect acum.

Oneezy Oneezy
23 aug. 2019 16:04:02

Exact, WP a actualizat ajutorul pentru a face asta, acesta este răspunsul bun.

Maxime Culea Maxime Culea
16 sept. 2020 19:24:55
0

În următoarele exemple, presupun că utilizați Composer și că un tema copil (child theme) poate fi activat sau nu.

  1. Folosiți această metodă dacă doriți să includeți un fișier într-o temă și doriți să vă asigurați că este utilizat directorul temei părinte (parent theme) chiar dacă este activată o temă copil:
require get_template_directory() . '/vendor/autoload.php';
  1. Sau utilizați această metodă dacă doriți să includeți un fișier într-o temă și nu contează dacă este utilizat directorul temei părinte sau directorul temei copil, dacă este activată o temă copil:
require get_stylesheet_directory() . '/vendor/autoload.php';
  1. Și, în final, utilizați această metodă dacă doriți să includeți un fișier într-un plugin:
require __DIR__ . '/vendor/autoload.php';

Aveți grijă cu ultima metodă, deoarece constanta magică __DIR__ va avea o valoare diferită în funcție de directorul în care se află fișierul PHP.

Rețineți că nu există niciun beneficiu în utilizarea funcției plugin_dir_path(), deoarece aceasta este doar un wrapper pentru funcția trailingslashit().

Documentația spune:

Partea de „plugin” din denumire este înșelătoare – poate fi utilizată pentru orice fișier și nu va returna directorul unui plugin decât dacă o apelați într-un fișier din directorul de bază al plugin-ului.

Consultați https://developer.wordpress.org/reference/functions/plugin_dir_path/ pentru mai multe detalii.

De asemenea, rețineți că utilizarea include este o practică slabă, deoarece un fișier lipsă va genera doar un avertisment. Utilizați întotdeauna require, deoarece un fișier lipsă va genera o eroare fatală și nu va rămâne neobservat.

23 dec. 2022 22:49:51