Artikel nach Kategorien filtern

Hier wird mit Hilfe einer Templatedatei eine Seite erstellt, auf der eine Checkliste zur Auswahl verschiedener Kategorien oder Tags gezeigt wird. Die Artikel in den ausgewählten Kategorien/Tags werden dann als Artikelliste angezeigt. Zu sehen ist die Funktion hier: http://gsew.de/tourenvorschlaege-nach-wahl-kat/

Zentrales Element ist die Abfrage mit:

/*Für eine ODER-Abfrage*/
<?php query_posts(array('category__in'=>$catarray,'showposts'=>2,'orderby'=>parent,'order'=>ASC,'paged'=>$paged)); ?>

oder

/*Für eine UND-Abfrage*/
   <?php query_posts(array('category__and'=>$catarray,'showposts'=>2,'orderby'=>parent,'order'=>ASC,'paged'=>$paged)); ?>
/*Für Tags-Abfrage ersetze 'category__in' bzw 'category__and' durch 'tag__in' bzw 'tag__and' */

Der Einbau hängt natürlich vom Theme des Blog ab. Ein Theme besteht mindestens aus mehreren Templates (index.php, header.php, footer.php…‘) ab und kann etwas von dieser Beschreibung abweichen.

Erstelle eine Kopie deiner page.php und nenne sie z.B. tourenliste.php
Dann setze diesen Code oben in die Datei

<?php
/*
Template Name: tourenwahl
*/
?>

Jetzt erzeugst du eine neue Seite, gib ihr nur einen Titel und weise ihr das Template zu. Die neue Seite wird jetzt wie alle anderen Seiten aussehen.

Jetzt entfernen wir in der Datei tourenliste.php alles was mit der Anzeige des title, content usw. zu tun hat, also den ganzen Loop. Der DIV in dem der content steht, sollte nicht entfernt werden, er erhält den neuen Code.

<div id="content oder so ähnlich ist vorhanden">
/* Aufbau der Variablen $auswahl, Namen stammen aus den Formularfeldern */
<?php  
rewind_posts();
global $more;
global $anzahl;
global $wpdb;
$more = 0;
$anzahl=0;
?> 

<?php $k1 = $_REQUEST['k1']; ?>
<?php $k2 = $_REQUEST['k2']; ?>
<?php $k3 = $_REQUEST['k3']; ?>
<?php $h1 = $_REQUEST['h1']; ?>
<?php $h2 = $_REQUEST['h2']; ?>
<?php $h3 = $_REQUEST['h3']; ?>

<?php $k1 = htmlspecialchars($k1); ?>
<?php $k2 = htmlspecialchars($k2); ?>
<?php $k3 = htmlspecialchars($k3); ?>
<?php $h1 = htmlspecialchars($h1); ?>
<?php $h2 = htmlspecialchars($h2); ?>
<?php $h3 = htmlspecialchars($h3); ?>

<?php $auswahl =array(); ?>
<?php if($k1!=0) $auswahl[0] = $k1; ?>
<?php if($k2!=0) $auswahl[1] = $k2; ?>
<?php if($k3!=0) $auswahl[2] = $k3; ?>
<?php if($h1!=0) $auswahl[3] = $h1; ?>
<?php if($h2!=0) $auswahl[4] = $h2; ?>
<?php if($h3!=0) $auswahl[5] = $h3; ?>

<?php 
if (count($auswahl)==0)
   print ("Wählen Sie ihre Tour-Bedingungen.");
else { ?>

<?php
$catarray = array();
$i = 0;
foreach ($auswahl as $cat) { 
   $catarray[$i] = $cat;
   $selected_cat = $wpdb->get_var("SELECT name FROM $wpdb->terms WHERE term_id = $catarray[$i]"); 
   if ($selected_name<>"") $verknuepfung="oder"; 
      $selected_name = "$selected_name $verknuepfung $selected_cat";
      $i++;
   }; ?>

   <?php print("<strong>Ihre Auswahl: $selected_name</strong>"); ?>
   <?php query_posts(array('category__in'=>$catarray,'showposts'=>2,'orderby'=>parent,'order'=>ASC,'paged'=>$paged)); ?>
   <?php //query_posts(array('category__and'=>$catarray,'showposts'=>2,'orderby'=>parent,'order'=>ASC,'paged'=>$paged)); ?>
   <strong><br />Gefunden <?php echo $wp_query->found_posts; ?> Touren</strong>
   <br /><br /><hr />
   <?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
       <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><strong><?php the_title(); ?></strong></a><!/h2>
       <?php the_content(__('(more...)')); ?><br /><hr /> 
       <?php if(get_post_type()=='post'); ?>
       <?php endwhile; else: ?> 
           <p><?php _e('Es wurde keine entspr. Tour gefunden!'); ?></p> 
       <?php endif; ?> 
       <div style="clear:both;float:left;"><?php previous_posts_link('« vorherige Seite') ?></div>
       <div style="float:right;margin-right:24px;"><?php next_posts_link('nächste Seite »','') ?></div>
       <?php }; ?>

<form action="<? $PHP_SELF; ?>">
    <div style="float:left;width:30%;"><h3>Strecke:</h3>
    <p>
    <input type="checkbox" name="k1" value="60" />10 km<br />
    <input type="checkbox" name="k2" value="61" />20 km<br />
    <input type="checkbox" name="k3" value="62" />30 km</p>
</div>

<div><h3>Zeit:</h3>
    <p>
    <input type="checkbox" name="h1" value="63" />2 Std<br />
    <input type="checkbox" name="h2" value="64" />4 Std<br />
    <input type="checkbox" name="h3" value="65" />8 Std</p>
</div>

<input name="submit" type="submit" value="Auswahl" /> </form>
value 60 bis 65 sind meine Kategorie-IDs

2460 mal gelesen

Veröffentlicht in Funktionen ohne Plugin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*