Dove mettere il mio codice: plugin o functions.php?
-
-
Mi chiedo cosa costituirebberoi fatti aifini di questa domanda.Lapersona A dice cheil CPT vanelplugin,lapersona B dice cheil CPT vaneltema.Comepossiamoprocurarci unfattoper convalidare una delle opinioni?Questopotrebbeesserepericolosamente vicino a "non costruttivo".I wonder what would constitute facts for the purpose of this question. Person A says CPT go in plugin, Person B says CPT go in theme. How can we procure a fact to validate one of opinions? This might be dangerously close to "not constructive".
- 0
- 2012-11-18
- Rarst
-
6 risposta
- voti
-
- 2012-11-19
Inizierei con questa domanda: lafunzionalità è correlata alla presentazione dei contenuti o alla generazione/gestione dei contenuti,o del sito,o dell'identità dell'utente?
Se lafunzionalità non è correlata in modo specifico alla presentazione del contenuto ,èesattamente all'interno delterritorio delplug-in. Questoelenco è lungo:
- Modifica deifiltri WPprincipali (contenuto
wp_head
,come link canonici,generatoree altrimeta HTML,ecc. - Favicon del sito
- Codicibrevipost-contenuto
- Link di condivisione deipost
- Script delpiè dipagina di Google Analytics (e simili)
- Strumenti/controlli SEO
- ecc.
Se lafunzionalità è correlata alla presentazione del contenuto ,allora è un candidato peressereinclusoneltema. A questopunto,tornerei al criterio di cambiotema di @ Raf912 : ti mancherebbe lafunzionalità quando si cambiatema? Se la risposta a questa domanda è no ,lafunzionalità appartiene altema. Alcuniesempi:
- Rimozione/sovrascrittura del core Gallery CSS di WP
- Filtraggio della lunghezza dell'estratto delpost,testo "leggitutto"e così via
- Qualsiasi cosaimplementatatramite
add_theme_support()
(I supponiamo che questo dovrebbeessere ovvio) - CSSpersonalizzato
Normalmente,queste due domandeforniscono una linea di differenziazione abbastanza chiara;tuttavia,esistono delleeccezioni.
Tipi dipostpersonalizzati
Itipi dipostpersonalizzati,adesempio,sono unibrido unpo 'unico digenerazione di contenutie presentazione,datoilmodoin cuifunziona lagerarchia deimodelliper pagine diindice di archivio e pagine dipost singolo . L'aspetto dellagenerazione di contenuti dei CPTnormalmente li collocherebbeesattamentenelterritorio deiplugin;tuttavia,i plug-innonpossono definirepagine dimodelli che si adattanointrinsecamente al design/layout/stile di un determinatotema (specialmente seil CPTmostra qualcosa di diverso dal solito Titolo/Contenuto/Meta,o hatassonomiepersonalizzate adesso associate).
A lungotermine,la soluzione a questa disparità,IMHO,consistenell'avere una convenzione/consenso standardper la definizione di CPTper determinatitipi di contenuti (elenchi diproprietàimmobiliari,eventi di calendario,prodotti die-commerce,libreria di libri/media voci,ecc.). In questomodo,il contenutogenerato dall'utente rimarrebbeportabiletrai temi cheimplementano la definizione di standard/convenzione di un dato CPT,mentregli sviluppatori ditemi mantengono laflessibilità di definireil design/layout/stile di quel CPTnei file delmodello deltema.
Link ai socialmedia
Allo stessomodo,normalmente direi chei collegamenti aiprofili dei socialmedia,che sono diventati quasi onnipresentinei Temi attuali,sono Plugin Territory,perchénon hannonulla a chefare con la presentazione dei contenuti. La soluzionemigliore sarebbe che questiprofilifossero definiti da qualchepartenel core;tuttavia,attualmentenonesistono strumenti standard/di consensoper definire questi collegamenti. Sonomeglio definiti a livello diimpostazione del sito oin base all'utente? Seper utente,qualemeta utente vieneespostonelmodello?ecc.
Quindi,dinuovo,a lungotermine,la soluzione a questa disparità è che siail core a definire dove sono definiti questi collegamenti,oppure che la comunità degli sviluppatori ditemi sviluppiilproprio consenso. Nelfrattempo,non c'èniente dafare senonmantenerli definiti all'interno di ognitema.
I would start with this question: Is the functionality related to presentation of content, or with generation/management of content, or of the site, or of the user identity?
If the functionality is not related specifically to presentation of content, then it is squarely within Plugin Territory. This list is long:
- Modifying core WP filters (
wp_head
content, such as canonical links, generator and other HTML meta, etc - Site Favicon
- Post-content shortcodes
- Post sharing links
- Google Analytics (and similar) footer scripts
- SEO tools/controls
- etc.
If the functionality is related to presentation of content, then it is a candidate for being included in the Theme. At this point, I would revert to @Raf912's Theme-switch criterion: would you miss the functionality when you switch Themes? If the answer to that question is no, then the functionality belongs in the Theme. Some examples:
- Removing/overriding the WP core Gallery CSS
- Filtering post excerpt length, "read more" text, etc.
- Anything implemented via
add_theme_support()
(I suppose this one should be obvious) - Custom CSS
Normally, these two questions will provide a fairly clear line of differentiation; however, there are exceptions.
Custom Post Types
Custom Post Types, for example, are a bit of a unique hybrid of content generation and presentation, given the way the Template Hierarchy works for single-post-type archive index pages and single post pages. The content-generation aspect of CPTs would normally place them squarely in Plugin Territory; however, Plugins cannot define template pages that inherently fit into the design/layout/style for any given Theme (especially if the CPT displays other than the usual Title/Content/Meta, or has custom taxonomies associated with it).
Long-term, the solution to this disparity, IMHO, is to have a standard convention/consensus for the definition of CPTs for given types of content (real estate listings, calendar events, e-commerce products, book/media library entries, etc.). That way, user-generated content would remain portable between Themes that implement the standard/convention definition of a given CPT, while Theme developers retain the flexibility to define the design/layout/style of that CPT in the Theme template files.
Social Media Links
Similarly, I would normally say that social media profile links, ave become all but ubiquitous in current Themes, are Plugin Territory, because they have nothing to do with presentation of content. The best solution would be for these profiles to be defined somewhere in core; however, there is currently no standard/consensus means of defining these links. Are they best-defined at the site-setting level, or on a per-user basis? If per-user, which user's meta gets exposed in the template? etc.
So again, long-term, the solution to this disparity is for either core to define where these links are defined, or else for the Theme developer community to develop its own consensus. In the meantime, there's really nothing for it but to keep them defined within each Theme.
-
`add_theme_support ('automatic-feed-links');`non èpresentational.Ma è [richiesto dalle lineeguida deltema] (http://codex.wordpress.org/Theme_Review#Theme_Features).Perché è un rischionecessarioperdere questafunzionalità dopo un cambio ditema?`add_theme_support( 'automatic-feed-links' );` is not presentational. But it is [required by the theme guidelines](http://codex.wordpress.org/Theme_Review#Theme_Features). Why is it a necessary risk to loose this functionality after a theme switch?
- 0
- 2012-11-19
- fuxia
-
Tutto ciò che èimplementatotramite `add_theme_support ()`puòessereimplementato solotramiteiltema.L'uso di `add_theme_support ('automatic-feed-links')` all'interno deltema *garantisce * un'esperienza coerente datema atema,poichéi collegamenti aifeedgenerati sarannogli stessi.Anything that is implemented via `add_theme_support()` can only be implemented via the Theme. Using `add_theme_support( 'automatic-feed-links' )` within the Theme actually *ensures* a consistent experience from Theme to Theme, since the feed links generated will be the same.
- 1
- 2012-11-19
- Chip Bennett
-
Penso che sia unnome sbagliato:i link aifeednon sono dipresentazione.Seiltema successivonon chiama quellafunzione,l'utenteperderài link delfeed.Epuoi aggiungerloperplugin senza alcunproblema.Eccoperché sono confuso al riguardo.:)I think it is misnamed: Feed links are not presentational. If the next theme doesn’t call that function the user will lose the feed links. And you can add that per plugin without any problem. That’s why I am confused about it. :)
- 4
- 2012-11-19
- fuxia
-
Sai: questo è unbuonpunto.:)You know: that's a good point. :)
- 1
- 2012-11-19
- Chip Bennett
-
- 2012-11-18
Un semplicetestin cuiil codice èposizionato almeglio:
- scriviil codicenelfunctions.php
- cambiatema
-
ti manca lafunzionalità,ilblognonfunziona correttamente o sono rimastiframmenti del vecchiotema (es. shortcode)?
-
sì:inserisciloin unplugin
-
no: lascialoin functions.php
-
Esempi: scrivi uno shortcode.Dopo aver cambiatoiltema,i semplici codicibrevi vengono lasciatinei tuoipost.Quindi saràposizionatomeglioin unplugin.
Scrivi unafunzioneperelencaregli ultimi commenti.Dopo aver cambiatoiltema,ètutto okperchéforse l'altrotema ha unafunzioneequivalente.
Dipende davvero dal codicee da cosafarà.Alcuni codiciinfluenzano solo lo stile oil contenuto deltema,altrimodificherannoi post delblog.
An easy test where the code is best placed:
- write the code into the functions.php
- switch theme
do you miss the functionality, is the blog not proper working or fragments of the old theme (e.g. shortcodes) are left?
yes: put it into a plugin
no: leave it in functions.php
Examples: Write a shortcode. After switching the theme, the plain shortcodes are left in your posts. So it will be better placed in a plugin.
Write a function to list the last comments. After switching the theme, everything is ok because maybe the other theme have an equivalent function.
It really depends on the code and what it will do. Some code only influence the styling or content of the theme, some others will modifiy blog posts.
-
+1 Seil codice è specifico deltema,mettilo `functions.php`.Se deveessere applicato apiù di untema,inserisciloin unplugin.+1 If the code is specific to the theme, put it is `functions.php`. If it needs to apply to more than one theme, put it in a plugin.
- 11
- 2012-11-18
- s_ha_dum
-
- 2012-12-08
Non credo che ci sia una rispostafacile a questa domanda,ma scommetto chepotremmofare un diagramma diflussoper aiutare con la decisione. Ecco uno schema approssimativo ditale diagramma diflusso,chepuòe deveessere ampliato. Commenta con suggerimenti!
- Questo codice deveessere ospitato su un'installazione a sito singolo di WordPress?
- Sì. Iltema del sito cambia solo conimportanti riprogettazionie cambiamenti difunzionalità?
- Sì. Il codicein questione è specificoper questo design attuale ?
- Sì:functions.php
- No:plug-in
- No (cambia spesso oper capriccio) - Plugin
- Sì. Il codicein questione è specificoper questo design attuale ?
- No (Multsisite): stai ospitando l'installazionemultisito O è una soluzionemultisitoin hosting che consentei plug-in?
- Sì: lafunzionalitàin questione è specificaper questo sito opuò/deveessere utilizzata da altri sitinella rete?
- Specificoper questo sito:functions.php
- Condivisotrapiù siti: vuoiforzarlo su ogni sito?
- Sì:plug-in,archiviatonella directorymu-plugins o attivato dalla rete
- No: è una rete di siti non correlati ? (es. clienti diversi)
- Sì: sarebbenegativo opocoprofessionale seil client A vedesse o attivasseilplug-in che hai scrittoperi client B,Ce D? (adesempio,potrebbe danneggiareil sito o causarefunzionalitàindesiderate)
- Sì:functions.php
- No:plug-in
- No:probabilmenteplug-in
- Sì: sarebbenegativo opocoprofessionale seil client A vedesse o attivasseilplug-in che hai scrittoperi client B,Ce D? (adesempio,potrebbe danneggiareil sito o causarefunzionalitàindesiderate)
- No (ospitato da un servizio come VIP chenon consenteplugin): usafunctions.php
- Sì: lafunzionalitàin questione è specificaper questo sito opuò/deveessere utilizzata da altri sitinella rete?
- Sì. Iltema del sito cambia solo conimportanti riprogettazionie cambiamenti difunzionalità?
- Temiprincipali: a volte confunzionalità condivise sarebbemeglio creare untemaprincipalee inserire lafunzionalitànelfilefunctions.php deltemaprincipale.
- Le directory deiplugin digrandiinstallazionimultisitopossono diventare rapidamenteindisciplinate,quindi a volte lefunzionalità condivise utilizzate da unabassapercentuale di siti (ades. & lt; 1%) sarebbemeglio duplicarenei filefunctions.php.
I don't think there's an easy answer to this question, but I bet we could make a flow chart to help with the decision. Here's a rough outline of such a flow chart, which can and should be expanded. Comment with suggestions!
- Is this code to be hosted on a single-site installation of WordPress?
- Yes - Does the site's theme only change with major redesigns and shifts in functionality?
- Yes - Is the code in question specific to this current design?
- Yes: functions.php
- No: Plugin
- No (it changes often or at a whim) - Plugin
- Yes - Is the code in question specific to this current design?
- No (Multsisite) - Are you hosting the multisite installation OR is it a hosted multisite solution that allows plugins?
- Yes: Is the functionality in question specific to this site, or can/should it be used by other sites in the network?
- Specific to this site: functions.php
- Shared amongst multiple sites - Do you want to force it on every site?
- Yes: Plugin, stored in mu-plugins directory or network-activated
- No: Is this a network of unrelated sites? (e.g. different clients)
- Yes: Would it be bad or unprofessional if client A saw or activated the plugin you wrote for clients B, C, and D? (e.g. maybe it would break the site or cause undesirable functionality)
- Yes: functions.php
- No: Plugin
- No: Probably plugin
- Yes: Would it be bad or unprofessional if client A saw or activated the plugin you wrote for clients B, C, and D? (e.g. maybe it would break the site or cause undesirable functionality)
- No (hosted by a service like VIP that doesn't allow plugins): use functions.php
- Yes: Is the functionality in question specific to this site, or can/should it be used by other sites in the network?
- Yes - Does the site's theme only change with major redesigns and shifts in functionality?
- Parent themes -- sometimes with shared functionality it would be better to make a parent theme and put the functionality in the parent theme's functions.php file.
- Plugin directories of large multisite installations can quickly become unruly, so sometimes shared functionality used by a low percentage of sites (e.g. < 1%) would be best to duplicate in functions.php files.
-
- 2014-02-04
Da qui Themes VS Plugins
Aggiungi codicepersonalizzato a untemafiglioin modo che quando aggiorniiltemaprincipale,il codicepersonalizzatonon vadaperso.
Puoi anche creare unplug-in specificoperil sito che contiene anchetuttoiltuo codicepersonalizzato.
Per quanto riguarda la scrittura di codice rispetto aplug-in,puoi utilizzareplug-inpere lefunzioni,tuttaviaper lamaggiorparte di ciò che desideri,la codificamanuale è lamigliorein quanto èpiùfacile damodificaretrannein alcuni casi comemetaboxin cuipotrestiprenderein considerazione l'utilizzo di unplugin ameno chetunon sia uno sviluppatore ditemi.
function modify_contact_methods($profile_fields) { // Add new fields $profile_fields['twitter'] = 'Twitter Username'; $profile_fields['facebook'] = 'Facebook URL'; $profile_fields['gplus'] = 'Google+ URL'; return $profile_fields; } add_filter('user_contactmethods', 'modify_contact_methods');
http://codex.wordpress.org/Plugin_API/Filter_Reference/user_contactmethods
- Aggiungi unnuovotipo dipostpersonalizzato: Codice
- Aggiunginuovi campi a Utenti - Codice sopra
- Aggiunginuovi widget: Codice
- Aggiungipermalinkpersonalizzati - Impostazionipermalink WordPress
From here Themes VS Plugins
Add custom code to a child theme so when you update the parent theme, your custom code is not lost.
You can also create a site specific plugin which contains all your custom code as well.
As far as writing code versus plugins, you can use plugins to and the functions however for most of what you want, hand coding is the best as its easier to modify except in some cases like meta boxes where you may consider using a plugin unless you're a theme developer.
function modify_contact_methods($profile_fields) { // Add new fields $profile_fields['twitter'] = 'Twitter Username'; $profile_fields['facebook'] = 'Facebook URL'; $profile_fields['gplus'] = 'Google+ URL'; return $profile_fields; } add_filter('user_contactmethods', 'modify_contact_methods');
http://codex.wordpress.org/Plugin_API/Filter_Reference/user_contactmethods
- Add new custom post type - Code
- Add new fields to the Users - Code Above
- Add new widgets - Code
- Add custom permalinks - WordPress Permalink Settings
-
- 2015-01-28
So che questo è un cavallomortoe che Chip lo hapraticamente coperto,ma volevo aggiungere alcunipensieri.
Seti guadagni da vivere con laprogrammazione e ti ritrovi a lavorare su siti wordpress con scadenze,scoprirai che sitratta davvero ditempo.
Ilpiù delle volte,soprattuttoper coloro che hanno appenainiziato,èmoltopiù semplicee veloce aggiungere semplicementetutto ciò di cui haibisognoin untemae chiamarlofatto.
Detto questo, se lavori su wordpress subase semiregolare,dovrestiprendere seriamentein considerazione difare quanto segue :
- Crea lo scheletro di unplug-in
Questo dovrebbegestiretutto ciò che di solito devifare con unplug-in,inclusi attivazione,disattivazione,aggiornamento della versione,creazione dipannelli di amministrazionee disinstallazione.
Setroviiltempoperfarlo,troverai:
- Non occorrepiùmoltotempoper aggiungerefunzionalitàtramiteplug-in
- Puoiiniziare a creare unelenco completo diplug-in da riutilizzare su altriprogetti secondonecessità,risparmiandomoltotempo a lungotermine.
- Puoi renderli disponibilipubblicamente se desiderimaggiore visibilità
Orapuoi costruire le cose correttamente e portare atermineprogettifuturipiù rapidamente.
- Crea uno scheletro deltema
Questo dovrebbegestiretutto ciò che è comunementenecessarioin untema:
- Unfoglio di stileprincipale contenentegli stili che usi comunemente (ripristini,ecc.)
- Unfileindex.php corretto,chegestiscatuttoilnecessarioper qualsiasimodello
- Unfilefunctions.php:non lo userai cosìtanto,matornerà comunque utile.
Una voltafatto,crea uno scheletro deltemafiglio che utilizziiltuotemaprincipale.
- Aggiungiilfoglio di stile,facendo riferimento altemaprincipale.
- Aggiungiilfilefunctions.php
Una volta completate queste due cose,la creazione dinuovi sitiper lepersone diventamoltopiù veloce.
Sefai quanto sopra,puoi lavorare su quanto segue:
- Trascorriiltuonuovotempo libero acquisendomaggiorefamiliarità con PHP,WordPress,JavaScript,CSSe/omySQL ...piùne imparipiù velocementefarai le cose.
- Aggiornailplug-in,iltemae gli scheletri deitemi secondarimanmano chetrovi cose che dovrestimigliorare. Nonimporta quanto seibravo,se continui adimpararetroveraimiglioramenti da apportare.
E,sefai tutto quanto sopra ,scoprirai che la risposta di Chipnon sarà soloideale,ma anche ottimale.
I know this is a dead horse and that Chip has pretty much covered it, but wanted to add a few thoughts.
If you make a living programming and find yourself working on wordpress sites under deadlines, you are going to find that it really comes down to time.
More often than not, especially for those just starting out, it is much faster and simpler to just add whatever you need into a theme and call it done.
That being said, if you work on wordpress on a semi regular basis, you should seriously consider doing the following:
- Build out a plugin skeleton
This should handle everything that you will commonly need to do with a plugin, including activation, deactivation, version updating, building admin panels, and uninstalling.
If you make the time to do this, you will find:
- It no longer takes much extra time to add functionality via plugins
- You can start building a solid list of plugins to re-use on other projects as needed, saving yourself a lot of time in the long run.
- You can make them publicly available if you want extra visibility
You can now build things out properly and get future projects done more quickly.
- Build out a theme skeleton
This should handle everything that is commonly needed in a theme:
- A core style sheet containing styles that you use commonly (resets, etc.)
- A proper index.php file, handling everything you need for any template
- A functions.php file - you won't use it nearly as much, but it will still come in handy.
Once you have that done, build out a child theme skeleton that uses your primary theme.
- Add the stylesheet, referencing your parent theme.
- Add the functions.php file
Once you have these two things done, creating new sites for people becomes much faster.
If you do the above, you can then work on the following:
- Spend your new found free time getting more familiar with PHP, WordPress, JavaScript, CSS, and/or mySQL ... the more you learn of these the faster you will get things done.
- Update your plugin, theme, and child theme skeletons as you find things you should improve. No matter how good you are, if you keep learning you will find improvements to be made.
And, if you do all of the above, you will find that Chip's answer will then not only be ideal, it will become optimal.
-
- 2015-10-26
La risposta semplice è questa ..
Il codice dipende da una dellefunzionalitàincorporatein untema specifico?Se sì,inserisci untema.
Vuoi che questo codice siatrasferibiletrai sitie trai temi?Se sì,inserisci unplugin.
Se la risposta èno aentrambe le domandeprecedenti,immaginail sito 5 anninelfuturo,quando èilmomento di una riprogettazione.Lafunzione del codice che stai scrivendo è qualcosa che sopravviverà alprossimo aggiornamento del design?Se sì,inserisci unplugin.
Inoltre,senon utilizzitemi figlioe prevedi di aggiornareiltema,ti suggerisco anche di utilizzare unplug-in.
The simple answer is this..
Is the code dependent on any of the functionality built into a specific theme? If yes, then put in a theme.
Do you want this code to be transferable between sites and between themes? If yes, then put in a plugin.
If the answer is no to both of the above, then picture the site 5 years in the future, when it's time for a redesign. Is the function of the code you're writing something that will survive the next design update? If yes, put in a plugin.
Also, if you're not using child themes and you plan to update the theme, I would also suggest you use a plugin.
Esiste uno schema difacile comprensione per decidere chetipo di codice appartiene a unplugin o al
functions.php
deltema?Ci sono many casi e molti dibattiti su questo argomento,principalmenteperché ci sono alcuneidee sbagliate sulfunzionamentointerno di WordPress. Chiedo una rispostabasata suifatti,non sulle opinioni.
Dovrebbe spiegare comegestire questipunti (eprobabilmente altri):
add_theme_support( 'automatic-feed-links' );
meta
personalizzatiCi sono spesso vantaggie svantaggiperentrambe leparti. Lanostra domandapiùpopolare Migliore raccolta di codiceper letuefunzioni.php ha ricevutomoltiframmenti di codice come risposte almeno discutibili.
Abbiamobisogno di criteri che unprincipiantepossa capire,forse una lista di controllo - con ragioni.
Vedi anche la domanda correlata di Chip Bennett sulnostrometa sito: Domande che richiedono specificamente una soluzione & quot; senzaplugin & quot;
Correlati: Doveinseriscogli snippet di codice che hotrovato qui o da qualche altraparte sul Web?