Gå til innhold

WP: Modifikasjon av søkeresultater


Anbefalte innlegg

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
Videoannonse
Annonse

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 av MC2
Lenke til kommentar

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

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) > ) : ?>

<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 av Haraldson
Lenke til kommentar

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
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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...