it-swarm-eu.dev

Kde umístit můj kód: plugin nebo functions.php?

Existuje snadno srozumitelné schéma rozhodnout, jaký typ kódu patří do pluginu nebo functions.php tématu?

Tam jsoumnohopřípadů a mnoho debat o tomto tématu, většinou proto, že existují nějaké mylné představy o vnitřním fungování WordPressu. Žádám o odpověď na základě faktů, nikoli názorů.

Mělo by vysvětlit, jak tyto body řešit (a pravděpodobně i více):

Pro obě strany jsou často klady a zápory. Naše nejoblíbenější otázka Nejlepší kolekce kódu pro váš function.php soubor dostal spoustu útržků kódu jako odpovědi, které jsou přinejmenším diskutabilní.
Potřebujeme kritéria, která začátečník může pochopit, možná kontrolní seznam - s důvody.

Podívejte se také na související otázku Chip Bennett na naší meta stránce: Otázky, které konkrétně žádají o řešení "bez pluginu"

Související: Kde vložím fragmenty kódu, které jsem našel, nebo někde jinde na webu?

86
fuxia

Začal bych s touto otázkou: Je funkčnost spojena s prezentací obsahu, nebo s generací/správou obsahu nebo stránek nebo identity uživatele?

Pokud funkce nesouvisí konkrétně s {prezentace obsahu, pak je přímo v rámci Plugin Territory. Tento seznam je dlouhý:

  • Úprava jádrových WP filtrů (wp_head obsah, jako jsou kanonické odkazy, generátor a další meta HTML, atd.)
  • Místo Favicon
  • Post-content shortcodes
  • Odeslat odkazy na sdílení
  • Skripty skriptů služby Google Analytics (a podobné)
  • SEO nástroje/ovládací prvky
  • atd.

Pokud je funkce příbuzná k prezentace obsahu, pak je to kandidát pro zahrnutí do tématu. V tomto okamžiku bych se vrátil k @ Raf912 tématu Theme-switch kritériu : vynechali byste funkci při přepínání témat? Pokud je odpověď na tuto otázku no , pak funkce patří do tématu. Nějaké příklady:

  • Odebrání/přepsání jádra WP jádra CSS
  • Délka filtru příspěvku, text „číst více“ atd.
  • Cokoliv implementován přes add_theme_support() (předpokládám, že tento by měl být zřejmý)
  • Vlastní CSS

Tyto dvě otázky obvykle poskytují poměrně jasnou linii diferenciace; existují však výjimky.

Vlastní typy příspěvků

Typy vlastních příspěvků, například, jsou trochu jedinečným hybridem generování a prezentace obsahu, vzhledem k tomu, jak funguje hierarchie šablon pro stránky s jedním typem archivovat index a jednotlivé stránky příspěvků . Aspekty generování obsahu CPT by normálně umístily je přímo na Plugin území; Pluginy však nemohou definovat stránky šablon, které neodmyslitelně zapadají do návrhu/rozvržení/stylu pro dané téma (zejména pokud CPT zobrazuje jiné než obvyklé názvy/obsah/meta nebo má k nim přiřazené vlastní taxonomie).

Dlouhodobým řešením tohoto rozdílu, IMHO, je mít standardní úmluvu/konsenzus pro definici CPT pro daný typ obsahu (výpisy nemovitostí, události kalendáře, produkty elektronického obchodu, záznamy v knihovně/médiích atd.). .). Takto vytvořený obsah by zůstal přenosný mezi tématy, která implementují definici standardu/konvence dané CPT, zatímco vývojáři motivů si ponechávají flexibilitu při definování návrhu/rozvržení/stylu dané CPT v souborech šablony motivů.

Odkazy sociálních médií

