Vlastní adresář pro šablony

Zvolené téma obsahuje celkem 6 odpovědí. Do diskuze (2 účastníci) se naposledy zapojil uživatel  Twinsen a poslední změna je stará 9 let, 3 měsíce.

Aktuálně je na stránce zobrazeno 7 příspěvků - 1. až 7. (z celkem 7)
  • Autor
    Příspěvky
  • #21667

    Twinsen
    Participant

    Ahoj vespolek,

    snažím se na localhostu nastavit vlastní “sdílený” adresář se šablonami, který bude viditelný pro všechny weby, které spravuji. Samotný WP je v podadresáři a WP_HOME odkazuje na root. Adresář se šablonami je v rootu.

    Dle codexu používám register_theme_directory();

    Výsledek je ten, že se sice načte nabídka všech šablon, které mám ve vlastním adresáři, ale chybí jim náhled “screenshot.png” (podívám-li se do zdroje, vidím, že je tam špatná cesta – nějak takto http://localhost/user/name/...). Pokud se snažím o aktivaci šablony, hlásí to, že je šablona asi poškozena a nastaví se opět defaultní (tu mám v samotném WP file systému).

    Pokud přesunu vlastní adresář se šablonami z rootu do podadresáře, kde je WP nainstalovaný, potom se mi načtou šablony i screenshoty – vše vypadá v pořádku, ale pokud se pokusím opět o aktivaci, stejná hláška o poškození šablony.

    Cílem je mít ten vlastní adresář v rootu, tedy mimo samotný WP. Snažil jsem googlit co to dalo, ale bohužel bez výsledku.

    Dokázal by tu někdo poradit?

    #21672

    admin
    Keymaster
    Web

    Kam vkládáte kód s funkcí register_theme_directory()? Jaký kód tam konkrétně používáte pro specifikaci cesty? Zkusil jsem např. následující kód, nahrál jsem šablonu do adresáře wp-content/sablony a šla bez problémů aktivovat:

    register_theme_directory( ABSPATH . 'wp-content/sablony/' );

    #21680

    Twinsen
    Participant

    Kód s funkcí vkládám do aktuální šablony – do functions.php

    Měl jsem tam toto:

    register_theme_directory( $_SERVER['DOCUMENT_ROOT'] . '/themes' );

    v případě, že mám adresář “themes” v rootu, ale i tento kód

    register_theme_directory( ABSPATH. 'themes/' );

    se chová bohužel stejně – vidím šablony, ale pokud se pokusím o aktivaci, napíše to, že je šablona asi poškozená (vyzkoušeno i s defaultními šablonami twenty*).

    Ještě jsem si všiml, že pokud kliknu na “aktuální náhled” šablony místo aktivace, mám hlášku “Nezkoušíte podvádět?” nebo “Cheatin’ uh?”.

    #21682

    admin
    Keymaster
    Web

    Jasné, zásadní chyba je v tom, že vkládáte kód do aktuální šablony :-) Jakmile se totiž pokoušíte aktivovat jinou šablonu, tak přestane jít o aktuální šablonu a začne se načítat soubor functions.php z nové šablony, kde už tato funkce není, takže nelze aktivovat šablonu mimo základní adresář šablon…

    Tento kód musí být součástí nějakého jednoduchého pluginu, případně automaticky načítaného pluginu (.php soubor ve složce wp-content/mu-plugins). A i logicky je to tímto způsobem také lepší, protože jde o úpravu, která se nijak netýká vzhledu konkrétní šablony, takže by neměla být součástí souboru functions.php.

    Zkuste pak pomocí funkce var_dump() porovnat, jaké hodnoty vrací $_SERVER['DOCUMENT_ROOT'] a ABSPATH, možná tam bude nějaký problém s cestou na operačním systému Windows.

    #21683

    Twinsen
    Participant

    Já jsem sice měl tu fci v obou šablonách, tedy teoreticky, pokud se načítala jiná aktivní šablona/functions.php, o kód bych neměl přijít, ale stejně to nechodilo..

    Pomohlo to dát do toho MU pluginu – na to jsem nikde nenarazil – nyní to funguje přesně tak, jak jsem potřeboval.. :)

    Díky moc za pomoc! Palec nahoru – dobrá práce..

    #21686

    admin
    Keymaster
    Web

    Díky! Pokud jste to měl v obou šablonách, tak už možná přestal platit kód v původní šabloně, ale zatím ještě nezačal platit kód v nové šabloně, nevím, nezkoumal jsem to…

    Funguje to už v obou uváděných případech (i mimo adresář WordPressu)?

    #21699

    Twinsen
    Participant

    Mohu potvrdit, že to funguje v mé popisované konfiguraci – tedy WP nainstalovaný v podadresáři (s indexem v rootu).

    ABSPATH vrací cestu k adresáři, kde je WP nainstalovaný – tzn. pro načtení vlastního adresáře např. “themes” uvnitř WP použiji register_theme_directory( ABSPATH . 'themes/' );

    Abych docílil možnosti instalovat šablony mimo WP, nejprve mě napadlo použít výše popisovaný $_SERVER['DOCUMENT_ROOT'] – tím dostanu cestu k rootu – ovšem tímto se dostanu do stejného stavu s chybovou hláškou při aktivaci jako dříve. Ani jiné pomocné fce na zjištění absolutní cesty k rootu mi uvnitř “register_theme_directory” nefungují – nakonec jsem to udělal takto register_theme_directory( ABSPATH . '../themes/' ); a funguje to i mimo WP.

Aktuálně je na stránce zobrazeno 7 příspěvků - 1. až 7. (z celkem 7)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.

WordPress – novinky, návody a zajímavosti