Haraldson Skrevet 16. september 2007 Del Skrevet 16. september 2007 OK. Ønsket er å liste opp søkeresultater sortert etter kategorier, slik at man får en overskrift for en kategori og innleggene i kategorien listet opp etter hverandre under denne overskriften. Innleggene for hver kategori skal også styles som i listevisning på de vanlige sidene, men dette er noe jeg får til med templates bare det andre kommer på plass. Så, jeg tenkte som så, jeg får vel opprette noen arrays der jeg lagrer søketreffene fra de forskjellige kategoriene. Ellers får jeg bare treffene hulter til bulter, uten overskrift mellom osv. I spoileren rett under følger koden jeg har prøvd meg med. PHP <?php $aktortreff = array(); $produksjontreff = array(); $normaltreff = array(); ?> <?php if (have_posts()) : ?> <?php $i = 0; ?> <?php while (have_posts()) : the_post(); ?> <?php $cat = get_the_category(); $cat = $cat[0]; $post = $posts[0]; switch ($cat->cat_name): default: $normaltreff[i] = $post; break; case 'Aktørar': $aktortreff[i] = $post; break; case 'Produksjonar': $produksjontreff[i] = $post; break; endswitch; ?> <?php $i++; ?> <?php endwhile; ?> <?php else : ?> <div class="h2-box"><span class="title-main">Ingen treff</span> <span class="title-extra"> prøv et nytt søk</span></h2></div> include(TEMPLATEPATH . '/searchform.php'); <?php endif; ?> Jeg får ingen feilmelding på denne, og den virker tilsynelatende. Med forbehold. Så kommer neste steg; jeg skal loope gjennom de forskjellige arrayene og skrive ut treffene i hver sin kategori. Dette kan jeg gjøre 'manuelt', dvs. at jeg lager én loop for hver kategori - det er ikke så farlig. Under i spoilertagen er koden jeg prøvde meg med; PHP <?php if ($aktortreff->have_posts()) : ?> <div class="h2-box"><span class="title-main">Søkeresultater</span> <span class="title-extra">i «Aktørar»</span></h2></div> <?php while ($aktortreff->have_posts()) : $aktortreff->the_post(); // Her er template-inkluderingskallet eller templatekoden endwhile; endif; ?> Her får jeg feilmelding allerede på første linje; Fatal error: Call to a member function have_posts() on a non-object Jeg har lest litt på codex.wordpress.org om multiple loops, men jeg tror ikke det er problemet. Feilmeldinga sier meg ikke så voldsomt mye. Noen som skjønner hva jeg ønsker å oppnå, og som har litt innsikt i WP som har gode forslag her? Lenke til kommentar
MC2 Skrevet 16. september 2007 Del Skrevet 16. september 2007 (endret) Den feilmeldingen skyldes enten av at variablen ikke er global, eller at det ikke er et object. Hvis du er sikker på at den er et object så (enklest forklart) er at du bare prøver med å legge til global $var; øverst. edit: fra det jeg ser så er ikke $aktortreff et object en gang... edit: øhm.... hva er dette? "$normaltreff = $post;". Du burde vel få feilmelding. I php må alle variabler ha $ foran. Et tips er å legge til error_reporting(E_ALL); øverst i koden for å rydde opp litt. Endret 16. september 2007 av MC2 Lenke til kommentar
Steinmann Skrevet 16. september 2007 Del Skrevet 16. september 2007 du kan ikke kjøre ->have_posts på en array, det må være på et WP_Query objekt Lenke til kommentar
Haraldson Skrevet 16. september 2007 Forfatter Del Skrevet 16. september 2007 Var det jeg var redd for, Sebastian. Har du noen idé for hvordan jeg kan skrive om koden? Jeg regner med at det er tydelig nok hva jeg ønsker skal skje. Lenke til kommentar
MC2 Skrevet 16. september 2007 Del Skrevet 16. september 2007 Hvis du viser hvordan arrayet med søkeresultatene ser ut kan jeg kanskje hjelpe deg Lenke til kommentar
Haraldson Skrevet 16. september 2007 Forfatter Del Skrevet 16. september 2007 Hvordan arrayet, eller hva det nå er, ser ut, vet jeg ikke. Det blir på en måte en vanlig WP-loop med innlegg der søkestreng er tilstede. Lenke til kommentar
Steinmann Skrevet 16. september 2007 Del Skrevet 16. september 2007 PHP <?php $aktortreff = array(); $produksjontreff = array(); $normaltreff = array(); ?> <?php if (have_posts()) : ?> <?php $i = 0; ?> <?php $a = 0; ?> <?php $p = 0; ?> <?php while (have_posts()) : the_post(); ?> <?php $cat = get_the_category(); $cat = $cat[0]; $post = $posts[0]; switch ($cat->cat_name): default: $normaltreff[i++] = $post; break; case 'Aktørar': $aktortreff[a++] = $post; break; case 'Produksjonar': $produksjontreff[p++] = $post; break; endswitch; ?> <?php endwhile; ?> <?php else : ?> <div class="h2-box"><span class="title-main">Ingen treff</span> <span class="title-extra"> prøv et nytt søk</span></h2></div> include(TEMPLATEPATH . '/searchform.php'); <?php endif; ?> PHP <?php if ($aktortreff.count() > 0) : ?> <div class="h2-box"><span class="title-main">Søkeresultater</span> <span class="title-extra">i «Aktørar»</span></h2></div> <?php foreach ($aktortreff as $treff): $treff->the_post(); // Her er template-inkluderingskallet eller templatekoden endwhile; endif; ?> Dette er ren psaudo kode, vet ikke om det vil fungere. Men du forstår poenget. Mest sannsynlig ikke den enkleste måten å gjøre det på heller Lenke til kommentar
Haraldson Skrevet 16. september 2007 Forfatter Del Skrevet 16. september 2007 Takk takk, det skal testes med en gang jeg er ferdig med en annen del av siden. Er for mye å gjøre til å skifte fokus hele tiden Lenke til kommentar
Haraldson Skrevet 16. september 2007 Forfatter Del Skrevet 16. september 2007 (endret) Jeg har endret koden min nå. Får error: Catchable fatal error: Object of class stdClass could not be converted to string Linja feilen oppstår på er den nest siste av følgende: PHP <?php if ( count($aktortreff) > 0 ) : ?> <div class="h2-box"><span class="title-main">Søkeresultater</span> <span class="title-extra">i «Aktørar»</span></h2></div> <?php $i = 0; // Teller jeg bruker til modulus og aligning av bokser ?> <?php foreach ($aktortreff as $treff): $treff->$post; // .... ?> Noen som kan dytte meg ytterligere i riktig retning her? Endret 16. september 2007 av Haraldson Lenke til kommentar
MC2 Skrevet 16. september 2007 Del Skrevet 16. september 2007 Uhm... $treff->$post; det der er ugylidg kode. Om du har lyst på variablen $post av objektet $treff, så gjøres det slik: $treff->post. Men $aktrotreff er ikke et objekt så da gir -> operatoren ingen menging. Om det er en nøkkel i $treff arrayet som heter post så får du tak på verdien slik: $treff["post"]. Lenke til kommentar
Haraldson Skrevet 16. september 2007 Forfatter Del Skrevet 16. september 2007 (endret) Koden jeg pasta var noe som hang litt igjen etter meningsløs og famlende prøving på å få ting til å funke. Får nesten samme feilmelding når jeg bruker $treff->the_post(); Fatal error: Call to undefined method stdClass::the_post() Endret 16. september 2007 av Haraldson Lenke til kommentar
MC2 Skrevet 16. september 2007 Del Skrevet 16. september 2007 Problemet er nok at funksjonen "the_post" ikke finnes i objektet $treff. Kan du paste koden til stdClass og skrive ut $aktortreff med print_r? Lenke til kommentar
Haraldson Skrevet 16. september 2007 Forfatter Del Skrevet 16. september 2007 Array ( [a] => stdClass Object ( [iD] => 6 [post_author] => 1 [post_date] => 2007-09-15 21:26:03 [post_date_gmt] => 2007-09-15 19:26:03 [post_content] => [post_title] => Aktørnavn her [post_category] => 0 [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => post-slug-her [to_ping] => [pinged] => [post_modified] => 2007-09-16 03:57:28 [post_modified_gmt] => 2007-09-16 01:57:28 [post_content_filtered] => [post_parent] => 0 [guid] => http://permalink.her/ [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 ) ) Jeg vet ikke, men jeg kan kanskje bruke ID-en på noen måte for å kalle posten med ID-en? stdClass ligger sikkert et eller annet dypt sted i WP... Lenke til kommentar
MC2 Skrevet 16. september 2007 Del Skrevet 16. september 2007 Uff, det der var vanskelig å lese. Du skulle ha puttet det i en pre-tag. Men er det $aktortreff eller $treff? For at om det er $aktortreff så er det ikke et array, men om det er $treff, og at $aktortreff er et array av lignende objekter for hver post så er det bare å hente ut post titelen med å bruke $treff->post_title og $treff->post_content for innhold osv. Du trenger ikke å gå omveien med å kalle posten på nytt igjen med id-en siden du allerede har posten lastet der. Lenke til kommentar
Haraldson Skrevet 16. september 2007 Forfatter Del Skrevet 16. september 2007 Problemet med dette er at jeg har drøssevis med såkalte custom fields i innleggene, og det er disse som listes ut i listevisning, og også skulle vises i søkeresultater. Derfor skulle jeg veldig gjerne ha kunnet bruke en template for resultatene, som er lik den for listevisninga, bare at den da looper gjennom poster med treff istedenfor alle i en kategori, for eksempel. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå