Sovrascrivere get_template_directory() nel tema child?

27 giu 2015, 09:03:26
Visualizzazioni: 41.1K
Voti: 13

È possibile sostituire un get_template_directory() nel file functions.php del mio tema child?

Voglio apportare modifiche al file:

/**
* Carica il file dei tipi di post personalizzati.
*/
require get_template_directory() . '/inc/post-types.php';

Ovviamente preferirei che il mio lavoro non venga sovrascritto quando aggiorno il tema, quindi posso deregistrare il file del tema genitore e poi registrare nuovamente il file del tema child nel file functions del tema child?

4
Commenti

C'è un'azione nel file post-types.php? Se sì, potrebbe essere possibile rimuovere l'azione, o forse c'è un hook in quel file?

czerspalace czerspalace
27 giu 2015 10:12:37

La registrazione dei post type ha un'azione che ti permette di modificarli, forse se spieghi cosa vuoi cambiare in quel file, non avrai bisogno di sostituirlo completamente.

Milo Milo
27 giu 2015 19:21:20

Devo cambiare molte cose. Principalmente i nomi e i supporti dei vari custom post type.

Heather Heather
28 giu 2015 00:03:57

Puoi utilizzare get_template_directory_uri() nel tema figlio.

Pardeep Pardeep
4 ott 2019 13:43:19
Tutte le risposte alla domanda 2
1
30

Risposta tardiva, ma in WordPress 4.7 sono state introdotte due nuove funzioni per affrontare questa questione.

get_theme_file_path() (per i percorsi assoluti dei file) e get_theme_file_uri() (per gli URL) funzionano esattamente come get_template_part() in quanto cercheranno automaticamente prima nel tema figlio il file specificato, per poi ripiegare sul tema genitore.

Nel tuo esempio, potresti riscriverlo utilizzando la versione 4.7 in questo modo:

/**
* Carica il file dei Custom Post Type.
*/
require get_theme_file_path( 'inc/post-types.php' );

Maggiori informazioni qui: https://make.wordpress.org/core/2016/09/09/new-functions-hooks-and-behaviour-for-theme-developers-in-wordpress-4-7/

9 dic 2016 21:32:03
Commenti

Non riesco a capire come questo risolva il problema, quando il creatore del tema ha inserito require( get_template_directory() . '/includes/somefile.php' ); nel functions.php del tema genitore. Come posso sostituire somefile.php, mantenendo intatto il codice del tema genitore? Capisco che il creatore del tema genitore avrebbe potuto usare una funzione migliore, ma non l'ha fatto.

Fanky Fanky
29 ott 2021 17:15:42
1
15

È necessario utilizzare get_stylesheet_directory_uri() invece di get_template_directory() nel tuo tema child.

Dal codex di WordPress:

get_template_directory_uri()

Nel caso venga utilizzato un tema child, verrà restituito l'URI della directory del tema genitore. get_template_directory_uri() dovrebbe essere utilizzato per risorse che non sono destinate a essere incluse/sostituite da un tema child. Usa get_stylesheet_directory_uri() per includere risorse che sono destinate a essere incluse/sostituite dal tema child.

get_stylesheet_directory_uri()

Nel caso venga utilizzato un tema child, questa funzione restituirà l'URI della directory del tema child. Usa get_template_directory_uri() per evitare di essere sovrascritto da un tema child.

27 giu 2015 09:57:31
Commenti

Sì, ma dato che get_template_directory() è nel mio tema genitore, c'è qualcosa che posso fare dal mio tema child per modificarlo?

Heather Heather
27 giu 2015 18:21:00