Podobně bych normálně říkal, že sociální mediální profily, ave se stávají všudypřítomnými v současných tématech, jsou Plugin Territory, protože nemají nic společného s prezentaceobsahu. Nejlepší řešení by bylo, kdyby tyto profily byly definovány někde v jádru; v současné době však neexistuje žádný standardní/konsenzuální způsob definování těchto vazeb. Jsou nejlépe definovány na úrovni nastavení webu nebo na základě jednotlivých uživatelů? Pokud se uživatel, který uživatel meta dostane vystaven v šabloně? atd.

Znovu, dlouhodobě, řešení této disparity je pro jedno jádro definovat kde tyto odkazy jsou definovány, nebo jinak pro komunitu vývojáře tématu vyvinout jeho vlastní konsensus. Mezitím pro to není nic, ale udržet je v každém tématu.

71
Chip Bennett

Snadný test, kde je kód nejlépe umístěn:

  • zapište kód do function.php
  • přepnout téma
  • chybí vám funkce, je blog není správné práce nebo fragmenty starého tématu (např. shortcodes) jsou ponechány?

    • ano: vložte jej do pluginu

    • no: nechte to ve function.php

Příklady: Napište krátký kód. Po přepnutí motivu zůstanou ve vašich příspěvcích prosté zkratky. Tak to bude lepší umístit do pluginu.

Napište funkci pro zobrazení posledních komentářů. Po přepnutí tématu je vše v pořádku, protože jiné téma má ekvivalentní funkci.

To opravdu záleží na kódu a co bude dělat. Některý kód ovlivňuje pouze styl nebo obsah motivu, jiné upravují příspěvky blogu.

49
Ralf912

Nemyslím si, že na tuto otázku je snadná odpověď, ale vsadím se, že bychom mohli udělat vývojový diagram, který nám pomůže s rozhodnutím. Zde je hrubý nástin takového vývojového diagramu, který může a měl by být rozšířen. Komentář s návrhy!

  • Je tento kód hostován na jednom místě instalace WordPress?
    • Ano - Změní se téma webu pouze s významnými změnami a změnami funkčnosti?
      • Ano - Je daný kód specifický pro tento aktuální návrh ?
        • Ano: funkce.php
        • Ne: Plugin
      • Ne (mění se často nebo rozmaru) - Plugin
    • Ne (Multsisite) - Jste hostitelem instalace s více stanicemi OR je to hostované řešení více stanic, které umožňuje pluginy?
      • Ano: Je tato funkce specifická pro tyto stránky , nebo může/měla by být použita jinými weby v síti?
        • Specifické pro tento web: functions.php
        • Sdílené mezi více lokalitami - Chcete ho vynutit na všech stránkách?
          • Ano: Plugin, uložený v adresáři mu-plugins nebo v síti
          • Ne: Je to síť nesouvisející weby? (např. různí klienti)
            • Ano: Bylo by špatné nebo neprofesionální, kdyby klient A viděl nebo aktivoval plugin, který jste napsali pro klienty B, C a D? (např. by to mohlo narušit místo nebo způsobit nežádoucí funkce)
              • Ano: funkce.php
              • Ne: Plugin
            • Ne: Pravděpodobně plugin
      • Ne (hostované službou jako VIP, která nepovoluje pluginy): použijte funkce.php
  • Rodičovská témata - někdy se sdílenou funkcionalitou by bylo lepší vytvořit nadřazený motiv a umístit funkce do souboru parent.php nadřazeného motivu.
  • Adresáře pluginů velkých instalací s více stanicemi se mohou rychle stát neovladatelnými, takže občas sdílené funkce používané nízkým procentem stránek (např. <1%) by bylo nejlepší duplikovat v souborech function.php.
17
Matthew Boynes

Odtud Témata VS Pluginy

Přidat vlastní kód podřízený motiv, takže při aktualizaci nadřazeného motivu vlastní kód není ztracena.

Můžete také vytvořit plugin pro konkrétní web, který obsahuje také všechny vaše vlastní kódy.

