Vícenásobný loop ve WordPress theme

Úvodní stránka Fórum podpory WordPressu Problémy s WordPressem Vícenásobný loop ve WordPress theme

Štítky: 

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

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

    Scar
    Participant
    Web

    Potřebuji vytvořit několik smyček, která každá bude vypisovat něco jiného. První loop vypisovat info ze dvou specifických kategorii s tím, že první příspěvek bude zobrazovan jinak, to stejné pro druhý loop, který by měl vypisovat vše, kromě těch dvou kategorii předtím, řídím se tímto http://codex.wordpress.org/The_Loop#…, ale prostě na mé stránce http://pokerak.cz loop 1 fugnuje dobře, na na druhé se stále zobrazují i ty kategorie které by měli být vynechané, neví někdo jak na to please? Případně kde je něco takového popsáno? nebot codex wp říká prd k tomuto :-( php nemám rád :-/

    vypisuji jen tu část, která dělá problémy, pravděpodobně jde o to de..lni pole a ani vyjmute kategorie nejdou

    <?php $my_query = new WP_Query('cat=-7340-161&posts_per_page=4');

    while ($my_query->have_posts()) : $my_query->the_post();

    $do_not_duplicate[] = $post->ID;?>

    <!-- vypis meho přispěvku-->

    <?php endwhile; ?>

    <ul class=”post-index-seznam”> <!– Do other stuff… –>

    <?php if (have_posts()) : while (have_posts()) : the_post();

    if (in_array($post->ID, $do_not_duplicate)) continue;

    ?>

    <!– vypis meho přispěvku–>

    <?php endwhile; endif; ?>

    #9250

    admin
    Keymaster
    Web

    První, co mě napadlo, je chybějící čárka mezi vyjmutými rubrikami.

    Zkuste změnit:

    cat=-7340-161

    na:

    cat=-7340,-161

    Pokud to tím ale není způsobeno, můžete někde nahrát celý .php soubor (zazipovaný), abychom to mohli otestovat? Ze samotného úryvku pouze druhého loopu to asi nepoznáme. Teoreticky by mohl loop modifikovat také nějaký plugin, zkuste je raději na zkoušku všechny deaktivovat…

    #9251

    Scar
    Participant
    Web

    V pluginech na 100% problém není, neboť používám jen redirection a pár co přidavaji widgety

    Dík a tu čárku, ta pomohla že v těch 4řech příspěvcích nevypisují ty kategorie, jenže problém je hlavně v tom, že ten cyklus musí vypsat následně další příspěvky, proto tam musí být to in_array($post->ID, $do_not_duplicate) a to nejen že nefunguje(furt vypise i ty příspěvky co byli vypsane předchozm cyklem), ale i vypisuje všechny kategorie a to prostě dle tohoto http://codex.wordpress.org/The_Loop#Multiple_Loops_in_Action zde nefunguje

    <?php endwhile; ?>

    <ul class="post-index-seznam"> <!-- Do other stuff... -->

    <?php if (have_posts()) : while (have_posts()) : the_post();

    if (in_array($post->ID, $do_not_duplicate)) continue;

    ?>

    <!– vypis meho přispěvku–>

    <?php endwhile; endif; ?>

    Celý index.php tu

    http://pastebin.com/n1yiG47u

    #9252

    admin
    Keymaster
    Web

    Pokud jsem to dobře pochopil, tak tam používáš celkem 4 cykly:

    1) WP_Query() pro výpis jednoho příspěvku ze dvou specifických rubrik

    2) query_posts() pro výpis dalších 12 příspěvků ze dvou specifických rubrik

    3) WP_Query() pro výpis 4 příspěvků (všech mimo dvou specifických rubrik)

    4) A nakonec standardní smyčku pro výpis všech příspěvků, ale omezenou proměnnou $do_not_duplicate.

    Doporučoval bych to celé trochu předělat. Správně by měla být první standardní smyčka, která může být modifikovaná pomocí funkce query_posts(), dále by už pak měly následovat pouze výpisy pomocí WP_Query(). První a druhý bod podle mě nemusí mít vůbec samostatné smyčky, ale můžeš pomocí jedné smyčky nechat vypsat všech 13 příspěvků ze dvou specifických rubrik a první z nich jenom trochu jinak nastylovat (zobrazit).

    Je to ale trochu složitější, budu se to muset celé pořádně otestovat. Můžeš také vyzkoušet výpis proměnné $do_not_duplicate pomocí funkce var_dump(), aby bylo zřejmé, že se sem opravdu v pořádku ukládají ID příspěvků. Dále může být problém v nesprávném míchání různých funkcí pro výpis příspěvků nebo i jen nějaká drobnost, které jsem si nevšiml. Pozor je tam také jednou $do_not_duplicate[] a podruhé $do_not_duplicate, tedy jednou se vše ukládá do pole, zatímco podruhé jsou ID příspěvků pokaždé znovu přepisovány v jednoduché proměnné…

    #9253

    Scar
    Participant
    Web

    S tím $do_not_duplicate je to naprd, prože jako pole je to uvedeno z důvodu, že v tam mělo být víc příspěvků, jenže to s polem nefunguje, zatimco když se posila jen jedno id tak to funguje, viz první dva cykly, v druhých dvou je to pole a tam to nefunguje.

    Přes styly by to možná šlo, ale protože se tam mění zobrazovaný obsah, tak to myslim není ideální řešení. Zkusím to změnit na dva normální cykly, do každého cyklu přidám jednu proměnnou, která se bude každým výpisem příspěvku o jedno zvětšovat a prostě vypisovani přispěvku dám do ifu, který se bude rozhodovat dle te moji promenné

    #9254

    admin
    Keymaster
    Web

    Takže konečně jsem si našel čas na otestování a snad jsem objevil příčinu. Problém je v tom, že používáte proměnnou $do_not_duplicate nejdříve pro zápis jedné jediné hodnoty a tudíž je definována jako skalární proměnná. Poté se ale tutéž proměnnou pokoušíte použít jako pole (respektive ukládat do ní hodnoty jako do pole, i když to není pole). PHP tak vyhodí následující chybu a do pole samozřejmě nic neuloží:

    Warning: Cannot use a scalar value as an array in ...

    Napadají mě dvě jednoduchá řešení:

    1) Proměnnou $do_not_duplicate přetypovat na pole (před jejím použitím ve smyslu pole) pomocí funkce settype().

    settype( $do_not_duplicate, "array" );

    Pozor v tomto případě zůstane v poli i původní první hodnota z první smyčky.

    2) Pro použití v třetí a čtvrté smyčce ji přejmenovat, např. na $do_not_duplicate_pole. Poté bude také vše fungovat.

    Ani jedna věc sice neřeší celkově špatný přístup k uvedeným smyčkám, který by měl být raději zcela předělán (nesprávné využití WordPress API, zbytečné SQL dotazy), ale provizorně by to mělo “správně” fungovat.

    #9255

    Scar
    Participant
    Web

    Co je tedy správné řešení? tohleto jsem našel přímo na codexu wp, ale nějaká třeba rychlejší varianta nebo jak to vypadat správně?

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