Úvodní stránka › Fórum podpory WordPressu › Šablony, CSS (zobrazení webu) › Přidání vlastní třídy komentáře
Zvolené téma neobsahuje zatím 1žádnou odpověď. Do diskuze (2 účastníci) se naposledy zapojil uživatel peeeeeta a poslední změna je stará 8 let, 2 měsíce.
-
AutorPříspěvky
-
9. února 2016 (19:02) #26471
Zdravím,
jak mohu přidat ke stávajícím třídám vlastní třídu.
Potřeboval bych přidat ke komentářům, které splní určitou podmínku další třídu. Teď tam mám základní a když využiji této funkcefunction komen_class() {$classes[] = 'stary'; return $classes;}
Tak mám u komentáře jenom
classes="stary"
a již tam nemám ty další.
Tak že se mi rozhodí všechny styly.
Já bych potřeboval, aby se mi zobrazilo
class=" stavaji tridy stary"
.
Jde to nějak?9. února 2016 (19:39) #26472Ahoj
No, předpokládám, že je to filtr, přidaný přesadd_filter()
?V tom případě musí funkce nejdříve přijmout staré pole s třídami, přidat jednu navíc a teprve potom vrátit pole s přidanou třídou, čili tak nějak;
<?php function my_comment_classes( $puvodni, $class, $comment_id ){ $puvodni[] = 'mojetrida'; return $puvodni; } add_filter('comment_class', 'my_comment_classes',10,3); ?>
Pokud jsem to odhadl špatně prosím napiš znovu sem do topicu
9. února 2016 (20:25) #26473Ano přesně to jsem chtěl.
Nemohl jsem ale přijít na to jak získat původní třídy.
Jak funguje ta funkce. Nevidím, kde by bylo vypsány staré třídy a pak k nim přibyla nová.
Očekával bych někde spojení pomocí tečky.add_filter()
samozřejmě využívám.Díky moc funguje to ;)
9. února 2016 (21:17) #26474Pole je proměnná, která obsahuje více oddělených hodnot, které můžeme najít pod tzv. Indexy – $pole[1], $pole[14], atd.
Třídy proto, aby se mohly měnit filtrem, umístí se do takovéto proměnné. Nakonec se všechny spojí a tvoří HTML atribut class.
Aby mohly jednotlivé funkce přidávat / odebírat třídy, jak se programátorovi zachce, musí si tyto třídy – tedy celou proměnnou (pole) – mezi sebou předávat. To dělají tak, že přijmou toto pole jako parametr funkce, udělají s ním, co potřebují, a vyplivnou výsledek, který si do parametrů dá další funkce. Nakonec si je všechny vyzbírá HTML atribut class a všechny jje vypíše ;-)
Vím, zní to jako válečná románová tetralogie, ale zhruba tak nějak to funguje :-)
9. února 2016 (22:46) #26475No teď když na to koukám, tak už mi to dochází.
Pole znám. Jen jsem se hned nezorientoval.
Prostě přibude další index a pak vypíšu celé pole.
Díky už jsem si to uvědomil.
____ Jen jedna věc mi není jasná, jak jsem dostal do pole puvodni ty předchozí třídy.
Nikde nevidím předání do pole hodnoty.
Přeci hodnoty u function jsou jen hodnoty, s kterými lze pracovat uvnitř funkce.10. února 2016 (9:16) #26480Wordpress pouze nadefinoval funkci comment_class, která vypíše všechny třídy, které se různými aplikovanými filtry dostanou do pole tříd (je jedno s jakým indexem, proto se používá
$classes[] = ''
pro přidání), potom vezme pole tříd, spojí je mezerou a vloží do HTML prvku.Filtry fungují tak, že si jednotlivé funkce vzájemně předávají upravenou hodnotu pole, tedy:
nejprve přeskočím na apply_filters – tato “funkce” je použita až po definici všech filtrů, ale je klíčová – tady se pouze zavolají a spustí všechny filtry. Do prvního filtru se vloží $hodnota ze zadání, tedy 123, a dalšími parametry, ovlivňujícími práci filtru 999 a text ‘aligator’:
apply_filters('abc', $hodnota = 123, $dalsipromenna = 999, $adalsipromenna = 'aligator');
muj_filtr_a($hodnota, $dalsipromenna, $adalsipromenna){ //dělej něco s hodnotou if ($adalsipromenna == 'aligator') $hodnota = $hodnota / $dalsipromenna; //vrátíme hodnotu vydělenou číslem 999, tedy 123/999 return $hodnota; //0,123123123123 } /*identifikator filtru je 'abc' tak tedy pokud zadáme 'abc', provede se 'muj_filtr_a' je název funkce. Klidně tam může být metoda ze třídy (OOP), tedy místo 'muj_filtr_a' bude array('nazevtridy','nazevmetody') na třetím místě je důležitost. Čím je číslo vyšší, tím později se funkce v řadě spustí - pokud chcete např. vymazat celý obsah, dejte nějaké vysoké číslo, jinak vám tam naskáčou další úpravy. Poslední je počet parametrů, které je funkce schopna přijmout - tedy pokud tam nebude nic, funkce dostane zadánu pouze proměnnou $hodnota, pokud tam jsou 3, dostane všechny 3, tedy $hodnota, $dalsipromenna, $adalsipromenna */ add_filter('abc','muj_filtr_a',5,3); /*další filtr dostane do par. $hodnota upravenou hodnotu z filtru a, parametry $druhahodnota, $tretihodnota dostane stejné jako předchozí hodnoty $dalsipromenna, $adalsipromenna, protože tyto se nemění, jen přidávají další pokyny*/ function muj_filtr_b($hodnota, $druhahodnota, $tretihodnota){ //dělej něco s hodnotou if ($tretihodnota == 'aligator') $hodnota = $hodnota / $tretihodnota; //vrátíme hodnotu vydělenou číslem 999, tedy 0,123123123123/999 return $hodnota; //0,000123246369492 } add_filter('abc','muj_filtr_b',9,3);
Takto si mezi sebou předává pole
$tridy
třeba 20, 30 funkcí:1. fce - přidá třídu 'a', do prázdného pole array{} 2. fce - přidá třídu 'b' do pole, které již obsahuje jednu hodnotu 'a' 3. fce - prohledá pole $tridy a vymaže záznam, který obsahuje 'a' 4. fce - dostává pole, obsahující jen 'b'. Když zjistí, že třída 'a' v poli není, přidá třídu 'c' 5. dejme tomu, že poslední funkce (nechce se mi psát :) ) projede celé pole a ke každé třídě přidá koncovku, třeba '-z', a je jí jedno, že tím zkazí celý vzhled webu :)
Tedy na konci si apply_filters zavolá všechny funkce postupně, a prvnímu zadá hodnotu (prázdné pole):
$tridy = apply_filters('comment_class',array()); /*aby se nerozpadl design pouze se třídami 'b' a 'c', přidáme třídu 'comment', tu ovlivnit - odebrat ani změnit koncovkou nemůžeme, protože se přidá až po všech filtrech*/ $tridy[] = 'comment'; $tridy = implode(' ',$tridy); echo "<div class="$tridy"></div>
Na konci získá (podle rozpisu fcí 1-5 a nakonec přidání ‘comment’) obsahový DIV komentáře třídy ‘b’, ‘c’ a ‘comment’, které spojí mezerou a vloží do DIV
______
Filtr pouze zařídí to, že proměnnou, kterou předchozí funkce “vyplivne” (return $hodnota;), dostane další funkce, která ji dále zpracovává.
Mělo by teď být jasné, jak se tam dostávají ty původní třídy –
1. z jádra WordPressu, které přidává možnosti pro webdesignery
2. z nejrůznějších pluginů, které je mohou používat třeba pro JavaScriptové úpravy ap.:)
10. února 2016 (14:03) #26493Děkuji za detailní popis. Snažil jsem se najít i nějaké české články i filtrech, abych jejich fungování lépe pochopil.
Bohužel jsem vždy našel jen články rozdělení akcí a filtrů.Je někde nějaký obsáhlejší článek i s ukázkami nebo knížka nejlépe v češtině?
Našel jsem jen seznam, na co lze filtry a akce zavěsit.
Odkud čerpáš ty? Nebo to jsou léta praxe?10. února 2016 (19:48) #26508Léta praxe bych tomu neříkal, ale dejme tomu, že už mám drobnou představu, jak to asi funguje.. :)
Neco jsem našel tady:
http://kapler.cz/wordpress-filtry-a-akce-pro-zacatecniky/
a tady:
http://wordpress-sensei.cz/filtry-a-akce/10. února 2016 (20:21) #2650910. února 2016 (21:21) #26516Jakože asi nic moc elementárního v češtině není. Chce to zkoušet – pokus:omyl => (částečný) úspěch :D
Taky pomáhá naučit se Angličtinu a hledat na Googlu (popř. v kodexu nebo na developer.wordpress.org a ve fóru)
10. února 2016 (22:30) #26526 -
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.