Co se týče psaní kódu versus pluginy, můžete použít pluginy a funkce, ale pro většinu toho, co chcete, ruční kódování je nejlepší, protože je jednodušší jej modifikovat, s výjimkou některých případů, jako jsou meta boxy, kde můžete zvážit použití pluginu, pokud se je vývojář motivů.

 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

  1. Přidat nový typ vlastního příspěvku - Kód
  2. Přidejte nová pole do pole Uživatel - kód výše
  3. Přidat nové miniaplikace - Kód
  4. Přidat vlastní permalinks - Nastavení WordPress Permalink
5
Brad Dalton

Vím, že je to mrtvý kůň a ten Chip to do značné míry pokryl, ale chtěl přidat pár myšlenek.

Pokud si žijete programování a ocitnete se pracuje na wordpress stránky v termínech, budete zjistit, že to opravdu přijde na čas.

Více často než ne, a to zejména pro ty, kteří právě začínají, je mnohem rychlejší a jednodušší jednoduše přidat vše, co potřebujete, do tématu a zavolat.

To je řečeno, pokud pracujete na wordpress na polo pravidelném základě, měli byste vážně zvážit následující :


  1. Vytvoření kostry pluginu

To by mělo zvládnout vše, co budete obvykle potřebovat s pluginem, včetně aktivace, deaktivace, aktualizace verzí, sestavování panelů administrátorů a odinstalace.

Pokud to uděláte, najdete:

  • Přidávání funkcí prostřednictvím zásuvných modulů již nezabere mnoho času
  • Můžete začít budovat pevný seznam pluginů pro opakované použití na jiných projektech podle potřeby, což vám ušetří spoustu času v dlouhodobém horizontu.
  • Pokud si přejete větší viditelnost, můžete je veřejně zpřístupnit

Nyní můžete stavět věci správně a dostat budoucí projekty rychleji.


  1. Vytvoření kostry motivu

To by mělo zvládnout vše, co je v motivu běžně potřeba:

  • Základní šablona stylů obsahující styly, které používáte běžně (resetuje atd.)
  • Správný soubor index.php, který zpracovává vše, co potřebujete pro jakoukoli šablonu
  • Soubor functions.php - nebudete ho používat téměř stejně, ale bude to stále vhodné.

Jakmile to uděláte, sestavte si dětskou tématickou kostru, která používá vaše primární téma.

  • Přidejte šablonu stylů odkazující na nadřazený motiv.
  • Přidat soubor functions.php

Jakmile budete mít tyto dvě věci hotové, vytváření nových stránek pro lidi se stává mnohem rychlejší.


Pokud to provedete výše, můžete pracovat s následujícími možnostmi:

  • Strávit svůj nově nalezený volný čas se více seznámit s PHP, WordPress, JavaScript, CSS a/nebo mySQL ... čím více se o nich dozvíte, tím rychleji budete dělat věci.
  • Aktualizujte svůj plugin, téma a kostry motivů pro děti, když najdete věci, které byste měli zlepšit. Bez ohledu na to, jak jste dobří, pokud se budete učit, najdete vylepšení.

A pokud uděláte všechny výše uvedené , zjistíte, že Chipova odpověď bude nejen ideální, ale bude i optimální.

4
Privateer

Jednoduchá odpověď zní:.

Je kód závislý na některé z funkcí zabudovaných do určitého tématu? Pokud ano, pak do tématu.

Chcete, aby tento kód byl přenosný mezi weby a mezi tématy? Pokud ano, pak vložte plugin.

Pokud je odpověď ne na obě výše uvedené, pak obrázek 5 let v budoucnu, kdy je čas na redesign. Je funkce kódu, který píšete, něco, co přežije další aktualizaci návrhu? Pokud ano, vložte do pluginu.

Také pokud nepoužíváte dětské motivy a plánujete aktualizovat téma, doporučuji také použít plugin.

2
CO4 Computing