organizační kód ve wordpress theme's function.php soubor?
<p>čím více přizpůsobím aplikaci wordpress, tím více začnu přemýšlet o tom, zda bych měl tento soubor organizovat nebo rozdělit.</p><p>přesněji řečeno, pokud mám spoustu vlastních funkcí, které se vztahují pouze na oblast admin a další, které se vztahují pouze na mé veřejné webové stránky, existuje nějaký důvod, proč je možné zahrnout všechny funkce správce do vlastního souboru nebo je seskupit dohromady?</p><p>rozdělit je do samostatných souborů nebo seskupit je dohromady může urychlit webové stránky wordpress nebo wordpress/php automaticky přeskočí funkce, které mají předponu is\_admin kódu?</p><p>jaký je nejlepší způsob, jak se vypořádat s velkým souborem funkcí (moje je dlouhá 1370 řádků).</p>
<p>pokud se dostáváte do bodu, kdy kód ve vašem <code>functions.php</code> tématu začíná přemoci vás, určitě bych řekl, že jste připraveni zvážit rozdělení do několika souborů. v tomto bodě mám sklon dělat to téměř druhou povahou.</p><h3>použít zahrnout soubory do souboru <code>functions.php</code> soubor</h3><p>vytvořím podadresář nazvaný<em> "zahrnuje" </em>pod mým adresářem motivů a segmentuji můj kód do souborů organizovaných podle toho, co mi v té době dává smysl (což znamená, že jsem neustále refactoring a pohybující se kód kolem webu se vyvíjí. ) také zřídka v reálném kódu v <code>functions.php</code>; vše jde v souborech zahrnujících; jen moje preference.</p><p>jen abych vám dal příklad zde je moje zkušební instalace, kterou používám k testování svých odpovědí na otázky zde na wordpress odpovědi. pokaždé, když odpovím na otázku, mám kód v případě, že ji potřebuji znovu. to není přesně to, co budete dělat pro živé stránky, ale ukazuje mechaniku rozdělení kódu:</p><pre><code>&lt;?php /* * functions.php * */ require\_once( \_\_dir\_\_ . '/includes/null-meta-compare.php'); require\_once( \_\_dir\_\_ . '/includes/older-examples.php'); require\_once( \_\_dir\_\_ . '/includes/wp-admin-menu-classes.php'); require\_once( \_\_dir\_\_ . '/includes/admin-menu-function-examples.php'); // wa: adding a taxonomy filter to admin list for a custom post type? // http://wordpress.stackexchange.com/questions/578/ require\_once( \_\_dir\_\_ . '/includes/cpt-filtering-in-admin.php'); require\_once( \_\_dir\_\_ . '/includes/category-fields.php'); require\_once( \_\_dir\_\_ . '/includes/post-list-shortcode.php'); require\_once( \_\_dir\_\_ . '/includes/car-type-urls.php'); require\_once( \_\_dir\_\_ . '/includes/buffer-all.php'); require\_once( \_\_dir\_\_ . '/includes/get-page-selector.php'); // http://wordpress.stackexchange.com/questions/907/ require\_once( \_\_dir\_\_ . '/includes/top-5-posts-per-category.php'); // http://wordpress.stackexchange.com/questions/951/ require\_once( \_\_dir\_\_ . '/includes/alternate-category-metabox.php'); // http://lists.automattic.com/pipermail/wp-hackers/2010-august/034384.html require\_once( \_\_dir\_\_ . '/includes/remove-status.php'); // http://wordpress.stackexchange.com/questions/1027/removing-the-your-backup-folder-might-be-visible-to-the-public-message-generate require\_once( \_\_dir\_\_ . '/includes/301-redirects.php'); </code></pre><h3>nebo vytvořit moduly</h3><p>další možností je začít seskupovat kód podle funkce a vytvořit si vlastní pluginy. pro mě začnu kódování v souboru <code>functions.php</code> a v době, kdy dostanu kód, jsem přesunul většinu kódu do pluginů.</p><h3>nicméně žádná významná výkonnost pochází z php kódové organizace</h3><p>na druhou stranu strukturování souborů php je 99% o vytvoření objednávky a udržovatelnosti a 1% o výkonu, pokud (organizování souborů <code>.js</code> a <code>.css</code>, které prohlížeč přes http volá, je zcela odlišný případ a má obrovský rozsah ale jak si organizujete svůj php kód na serveru do značné míry z hlediska výkonu nezáleží.</p><h3>organizace code je osobní preferencí</h3><p>a v neposlední řadě organizace kódu je osobní preference. někteří lidé by nenáviděli, jak organizuji kód, stejně jako bych mohl nenávidět, jak to taky dělají. najděte si něco, co se vám líbí a držte se ho, ale dovolte, aby se vaše strategie v průběhu času vyvíjela, abyste se s ní dozvěděli více a lépe se s ní spokojili.</p>
<p>zde je kód, který používám vždy, když nastavím nový blog wordpress:</p><p>custom admin footer text</p><pre><code>// customize admin footer text function custom\_admin\_footer() { echo '&lt;a href="http://www.netconstructor.com/"&gt;website design by netconstructor, inc.&lt;/a&gt;'; } add\_filter('admin\_footer\_text', 'custom\_admin\_footer'); </code></pre><p>vymazat verze informací z head krmiv</p><pre><code>// remove version info from the head of feeds function complete\_version\_removal() { return ''; } add\_filter('the\_generator', 'complete\_version\_removal'); </code></pre><p>odstraňte junk z hlavy stránk veřejných stránků</p><pre><code>// remove junk from the header of public website pages remove\_action('wp\_head', 'rsd\_link'); remove\_action('wp\_head', 'wp\_generator'); remove\_action('wp\_head', 'feed\_links', 2); remove\_action('wp\_head', 'index\_rel\_link'); remove\_action('wp\_head', 'wlwmanifest\_link'); remove\_action('wp\_head', 'feed\_links\_extra', 3); remove\_action('wp\_head', 'start\_post\_rel\_link', 10, 0); remove\_action('wp\_head', 'parent\_post\_rel\_link', 10, 0); remove\_action('wp\_head', 'adjacent\_posts\_rel\_link', 10, 0); </code></pre><p>odstranit oznámení o wordpressu pro všechny uživatele except sysadmin</p><pre><code>// remove the wordpress update notification for all users except sysadmin global $user\_login; get\_currentuserinfo(); if ($user\_login !== "sysadmin") { add\_action( 'init', create\_function( '$a', "remove\_action( 'init', 'wp\_version\_check' );" ), 2 ); add\_filter( 'pre\_option\_update\_core', create\_function( '$a', "return null;" ) ); } </code></pre><p>uživatelský admin logos:</p><pre><code>// custom admin login header logo function my\_custom\_login\_logo() { echo '&lt;style type="text/css"&gt; h1 a { background-image:url('.get\_bloginfo('template\_directory').'/images/excitesteps-login-logo.png) !important; } &lt;/style&gt;'; } add\_action('login\_head', 'my\_custom\_login\_logo'); // custom admin logic header logo add\_action('admin\_head', 'my\_custom\_logo'); function my\_custom\_logo() { echo '&lt;style type="text/css"&gt;#header-logo { background-image: url('.get\_bloginfo('template\_directory').'/images/excitesteps-icon.gif) !important; }&lt;/style&gt;'; } // custom admin login header link &amp; alt text function change\_wp\_login\_url() { echo bloginfo('url'); } function change\_wp\_login\_title() { echo get\_option('blogname'); } add\_filter('login\_headerurl', 'change\_wp\_login\_url'); add\_filter('login\_headertitle', 'change\_wp\_login\_title'); </code></pre> <p>pokud máte ftp přístup k vašemu serveru, nejbezpečnější nastavení není mít vaše motivy nebo pluginy adresáře zapisovatelné váš webserver a místo toho mít wordpress aktualizovat soubory pomocí ftp. když jdete na aktualizaci pluginu, wordpress vás vyzve k zadání podrobností o ftp.</p><p>metoda ftp je mnohem pomalejší než přímé zápisy souborů, ale je mnohem bezpečnější, protože nečestný skript nebude moci soubory upravovat.</p> Stáhnout se dá všechno (skoro), stáhnout můžeš i velké, rozkouskované fotografie různých bank a ty pak automaticky složíš pomocí skriptíku ImageMagick:<http://www.imagemagick.org/script/index.php>víš já ta omezení nemám nikde rád - šťouravá povaha. Stejný problém není dekompilace SWF či jiného "fleše" až na kost. Často se skrývají odkazy na plnou velikost souborů, další ubohost. <p>rozhraní api <a href="http://codex.wordpress.org/widgets\_api#developing\_widgets\_on\_2.8.2b">widgetů</a> je nejrychlejší způsob, jak vytvořit widget, který lze znovu použít. příklad použití:</p><pre><code>class my\_widget extends wp\_widget { /** * php4 constructor */ function my\_widget() { my\_widget::\_\_construct(); } /** * php5 constructor */ function \_\_construct() { // actual widget processes } /** * echo the settings update form * * @param array $instance current settings */ function form($instance) { // outputs the options form on admin } /** * update a particular instance * * @param array $new\_instance new settings for this instance as input by the user via form() * @param array $old\_instance old settings for this instance * @return array settings to save or bool (false) to cancel saving */ function update($new\_instance, $old\_instance) { // processes widget options to be saved } /** * echo the widget content * * @param array $args display arguments including before\_title, after\_title, before\_widget, and after\_widget * @param array $instance the settings for the particular instance of this widget */ function widget($args, $instance) { // outputs the content of the widget } } register\_widget('my\_widget'); </code></pre> <p>myslím, že se to opravdu rozpadne na váš provoz. pomalejší hardware, pomalejší (již pomalejší) generování stránky. není to specifické pro wp, je to stejné pro všechny velké php skripty.</p><p>pokud dostanete serverový hit každou chvíli, jako na dev boxu nebo rodinném blogu, není to žádný velký problém. bude to jen vyplivnout stránky pomaleji. dostanete-li pravidelně souběžné zásahy, vaše stránky se dostanou z webu poměrně snadno.</p><p>všimněte si také, že mnoho low-end sdílené host směšuje více lokalit na low-end hardware. je to samozřejmě ne tak nízké, jako to, na co jste se připojili, ale nečekal bych, že velký rozdíl ve výkonu ve srovnání s přeplněným sdíleným serverem.</p> a ty přílohy v záhlaví budou vždy na jednu stránku nebo mohou zabrat stránek víc? V tom druhém případě by to bylo složitější. Každopádně bude potřeba použít ruční zalomení stránky a vlastní styl stránky. no tak zaprve je divny ze se nejde prihlasit na FTP. pokud jste nemenil heslo tak kdo by ho menil ?? Kontaktujte podporu.Dal pokud bude fungovat ftp a stale to nepujde by bylo nejjednodussi vratit obsah hostingu ze zalohy (+db).. Wedos jiste denne zalohuje... a dalsi spravu webu bych doporucil sverit nekomu kdo se v tom lip vyzna... (bez urazky).A taky bych si nikdy nedal web na kterym "stoji byznys" k wedosu - ja s nima zkusenosti nemam, ale jejich povest je predchazi.. Co takhle to jako normální člověk zabalit do více souborů třeba po 2GB? Rozhodně je to lepší řešení i pro lidi s pomalejším připojením navíc v případě FREE stahování na Uloz.to půjde stahovat všechny části na jednou místo stahování jednoho velkého souboru pomalou rychlostí. ![](/Client.Images/smileys/11.gif) <p>nejlepší je vytvořit šablonu stránky s následujícím kódem. také se musíte rozhodnout, zda budete používat značku nebo kategorii. níže uvedený kód předpokládá, že používáte kategorii.</p><pre><code>&lt;div class="news"&gt; &lt;?php //the query wp\_query('showposts=5&amp;category\_name=news'); //the loop if ( have\_posts() ) : while ( have\_posts() ) : the\_post(); ?&gt; &lt;h2&gt;&lt;a href="&lt;?php the\_permalink() ?&gt;" rel="bookmark" title="permanent link to &lt;?php the\_title\_attribute(); ?&gt;"&gt;&lt;?php the\_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt; &lt;div class="post\_content"&gt; &lt;?php the\_excerpt(); ?&gt; &lt;/div&gt; &lt;? endwhile; endif; //reset query wp\_reset\_query(); ?&gt; &lt;/div&gt; &lt;div class="events"&gt; &lt;?php //the query wp\_query('showposts=5&amp;category\_name=events'); //the loop if ( have\_posts() ) : while ( have\_posts() ) : the\_post(); ?&gt; &lt;h2&gt;&lt;a href="&lt;?php the\_permalink() ?&gt;" rel="bookmark" title="permanent link to &lt;?php the\_title\_attribute(); ?&gt;"&gt;&lt;?php the\_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt; &lt;div class="post\_content"&gt; &lt;?php the\_excerpt(); ?&gt; &lt;/div&gt; &lt;? endwhile; endif; //reset query wp\_reset\_query(); ?&gt; &lt;/div&gt; </code></pre> <p>nevím, jaké konkrétní rozvržení cesty na vašem webovém serveru, ale položky z protokolu chyb se nedívám na mě, že je to konkrétně wordpress související:</p><blockquote> <p>neplatná metoda v požadavku n. n</p> </blockquote><p>tato chyba je způsobena neplatným požadavkem http. každý požadavek http má metodu. určitě to chybělo v požadavku, který vedl k položce protokolu.</p><blockquote> <p>soubor neexistuje:/var/www/vhosts/default/htdocs/tv2</p> </blockquote><p>a <em> soubor neexistuje </em> zpráva není normálně vytvořena, když php skript vrátí 404 záhlaví odpovědí. takže nejvíce jistě, tato chyba nebyla hlášena wordpress, ale server sám. konfigurace mod\_rewrite pro váš blog wordpress byla pravděpodobně nedostupná.</p><blockquote> <p>adresářový index zakázán direktivou options:/var/www/html /</p> </blockquote><p>to mi připadá stejně. pokud je <code>/var/www/html/</code> webroot vašeho blogu, pak to ukazuje, že index.php nebyl nalezen nebo nebyl vyhledán jako index adresáře vaším webovým serverem.</p><hr><p>takže nakonec to vypadá jako webserver konfigurace problém pro mě. trvale přestavba permalinků by zde tehdy nepomohla. pokud si nejste jisti, můžete použít <a href="http://codex.wordpress.org/user:hakre/permafrost">permafrost (wordpress plugin)</a> . související otázka regaring 404 chyb a permalinks je: <a href="https://wordpress.stackexchange.com/questions/3954/single-type-php-not-working-delivering-404">single-type.php nefunguje, dodává 404.</a> </p>