get_template_part vs hook di azione nei temi


15

Mi sembra che entrambi offrano l'opportunità all'utente finale di modificare un tema senza modificare i file dei temi (tramite temi figlio).

La mia domanda è: è un metodo preferito rispetto all'altro.

Ad esempio, prendi un tema su cui sto lavorando ora. Sto cercando di decidere se andare con le parti modello di ganci.

<?php get_template_part('before_sitecontainer' ); ?>
<div id="sitecontainer" class="sitecontainer" <?php //closed in footer ?>>

<?php get_template_part( 'before_topcontainer' ); ?>
<div id="topcontainer ">

    <?php get_template_part( 'before_topedge_navigation' ); ?>
    <?php get_template_part( 'topedge_navigation' ); ?>

    <?php get_template_part( 'before_site_header' ); ?>
    <?php get_template_part( 'site_header' ); ?>

    <?php get_template_part( 'before_second_navigation' ); ?>
    <?php get_template_part( 'second_navigation' ); ?>

    <?php get_template_part( 'after_second_navigation' ); ?>

</div><!-- end topcontainer div -->
<?php get_template_part( 'after_topcontainer' ); ?>

Quanto sopra consente all'utente del tema di sostituire qualsiasi sezione del codice esistente semplicemente creando un file con un nome appropriato nella cartella del tema figlio e aggiungendo un nuovo codice prima / dopo ogni sezione preesistente con lo stesso metodo - il modello prima / dopo i file di parti non esistono affatto nel tema principale e sono lì semplicemente per consentire loro di inserire codice - e questo metodo non richiede che capiscano hook / filtri per raggiungere questo obiettivo.

Ovviamente avrei potuto ottenere lo stesso risultato utilizzando ganci e filtri.

C'è invece un vantaggio nell'utilizzare hook / filtri? Tenendo presente che il pubblico di destinazione che lo utilizzerà non è decisamente esperto di codice. Posso dare loro istruzioni relativamente di base che possono seguire per usare il metodo template, ma quasi sicuramente confonderò il diavolo con loro con i ganci.

O ci sono situazioni in cui una sarebbe migliore dell'altra all'interno dello stesso tema?

Risposte:


8

Preferisco gli hook, poiché sono più flessibili: puoi agganciarli dal functions.phpfile del tuo tema , ma anche dai plug-in. Cerco di inserire la stessa logica nei plugin, in modo che i temi contengano principalmente elementi di layout.

Se si utilizza un hook di azione, è ancora possibile utilizzarlo get_template_part() in quel gestore di hook . Questo ti dà il meglio di entrambi i mondi. Probabilmente potresti persino creare un hook predefinito che chiama get_template_part(), in modo che le persone che non hanno molta esperienza con la codifica possano aggiungere file extra e altri possano rimuovere questo hook se non lo desiderano.

Per quanto riguarda le prestazioni: get_template_part()usa ( inlocate_template() ) file_exists()una, due o quattro volte (a seconda di come la chiami). Sembra file_exists()molto veloce e utilizza la memorizzazione nella cache in PHP e forse anche nel sistema operativo. Quindi questo probabilmente non è un problema.


Ha senso. Parte della mia spinta progettuale è stata quella di eliminare la necessità di plug-in nelle situazioni di utilizzo più comuni, pur preservando la possibilità di utilizzarli per coloro che lo desiderano. Il mio client di destinazione conosce molto poco WordPress o plugin, non è qualificato per distinguere buoni plugin da cattivi (la principale debolezza dei plugin IMO) e non vuole avere a che fare con l'aggiornamento e la gestione di più software. Quindi devo integrare molte funzionalità direttamente nei temi per offrire quello che vogliono: una soluzione semplice da usare, semplice da mantenere, completa.
Ashley G

4

Direi che la differenza principale è la leggibilità. Se vedi diverse parti del modello ben denominate, puoi capire cosa sta succedendo facilmente. Se vedi solo un hook, dovrai cercare nel resto del tema per stabilire cosa è collegato al hook.


1
Sì, ha senso ed è parte di ciò che stavo cercando di ottenere con il codice di esempio.
Ashley G,

4

È (relativamente) facile rimuovere la funzione dal gancio nel tema figlio, ma molto più difficile farlo ignorare il modello genitore indesiderato.

Essenzialmente, lavorare con gli hook è più vicino al lato PHP e lavorare con i template è più vicino al lato HTML. Uso il tema genitore ibrido, che è molto orientato all'amo. È una felicità fino a quando non è necessario sbarazzarsi del modello di alcuni genitori.

Per gli utenti che non sono esperti di tecnologia né è un'opzione molto piacevole. Perché dovrebbero avere comunque a che fare con questi temi interni?

PS nota anche problemi di prestazioni. Le cose con i ganci si verificano nella memoria, le cose con i modelli richiedono molte ricerche su disco. Soprattutto se stai scrivendo qualcosa di simile nel tuo esempio.

PPS non è la preferenza di tutti ... ma invece di scrivere un tema genitore da zero perché non prendere un tema genitore esistente e fornire un tema figlio semplice all'utente?


Ignorare un modello genitore sarebbe facile come creare un file modello vuoto per sostituirlo, avrei pensato. Molto più facile che scherzare con gli hook (e quindi PHP) per l'utente non esperto di tecnologia. Anche se per qualcuno con esperienza i ganci sarebbero molto più facili. Per quanto riguarda il motivo, ci sono sempre quelli che vogliono personalizzare, hai persino ammesso di farlo. Per quanto riguarda il motivo per cui sto creando un tema, questa è la direzione in cui voglio intraprendere la mia attività. Costruire attorno a qualcun altro business non mi sembra una prova molto futura, anche perché la maggior parte dei temi IMO esistenti lascia molto a desiderare. Penso di poter fare di meglio.
Ashley G,

Aspetti positivi sui problemi di prestazioni però. Anche se, poiché wordpress è stato progettato per funzionare con get_template_part, avrei pensato che non sarebbe stato un grande successo in termini di prestazioni. Qualcuno ha dei benchmark su questo?
Ashley G,

Capisco cosa intendi per ignorare una parte del modello. Non è facile come pensavo
Ashley G,

In realtà è facile come posizionare un file modello vuoto nella cartella figlio, a condizione che sia nella radice della cartella. Dove diventa difficile è quando i file modello si trovano nelle sottocartelle della cartella del tema padre / figlio
Ashley G

In realtà, anche le sottocartelle non sono un problema. Ho appena avuto la cartella denominata errata (un segno sicuro che sto lavorando troppo tardi LOL). Per sovrascrivere una parte del modello richiede solo un file con lo stesso nome nello stesso percorso nel bambino come nel genitore
Ashley G
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.