Filtert jól használom?

Sziasztok!











Eddig mindig get_post -tal vettem ki a posztokat amiket akartam, és utána a $post->… tulajdonságokat írtam ki, módosítottam meg minden, de most úgy döntöttem, hogy úgy fogom használni a WP -t, hogy ezeket a loop-ban oldom meg, és nem teljesen értem a filterek használatát. Ebben szeretnék segítséget kérni, hogy jól használom -e őket itt? Szerintem nem, majd a kód után írom miért.














<?php


&#036;args = array(


&#39;cat' => 1,


&#39;posts_per_page' => 5,


);


query_posts(&#036;args);


if (have_posts()) {


add_filter(&#39;the_excerpt', 'addMoreButton', 10, 2);


while (have_posts()) {


the_post();


?>





<a href="<?php the_permalink() ?>" rel=“bookmark” title="<?php the_title_attribute(); ?>"><?php the_title(); ?>




<?php the_time(&#39;Y. F j., l') ?>





<?php


echo apply_filters(&#39;the_excerpt', get_the_excerpt(), $post->ID);


?>











<?php


}


remove_filter(&#39;the_excerpt', 'addMoreButton');


}


?>


A függvény pedig:

[code=php:l0fi42gc]function addMoreButton(&#036;content, $postID) {


&#036;link = ‘’;


if (preg_match(&#39;/<\/p>$/is’, $content)) {


&#036;content = preg_replace(’/<\/p>$/is’, $link . '





&#39;, $content);


}


//pre ($content);


return &#036;content;


}

Ez így remekül működik, viszont azt nem értem, hogy a későbbi excerptjeimre miért érvényesül? Így minden egyes alkalommal meg kell adnom az addfiltert? Ha ne ma loopban definiálom az add_filter -t, hanem a functions.php -ben, akkor is ugyanez a helyzet.

Én azt gondoltam, hogy a logikája ennek az, hogy hozzáadom a filtert az add_filter -rel, akkor az még nem csinál semmit, és majd akkor csinálja meg szépen, amikor apply_filterezem, de ezek szerint nem így van.

El tudná nekem ezt magyarázni valaki, mert a codexből nem derül ki számomra világosan.[code=php:l0fi42gc]




<?php


&#036;args = array(


&#39;cat' => 1,


&#39;posts_per_page' => 5,


);


query_posts(&#036;args);


if (have_posts()) {


add_filter(&#39;the_excerpt', 'addMoreButton', 10, 2);


while (have_posts()) {


the_post();


?>





<a href="<?php the_permalink() ?>" rel=“bookmark” title="<?php the_title_attribute(); ?>"><?php the_title(); ?>




<?php the_time(&#39;Y. F j., l') ?>





<?php


echo apply_filters(&#39;the_excerpt', get_the_excerpt(), $post->ID);


?>











<?php


}


remove_filter(&#39;the_excerpt', 'addMoreButton');


}


?>














A függvény pedig:





function addMoreButton(&#036;content, $postID) {


&#036;link = ‘’;


if (preg_match(&#39;/<\/p>$/is’, $content)) {


&#036;content = preg_replace(’/<\/p>$/is’, $link . '





&#39;, $content);


}


//pre ($content);


return &#036;content;


}

Ez így remekül működik, viszont azt nem értem, hogy a későbbi excerptjeimre miért érvényesül? Így minden egyes alkalommal meg kell adnom az addfiltert? Ha ne ma loopban definiálom az add_filter -t, hanem a functions.php -ben, akkor is ugyanez a helyzet.

Én azt gondoltam, hogy a logikája ennek az, hogy hozzáadom a filtert az add_filter -rel, akkor az még nem csinál semmit, és majd akkor csinálja meg szépen, amikor apply_filterezem, de ezek szerint nem így van.

El tudná nekem ezt magyarázni valaki, mert a codexből nem derül ki számomra világosan.[code=php:l0fi42gc]function addMoreButton(&#036;content, $postID) {


&#036;link = ‘’;


if (preg_match(&#39;/<\/p>$/is’, $content)) {


&#036;content = preg_replace(’/<\/p>$/is’, $link . '





&#39;, $content);


}


//pre ($content);


return &#036;content;


}











Ez így remekül működik, viszont azt nem értem, hogy a későbbi excerptjeimre miért érvényesül? Így minden egyes alkalommal meg kell adnom az addfiltert? Ha ne ma loopban definiálom az add_filter -t, hanem a functions.php -ben, akkor is ugyanez a helyzet.











Én azt gondoltam, hogy a logikája ennek az, hogy hozzáadom a filtert az add_filter -rel, akkor az még nem csinál semmit, és majd akkor csinálja meg szépen, amikor apply_filterezem, de ezek szerint nem így van.











El tudná nekem ezt magyarázni valaki, mert a codexből nem derül ki számomra világosan.

azert ervenyesul a kesobbiekre mert add_filter('the_excerpt', 'addMoreButton', 10, 2); igy adod hozza (3. parameter a prior, 4. param hogy hany valtozot varsz a callback-ben!) de amikor elveszed akkor remove_filter('the_excerpt', 'addMoreButton'); akkor nem fogja a wp megtalalni(es igazabol nem veszed el!) add hozza a ugyan ugy a 3. es 4. parametert is!











megjegyzes:





mivel wp_query iteracioban vagy ezert echo apply_filters('the_excerpt', get_the_excerpt(), $post->ID); ez is felesleges! the_excer… :slight_smile:

Na, akkor most azt csináltam, hogy kivettem mindent. Csak a functions.php -ben van ez:











function addMoreButton(&#036;content) {


&#036;link = ‘’;


if (preg_match(&#39;/

$/is’, $content)) {


&#036;content = preg_replace(’/$/is’, $link . ‘





&#39;, $content);


}


return &
#036;content;


}


add_filter(&#39;the_excerpt’, ‘addMoreButton’, 10, 2);

A priort, meg accepted args -ot értem.

Azt nem értem, hogy amikor csak kitolom: the_excerpt(); -tel, akkor miért érvényesül???

Le van írva szépen a codexben, hogy az add filter regisztrálja a filtert.

De miért nem csak akkor fut le, amikor én apply -ozom?

Vagyis, hogyan tudom akkor megcsinálni azt, hogy csak akkor érvényesüljön a filter a the_excerpt() -re, amikor én azt kérem, ne mindig.[code=php:2unhbjgj]function addMoreButton(&#036;content) {


&#036;link = ‘’;


if (preg_match(&#39;/

$/is’, $content)) {


&#036;content = preg_replace(’/$/is’, $link . ‘





&#39;, $content);


}


return &
#036;content;


}


add_filter(&#39;the_excerpt’, ‘addMoreButton’, 10, 2);











A priort, meg accepted args -ot értem.





Azt nem értem, hogy amikor csak kitolom: the_excerpt(); -tel, akkor miért érvényesül???











Le van írva szépen a codexben, hogy az add filter regisztrálja a filtert.





De miért nem csak akkor fut le, amikor én apply -ozom?











Vagyis, hogyan tudom akkor megcsinálni azt, hogy csak akkor érvényesüljön a filter a the_excerpt() -re, amikor én azt kérem, ne mindig.

I.Ebben az esetben mi szukseg a filterre? Ha csak a loop-on beleul kell valami szurnod akkor siman meghivod a get_the_excerpt() fuggvenyt es atmesz a stringen amit visszaad.











II. query_post helyett hasznalj Wp_Query-t





















<?php



$args = array(



'param' => 'desiredvalue'



);



$myvar = new WP_Query($args);



if($myvar->have_posts()) : while($myvar->have_posts()): $myvar->the_post(); ?>



<?php endwhile;



wp_reset_postdata();



endif; ?>









<?php





$args = array(





'param' => 'desiredvalue'





);





$myvar = new WP_Query($args);





if($myvar->have_posts()) : while($myvar->have_posts()): $myvar->the_post(); ?>





<?php endwhile;





wp_reset_postdata();





endif; ?>





igazabol te most mit is akarsz elerni azzal a preg_match-vel ?











mert szerintem az egeszet rosszul kozelitjuk meg :)))













a filter es action mukodese roviden:


amikor hozza adod akkor mindig le fog futni a tied is amig ki nem veszed, kivetelnel ugyelni kell a pontos paramterezesre!(ha megnezed az add_ es remove_ function-ket akkor latod hogy viszonylag egyszerubb tombkezeles folyik csak... :)

Értem…











Akkor én nem értettem meg jól a működésüket.





Csak akkor azt nem értem, mi szükség van az apply_filterre, ha az add_filterrel úgy is érvényesül mindenhol.

szerintem elég egyértelmű a kód :slight_smile:











Ha az excerpt végén van

akkor berakja elé a $link értékét.





Az más kérdés, hogy most a link ott egy üres string…

nem tudom, hogy ez segit e de ennyi a lenyeg:









Quote:






    [*]apply_filters() is the filter hook location, is called by core code, and is used to applyany filters that are added to the queue by Themes/Plugins (and core).

    [*]add_filter() is called by Themes/Plugins (and core), and is used to add filters to the queue to be applied to the hook by core.

    [/list]









Az add_filter nem futtatja le a kodot, csak hozzadja a "futtatando listahoz" (queue). A futtatast maga a "hook" vegzi el, jelen esetben a "the_excerpt". A hook pedig absztrakt szempontbol kb ugyanaz, mint az Event( esemeny) javascript alatt.

'lolka_bolka' wrote:




szerintem elég egyértelmű a kód :)





Ha az excerpt végén van akkor berakja elé a $link értékét.


Az más kérdés, hogy most a link ott egy üres string...








Ez azert rossz megoldas mert ha rakeresel a wp core kodban a the_excerpt -re akkor latni fogod hogy wpautop ra van rakva a hookra tehat auto fogja a p elemet kore rakni tehat (ha nem nyulsz bele a priorba) akkor a te hookod elobb fog lefutni es igy biztos hogy a p elott lesz a te linked!

azért érdekes ez, mert berakja…











azt hiszem, most már nagyjából értem akkor… thx.

Mit rak be ? :slight_smile:

Mindegy, megértettem. Az add_filter() a megfelelő tartalomra rárakja a filtert, azaz meghívja azt a függvényt. Az add kvázi egyben apply -ol is örökre a megfelelő tartalmon.











Ha meg valami máson akarom meghívni, akkor apply és megadhatok neki más tartalmat.





Az zavart meg, hogy szerintem nem konzekvens az elnevezés, illetve nincs egy register_filter függvény, amivel tartalom nélkül elmondhatom, hogy mi a függvény, amit később add -olni, vagy apply -olni szeretnék.