Unhook php souborů

Zvolené téma obsahuje celkem 31 odpovědí. Do diskuze (2 účastníci) se naposledy zapojil uživatel  Jacob8 a poslední změna je stará 8 let.

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

    Jacob8
    Participant

    Dobrý den,

    ve WordPressu mám staženou free šablonu Interface. Vytvořil jsem si také Child Theme, včetně souborů style.css a functions.php.

    Úprava v style.css se promítla v Child Theme. Ovšem úprava ve functions.php nikoliv. Navštívil jsem support šablony Interface i pročetl různé weby a zjistil jsem nemilou věc. Php soubory jsou tzv. zaHOOKované.

    Našel jsem i nějaké návody (3 způsoby) na unhook včetně ukázky unhookované souboru 404.php na fóru podpory.

    Bohužel, jakožto laik nejsem schopný provést unhook.

    Dokázal by mi prosím někdo pomoci s unhookem souborů?

    Jacob8

    #26488

    admin
    Keymaster
    Web

    Nejsem si bohužel jist, co tím máte přesně na mysli, můžete se dát nějaký odkaz přímo na téma, kde to autoři šablony vysvětlují (nebo manuál), abych to nemusel hledat?

    #26489

    Jacob8
    Participant

    No jde o to, že když vložím upravený kód do functions.php v Child Theme, tak se změna nepromítne. Pokud kód upravím v Parent Child, tak se změna projeví.

    Níže dávám odkaz na ten návod.

    http://code.tutsplus.com/tutorials/a-guide-to-overriding-parent-theme-functions-in-your-child-theme–cms-22623

    a zde je diskuze ve fóru, kde reagoval autor šablony

    http://themehorse.com/support-forum/topic/child-theme-4/

    #26498

    admin
    Keymaster
    Web

    Aha, takže používáte šablonu Interface, která obsahuje mnoho hooků pro potenciální úpravy šablony. Osobně to považuji za velkou výhodu šablony, ale je to bohužel také trochu složitější způsob. Není to ale tak, že se nahrazují celé .php soubory, ale pouze jednotlivé části, u kterých to autor umožnil. Bohužel tam je dost složité, jak to celé popsat a nejlépe se to asi vysvětluje na nějakém příkladu. Co chcete konkrétně na webu změnit? A jak jste to upravil a co tam konkrétně nefunguje?

    #26500

    Jacob8
    Participant

    No udělal sem dvě úpravy přímo v Parent šabloně (v souborech functions.php a header.php). 1) změnil sem excerpt lenght z 50 slov na 20 a přepsal EN text odkazovacího tlačítka ”read more”.
    Jakmile, ale zaktualizuji šablonu tak je mi jasné, že úpravy zmizí. Chtěl jsem ještě změnit barvu webu, upravit zápatí. To jsou pro mě aktuálně nejdůležitější úpravy.
    Samozřejmě bych měl rád možnost provést drobné změny i v budoucnu.

    Výše zmíněné úpravy bych rád provedl přes Child Theme, ale nevím jak by měl vypadat kód. =(

    PŘÍKLAD

    <?php
    add_filter( 'excerpt_length', 'interface_excerpt_length' );
    function interface_excerpt_length( $length ) {
    	return 20;  // this will return 50 words in the excerpt
    }
    ?>
    #26506

    admin
    Keymaster
    Web

    A když jste uvedenou ukázku kódu vložil do odvozené šablony, tak to nefungovalo? Filtr excerpt_length (manuál) by měl fungovat v tomto případě bez problémů, zkuste ale zvýšit prioritu, aby se spouštěl později:

    
    add_filter( 'excerpt_length', 'interface_excerpt_length', 999 );

    Zápatí by mělo jít také změnit bez větších problémů, celý soubor footer.php je prošpikován různými hooky. Ale chtělo by to abyste napsal, co konkrétně tma je potřeba změnit, klidně i s odkazem na web nebo screenshotem.

    #26515

    Jacob8
    Participant

    Zkusil sem zvýšit prioritu, ale bez úspěchu.

    Na fóru jsem narazil ještě na tento post. Jestli sem dobře překládal, tak se to dotyčnému podařilo, ovšem nejsem si jist jak přesně.

    http://themehorse.com/support-forum/topic/loading-header-extension-php-in-child-theme/#post-27641

    Podle mě se musí do Child Theme vložit nějaký další kód, který unhookne funkci úpravy.

    V patičce potřebuji smazat | Theme by: Theme Horse | Powered by: WordPress.
    Ještě jsem to nezkoušel, ale myslím si, že to taky nepůjde. Dokud nezruším ten ”hook”.

    #26518

    admin
    Keymaster
    Web

    V odkazovaném textu vůbec neřeší filtr excerpt_length, ale nějaké jiné akce? Můžete prosím vzít celou odvozenou šablonu (i s adresářem), zabalit ji do jednoho malého .zip souboru a nahrát mi ji sem? Zkusím si to zprovoznit na localhostu a podívat se v čem je problém…

    #26522

    Jacob8
    Participant

    Exerpt_lenght neřešili, ale šlo o možnost úpravy šablony v Child Theme, pochopil-li sem to správně.

    Jak to myslíte i s adresářem? Celou složku wp-content?

    #26524

    admin
    Keymaster
    Web

    Jak to myslíte i s adresářem? Celou složku wp-content?

    Ne ne, jen složku, kde máte odvozenou šablonu, patrně wp-content/themes/neco-child.

    #26525

    Jacob8
    Participant

    Vím, že ve style.css by asi neměly být všechny kódy. Původně jsem tam měl jen kód pro úpravu velikosti písma.

    #26544

    admin
    Keymaster
    Web

    Tak už to asi vidím… Proč máte soubor functions.php v adresáři interface-child/inc/functions/? Zkopírujte ho rovnou do adresáře interface-child na stejnou úroveň jako style.css.

    Následně začne být teprve načítán a objeví se ihned dvě chyby:

    – Před číslem 999 chybí čárka (číslo ale můžete zkusit zcela smazat).

    – Musíte použít jiný název funkce než interface_excerpt_length(), třeba interface_child_excerpt_length(), protože byl stejný název už jednou použit.

    #26549

    Jacob8
    Participant

    Vy jste úžasný! Funguje to! =)

    Prvně jsem dal functions.php na stejnou úroveň jako style.css, číslo 999 smazal a funkci přepsal. Nestalo se nic.
    Zkusil jsem teda přepsat i filter, ale taky nic. Přidal jsem ještě 999 a pak se to povedlo. =)

    Jinak Parent šablona má 2 soubory functions.php. Jeden na úrovni style.css a druhy ve složce inc (obsahuje excerpt_lenght, atd.). Proto jsem ho tam dal. Když byl na úrovni style.css tak mi to hlásilo chybu Cannot redeclare interface excerpt_length interface theme. To bylo, ale tím, že jsem tam měl nejspíš chybu.

    Stejný psotup by měl fungovat i na header.php nebo footer.php?

    Asi to bude na novou diskuzi, ale ve style.css jsem přepsal kódy pro zelenou barvu, ale žádná změna se nekonala.? Ještě to zkusím, ale prozkoumat.

    Jinak děkuji moc za Váš čas a pomoc. =)

    #26557

    admin
    Keymaster
    Web

    Tak už to začíná dávat smysl :-) Už vidím, kde jste vzal tu funkci i druhý soubor functions.php. Nejdříve se ale načte soubor z odvozené šablony a až poté z rodičovské, takže když má filtr excerpt_length stejnou defaultní prioritu 10, tak se použije ten druhý načtený (tedy z rodičovské šablony). Mělo by ale stačit změnit prioritu na hodnotu 11, číslo 999 je zbytečně vysoké (ale nevadí).

    Ano, podobný postup bude platit na další funkce v záhlaví a zápatí. Ale tam musíte použít výše odkazované triky, kdy u akcí nejdříve odstraníte defaultní hooky a následně doplníte vlastní. Zkuste schválně takto změnit text v zápatí, případně napište když to nepůjde, dáme to nějak dohromady… Naučit se pracovat s odvozenou šablonou za to stojí, i když to vypadá zpočátku dost složitě :-)

    Máte příklad změněné barvy v souboru style.css? Tam by to neměl být problém, naopak je tento soubor načítán dříve než z rodičovské šablony…

    #26570

    Jacob8
    Participant

    Tak jsem téměř celou sobotu strávil hledáním informací a zkoušením změnou kódů, ale bezúspěšně.

    Co se týče barev, tak bych potřeboval nahradit všechnu zelenou (#63c6ae) za jinou (#7c313d). Eventuelně tu vínovou kdykoli změnit za jinou.
    Bude to ale nejspíš drbačka trochu. =(
    Zkusil sem do style.css vložit kód pro změnu barvy, ale nic se nestalo. Barvu jsem se snažil změnit i přímo v rodičovské šabloně, ale bez výsledku.

    Kódy pro změnu barvy, které jsem vkládal do style.css v child theme:

    /* Slogan */
    .slogan-wrap {
        background-color: #7c313d;
        background-color: rgba (124, 49, 61, 0.9);
    }
    
    /* Readmore */
    a.readmore {
    	background-color: rgba (124, 49, 61, 0.8);	
    }

    Bohužel jsem laik a moc tomu nerozumím. =/

    Jinak prioritní číslo jsem upravil na 11 a funguje. =)

    Zkoušel jsem v interface_widgets.php změnit “Read more” na “Přečíst”, ale vůbec netuším jak by měl vypadat upravený kód.

        <article>
          <?php the_excerpt(); ?>
        </article>
        <a class="more-link" title="<?php the_title_attribute(); ?>" href="<?php the_permalink(); ?>">
        <?php _e( 'Read more','interface' ); ?>
        </a> </div>

    Pomohl byste mi prosím? Rád Vás i nějak podpořim. Jde to pouze přes “Donate” – paypal?

    #26752

    admin
    Keymaster
    Web

    Pojďme na to :-) Začneme s barvami, díval jsem se, že to má šablona natvrdo v souboru style.css a nemá žádnou možnost nastavení, což je docela škoda, protože ta barva je definována asi na 40 místech :-(

    Budete muset vzít všechny výskyty a zkopírovat je do souboru style.css v odvozené šabloně. Potom to ale můžete v tomto souboru už hromadně nahradit.

    Když jsem tam vložil následující kód, tak to fungovalo a barva odkazu se změnila:

    /* Readmore */
    a.readmore {
      background-color: rgba(124, 49, 61, 0.8);	
    }

    Pozor, nesmí tam být před závorkou mezera navíc, tedy nikoli rgba (124, 49, 61, 0.8) ale rgba(124, 49, 61, 0.8).

    #26757

    Jacob8
    Participant

    Tak jsem to udělal přesně podle Vaší rady (zrušil mezeru – zkopíroval celý kód) a nic se nestalo =(

    Přitom jsem si ve style.css už upravil velikost písma a vše ok.

    #26758

    admin
    Keymaster
    Web

    Tak to je podivné, v tom souboru mám pouze uvedený kód a před ním ještě toto:

    @import url("../interface/style.css");

    (nebo ještě lépe můžete použít toto)

    A barva se změnila. Nemůžete to mít cachované v prohlížeči, zkuste ještě anonymní okno.

    #26760

    Jacob8
    Participant

    Ani ve Firefoxu ani v anonymním okně to nic neudělalo. Zkusil sem kód barvy změnit v rodičovské šabloně, ale žádná změna. Netuším proč.
    Nemůže to blokovat nějaký plugin nebo je potřeba udělat znovu unhook? Viz. (pokud jsem to pochopil)
    http://themehorse.com/support-forum/topic/how-is-style-css-called-by-interface/

    Barvu jsem zkusil změnit přes ”prozkoumat prvek’‘, přepsal sem kód barvy a šlo to.

    #26762

    admin
    Keymaster
    Web

    Žádný hook tam nemám, jen jsem to vložil do style.css v odvozené šabloně. Nahrajte sem zase prosím celou odvozenou šablonu (zazipovanou), vyzkouším to…

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

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

WordPress – novinky, návody a zajímavosti