Super Lösung. War genau das, was ich eben gesucht habe!!!!! Benötige ein manuelles Menu, wobei eine Überpunkt jedoch über 50 Unterseiten und viele davon nochmals 10-20 Unterseiten haben. Das alles manuell da zu platzieren hätte Jahre gedauert. Deine Lösung macht es automatisiert. Vielen Dank für den Code!!!!!
Beiträge von digdigger
-
-
single.php:
PHP
Alles anzeigen<?php get_header(); if (in_category (7) ) { include 'single-cat1.php'; } else { // die Klammer wird ganz unter wieder geschlossen, alles zwischen den Klammern muss dann logischerweise in der angepassten Form in die single-cat1.php ?> <div id="content"> <div class="padder"> <?php do_action( 'bp_before_blog_single_post' ) ?> <div class="page" id="blog-single"> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="item-options"> <div class="alignleft"><?php next_posts_link( __( '← Previous Entries', 'buddypress' ) ) ?></div> <div class="alignright"><?php previous_posts_link( __( 'Next Entries →', 'buddypress' ) ) ?></div> </div> <div class="post" id="post-<?php the_ID(); ?>"> <div class="post-content"> <h2 class="posttitle"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php _e( 'Permanent Link to', 'buddypress' ) ?> <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2> <p class="date"><?php the_time('F j, Y') ?> <em><?php _e( 'in', 'buddypress' ) ?> <?php the_category(', ') ?> <?php printf( __( 'by %s', 'buddypress' ), bp_core_get_userlink( $post->post_author ) ) ?></em></p> <div class="entry"> <?php the_content( __( 'Read the rest of this entry →', 'buddypress' ) ); ?> <?php wp_link_pages(array('before' => __( '<p><strong>Pages:</strong> ', 'buddypress' ), 'after' => '</p>', 'next_or_number' => 'number')); ?> </div> <p class="postmetadata"><span class="tags"><?php the_tags( __( 'Tags: ', 'buddypress' ), ', ', '<br />'); ?></span> <span class="comments"><?php comments_popup_link( __( 'No Comments »', 'buddypress' ), __( '1 Comment »', 'buddypress' ), __( '% Comments »', 'buddypress' ) ); ?></span></p> </div> <?php $tags = wp_get_post_tags($post->ID); if ($tags) { echo 'Alben dieses Künstlers'; $first_tag = $tags[0]->term_id; $args=array( 'tag__in' => array($first_tag), 'post__not_in' => array($post->ID), 'showposts'=>5, 'caller_get_posts'=>1 ); $my_query = new WP_Query($args); if( $my_query->have_posts() ) { while ($my_query->have_posts()) : $my_query->the_post(); ?> <br/><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_post_thumbnail(); ?><br><?php the_title(); ?></a> <?php endwhile; } } ?> </div> <?php comments_template(); ?> <?php endwhile; else: ?> <p><?php _e( 'Sorry, no posts matched your criteria.', 'buddypress' ) ?></p> <?php endif; ?> <br/><script type="text/javascript"><!-- google_ad_client = "pub-6660504669776741"; /* 468x60, Erstellt 17.07.10 */ google_ad_slot = "2401561132"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> <?php do_action( 'bp_after_blog_single_post' ) ?> </div><!-- .padder --> </div><!-- #content --> <?php locate_template( array( 'sidebar.php' ), true ) ?> <?php get_footer(); } // hier wird die Klammer geschlossen ?> -
Habe in einem Projekt (WP 3.0.1) dies im Einsatz und nach eigenen Bedürfnissen ein wenig angepasst.
-
-
Ich finde, die einfachste Art ist, die anderen "Artikelansichten" in die single.php zu includen.
PHP<?php get_header(); if (in_category (1) ) { include 'single-cat1.php'; } elseif (in_category (2) ) { include 'single-cat2.php'; } else { // hier kommen die jetzigen Inhalte der normalen single.php } ?>die single-cat1.php etc. kannst du dann entweder komplett anders gestalten oder nur andere css-klassen vergeben, die sidebar anders machen, etc., etc.
-
Ich finde, die einfachste Art ist, die anderen "Artikelansichten" in die single.php zu includen.
PHP<?php get_header(); if (in_category (1) ) { include 'single-cat1.php'; } elseif (in_category (2) ) { include 'single-cat2.php'; } else { // hier kommen die jetzigen Inhalte der normalen single.php } ?>die single-cat1.php etc. kannst du dann entweder komplett anders gestalten oder nur andere css-klassen vergeben, die sidebar anders machen, etc., etc.
-
Meinst du sowas (wenn "Thema" == "Kategorie")
http://wordpress.org/extend/plugins/category-images-ii/ -
Ein sehr komplexes Problem, welches auch nur durch komplexe Massnahmen zu lösen ist. Ich habe gerade ein Theme entwickelt, welches dies versucht umzusetzen. Dafür ist jedoch sehr viel Handarbeit und viele Variablen müssen manuell zur Verfügung gestellt werden.
Ich verweise hier mal auf das Projekt http://latina-press.com
Die Länderübersichten (links in der Navigation) sind statische Seiten mit speziellen Templates. Ganz unten findet man dann den Link zum "Archiv", welches dann die category.php ist.
Dadurch ist dann
domain.net/name <- gefakte übersicht
domain.net/archiv/name <- kategorieübersichtDer Trick ist eigentlich nur, dass die Seite und die Kategorie identisch benannt sind. Der Seitencontent wird dabei in meinem Fall gar nicht abgebildet (es steht jedoch trotzdem was drin, was All for One Seo dann wieder für die Description verwendet).
Da ich zudem alles einzeln individuell anpassen können will, habe ich mich für jeweils ein template je seite und artikel je kategorie entschieden. Faktisch besteht das Theme nunmehr aus rund 100 Dateien.
Da Wordpress Seiten und Artikel (Kategorien) nicht verknüpfen kann, gebe ich am Anfang des Templates die Slugs und IDs mit, die dann im Template mehrfach für die Linkerstellung bzw. die Querys eingesetzt werden.
z.B. so
PHP
Alles anzeigen<?php /* Template Name: Argentinien */ get_header(); $kat = '279'; // KATEGORIE $archivlink = '/archiv/lateinamerika/argentinien/'; // LINK ZUM ARCHIV $parent = 'Lateinamerika'; // NAME PARENT $parentlink = '/lateinamerika/'; // LINK ZUM PARENT $titel = 'Argentinien'; // NAME $linkkat = '798'; // LINKKATEGORIE ?> -
Wenn du ihn an einer bestimmten Stelle im Post einfügen willst, würde ich einen Shortcode empfehlen.
Ansonsten würde der Inhalt eines benutzerdefinierten Feldes z.B. vor oder nach dem Post etc. eingefügt. Dafür muss dann die single.php entsprechend angepasst werden.
Wenn du einen Shortcode verwendest, trägst du diesen an der gewünschten Stelle in deinem Content ein, also im Editor beim Schreiben des Beitrages.
Dies kommt in die functions.php des templates
PHP// [dlink url="http://domain.net/file.ext"] function dlink_func($atts) { extract(shortcode_atts(array( 'url' => '' ), $atts)); return '<div class="dlink"><a href="' . esc_attr($url) . '"><img src="BUTTON" alt="" /></a></div>'; } add_shortcode('dlink', 'dlink_func');und dies dann an die gewünschte stelle im Post mit dem angepassten Link natürlich:
-
get_the_category gibt ein array zurück, also muss die Kategorie aus der Reihe extra festgelegt werden, wenn nicht alle Kategorien (foreach) nacheinander verwendet werden sollen. Dies erfolgt dann per
$category[0] <- nur das 1. Element der Reihe
$category[1] <- nur das 2. Element der ReiheAchtung: WP gibt die "Kategorienliste" alphabetisch und nicht nach ID aus.
Das Form-Element kannst du auch ganz einfach über CSS gestalten, habe ja eine id in den Code gesetzt.
Nachfolgend der Code zur Abbildung nur eines Dropdowns, auf der bekannten Domain zu sehen.
PHP
Alles anzeigen<!-- DROPDOWN MORE ENTRIES ONLY FROM FIRST CATEGORY--> <?php global $post; $anzahl = '10'; // Anzahl der max. Einträge im Dropdown $category = get_the_category(); ?> <form id="dropdown" action=""> <select name="menu" onchange="javascript:parent.location = this.form.menu.options[this.form.menu.selectedIndex].value;"> <option value="Die letzten <?php echo $anzahl; ?> News über » <?php echo $category[0]->name; ?>">Die letzten <?php echo $anzahl; ?> News über » <?php echo $category[0]->name; ?></option> <?php query_posts('posts_per_page='. $anzahl .'&cat='. $category[0]->term_id); while (have_posts()) : the_post(); ?> <option value='<?php the_permalink(); ?>'><?php the_title(); ?></option> <?php endwhile; ?> <option value="<?php echo get_category_link($category[0]->term_id);?>">Alle Nachrichten über » <?php echo $category[0]->name; ?></option> </select> </form> <?php wp_reset_query(); ?> <!-- DROPDOWN MORE ENTRIES ONLY FROM FIRST CATEGORY -->Schön, das dir meine Seiten gefallen.
Grüsse aus Brasilien ... -
Also ich weiss gar nicht so genau, was du eigentlich willst. Da sollte man lösungsorientiert drangehen und jetzt nicht schauen, welches Plugin welche Probleme an irgendeiner Stelle macht. Wichtig ist, welche Funktion du auf der Seite letztendlich haben willst. Es gibt halt immer mehrere Wege.
Bezugnehmend auf deine Ergänzungen im Eingangspost habe ich gerade mal was zusammengeschraubt und online gestellt:
1) Die Abbildung der letzten x Artikel der Kategorie oberhalb der Überschrift eines Beitrags als Dropdown.
2) Letzter Eintrag im Dropdown ein Link zur entsprechenden Kategorie.
3) Sollte ein Beitrag mehreren Kategorien zugeordnet sein, erscheinen mehrere Dropdowns
4) Spezielle Kategorien können auch ausgeklammert werden.Für so etwas benötigt man weder Plugins, noch Ergänzungen in functions.php, Einträge in benutzerdefinierten Feldern oder ähnliches. Der Code wird einfach ausserhalb des Loops in das Template single.php eingefügt.
PHP
Alles anzeigen<!-- DROPDOWN MORE ENTRIES FROM CATEGORY--> <?php global $post; $anzahl = '10'; // Anzahl der max. Einträge im Dropdown $categories = get_the_category(); foreach ($categories as $category) : if($category->term_id == 9998 || $category->term_id == 9999) { // ID der Kategorien, die nicht angezeigt werden sollen continue; } ?> <form id="dropdown" action=""> <select name="menu" onchange="javascript:parent.location = this.form.menu.options[this.form.menu.selectedIndex].value;"> <option value="Die letzten <?php echo $anzahl; ?> News über » <?php echo $category->name; ?>">Die letzten <?php echo $anzahl; ?> News über » <?php echo $category->name; ?></option> <?php query_posts('posts_per_page='. $anzahl .'&cat='. $category->term_id); while (have_posts()) : the_post(); ?> <option value='<?php the_permalink(); ?>'><?php the_title(); ?></option> <?php endwhile; ?> <option value="<?php echo get_category_link($category->term_id);?>" title="Alle Nachrichten über » <?php echo $category->name; ?>">Alle Nachrichten über » <?php echo $category->name; ?></option> </select> </form> <?php endforeach; wp_reset_query(); ?> <!-- DROPDOWN MORE ENTRIES FROM CATEGORY -->Zu sehen ist das ganze derzeit mal testweise hier:
Artikel mit einer Kategorie
Artikel mit zwei Kategorien -
Nun, der Code funktioniert (innerhalb des loops) und ruft auch die im theme-verzeichnis abgelegte datei auf. habe es selbst auf einer testumgebung getestet.
vielleicht stimmt ja was mit der datei nicht, die du includen willst. lässt sie sich denn separat aufrufen? Ansonsten am besten mal den eingebundenen code im zusammenhang posten.
Nachfolgender Code funktioniert bei mir ausserhalb des Loops.
-
Habe eine Lösung gefunden, die anscheinend auch funktioniert.
PHP
Alles anzeigenfunction lp_show_current_page_on_single($output) { global $toppage; if( is_single() || is_category() ) { $search = $toppage; $pos = strpos('page-item-' . $search, $search); if ($pos == true) { $output = str_replace('page-item-' . $search, 'page-item-' . $search . ' current_page_item', $output); } } return $output; } add_filter('wp_list_pages', 'lp_show_current_page_on_single');Der Filter kommt in die functions.php und überprüft also in dem speziellen Fall die im Artikel-Template definierte Variable, die identisch ist mit der Page-ID, die von wp_list_page in der Liste als Klasse verwendet wird und fügt bei Übereinstimmung die Klasse "current_page_item" hinzu.
Anmerkung: Sollte man nur ein Artikel-Template für alle Kategorien verwenden, also die normale single.php, dann könnte man die Verknüpfung zu den jeweiligen statische "Hauptseiten" ebenfalls herstellen. Gleiches geht dann auch bei der WP-eigenen Kategorienansicht (category.php)
PHPget_header(); if (is_category('1')) $toppage = '123'; elseif (is_category('2')) $toppage = '124'; ...Wie gesagt, der ganze Aufwand dient nur dazu, die virtuell verknüpfte Seite beim Aufruf eines Artikels (bzw. einer Kategorieübersicht) im über wp_list_pages abgebildeten Menü (Seitenübersicht) via CSS hervorzuheben.
-
Ich habe ein Projekt, bei dem die "kategorieübersicht" über ein statisches Seitentemplate läuft. Daher werden für die Navigation auch keine wp_list_categories sondern wp_list_pages verwendet. Alles funktioniert perfekt, lediglich das Highlighting beim Aufruf eines Artikels funktioniert bislang nicht. Beim Aufruf der Seite verwende ich die css-klasse "current_page_item", für die Artikel möchte ich diese nun noch über einen Filter einfügen.
Damit WP auch weiss, welche Seite zu welcher Kategorie gehört, gebe ich neben einigen anderen Variablen auch die der statischen Übersichtsseite im Template mit. Jede Übersichtsseite und jede Kategorie hat hierbei ihr eigenes Template.
Im Artikeltemplate steht also drin:
Die ID ist damit jeweils identisch mit der von Wordpress erstellten Klasse "page-item-123" in der wp_list_pages Liste. Über die Echo-Funktion wird die Variable auch angezeigt, ist also vorhanden.
Nun will ich praktisch bei der Erstellung der Liste die mitgegeben Variable mit der page-item-Nummer vergleichen und dann dort die zusätzliche Klasse einfügen. So dass also die Seitennavigation auch beim Aufruf eines Artikels entsprechend per CSS hervorgehoben werden kann.
Leider macht dies mein Code nicht, irgendwo habe ich einen Fehler drin. Vielleicht hat jemand eine Idee, ich denke es liegt am preg_match. Zudem stellt sich die Frage, ob ich dies über eine foreach-Schleife laufen lassen muss, um jeden Listenpunkt einzeln zu prüfen.
Nachfolgender Code ersetzt die Klasse in allen Listenpunkten.
PHPfunction lp_show_current_page_on_single($output) { if( is_single() ) { $page->ID = $toppage; if(preg_match('#page-item-' . $page->ID . '#', $output)) { $output = str_replace('page_item', 'page_item current-page', $output); } } return $output; } add_filter('wp_list_pages', 'lp_show_current_page_on_single'); -
Ich würde die Ausgabe einfach anpassen und es bei txt im benutzerdefinierten feld belassen, also nur datei.php
da du den code eh innerhalb des loops verwendest, brauchst du die id nicht nochmal auszulesen. ich habe nach ne abfrage gemacht, damit kein include durchgeführt wird, sollte das benutzerdef. feld leer sein
PHP<?php $auswahl = get_post_custom_values('auswahl'); if (!empty($auswahl)) { include $auswahl[0]; } ?>Edit: in meinem Fall wird die datei aus dem themeverzeichnis gelesen.
-
Hallo,
ich habe mal wieder ein kleines Problem. In einem Projekt habe ich fast 30 statische Seiten, bei denen in der Sidebar jeweils eine Liste von Artikeln angezeigt werden soll, die in einer bestimmten Kategorie stehen (sofern vorhanden). Dies ist prinzipiell kein Problem über ein if-else-elseif routine, bauscht den code aber ziemlich auf. Funktionieren tut es jedoch.
Meine Frage ist, ob man über ein Array einer Seite die Kategorie zuweisen kann und dann nur jeweils die notwendigen Variablen (page_id und cat_id) einsetzt.
Hier der Code zur Veranschaulichung (auf 2 begrenzt, sind wie gesagt fast 30):
PHP
Alles anzeigen<?php if (is_page('10') || $post->post_parent=="10" ) /* statische seite 1 */ { ?> <?php query_posts('cat=100'); /* verknüpfte kategorie */ ?> <?php if ( have_posts() ) : ?> <!-- CONTAINER ÖFFEN + ÜBERSCHRIFT --> <?php while ( have_posts() ) : the_post(); ?> <!-- ARTIKEL DER KATEGORIE IM LOOP --> <?php endwhile; ?> <!-- CONTAINER SCHLIESSEN --> <?php else: ?> <!-- CONTAINER WENN KEINE ARTIKEL VORHANDEN --> <?php endif; ?> <?php } elseif (is_page('20') || $post->post_parent=="20" ) /* statische seite 1 */ { ?> <?php query_posts('cat=200'); /* verknüpfte kategorie */ ?> <?php if ( have_posts() ) : ?> <!-- CONTAINER ÖFFEN + ÜBERSCHRIFT --> <?php while ( have_posts() ) : the_post(); ?> <!-- ARTIKEL DER KATEGORIE IM LOOP --> <?php endwhile; ?> <!-- CONTAINER SCHLIESSEN --> <?php else: ?> <!-- CONTAINER WENN KEINE ARTIKEL VORHANDEN --> <?php endif; ?> <?php } ?>Könnte also man die Verküpfung
spezielle Seite + deren Unterseiten -> spezielle Kategorie
in ein Array setzen, damit der ganze nachfolgende Wulst nur einmal in die sidebar geschrieben werden muss?Danke für eure Hilfestellung und Tipps!
-
Bei vielen IDs wirds unübersichtlich, da würde ich die auszuschließenden IDs in ein Array speichern und per in_array() prüfen.
Nach langer Zeit habe ich das noch einmal aufgreifen müssen, da nun die auszuschliessenden Kategorien doch zahlreicher wurden.
Folgendes Snippet scheint nach ersten Tests zu funktionieren:
PHP
Alles anzeigen<?php // this is where 5 headlines from the current category get printed if ( is_single() ) : global $post; $categories = get_the_category(); $exclude = array(1, 2, 3); foreach ($categories as $category) : $cat_id = $category->term_id; $checked = in_array( $cat_id, $exclude ); if ( $category->term_id == $checked ) { continue; } ?>Frage an die wahren PHP-Profis: Ist das so okay oder könnte man das Snippet noch verbessern?
-
Es scheint am SmartYouTube Plugin zu liegen. Ist dieses deaktiviert, wird der breite Bindestrich wie gewohnt dargestellt.
Dort im Plugin-Code findet sich die Zeile
PHPfunction yte_check($the_content, $side=0) { if(strpos($the_content, "httpv")!==FALSE ) { $char_codes = array('×','– ;'); // leerzeichen nach 8211 eingefügt $replacements = array("x", "--"); $the_content=str_replace($char_codes, $replacements, $the_content);Ob es natürlich noch mit einem zweiten Plugin interagiert, ist schwer zu sagen ...
Update: Ich habe die drei Zeilen jetzt ausgeklammert und kann keine Fehler bei der Videoeinbindung (auch bei YouTube-IDs mit Bindestrich) feststellen. Aber ich nutze bei dem Plugin auch nicht alle Funktionen. Beim Entwickler habe ich mal ein Kommentar hinterlassen. Werde ggf. berichten.
-
Hallo,
ich habe mal wieder einen kleinen Wunsch, den man mir vielleicht mit ein paar Codezeilen php erfüllen kann.Ich habe in meinem Blog, welches mehr als CMS aufgebaut ist einen Featured-Artikel. Allerdings binde ich den über einen Tag und nicht mehr über eine Kategorie ein, da die Kategorie ab sofort bei mir im Permalink mit abgebildet wird und jeder Artikel nun auch nur noch 1 Kategorie zugeordnet ist.
Unterhalb des Featured kommen wie gewohnt Kategorien mit dem jeweils neuesten Artikel als Excerpt und danach noch eine Liste mit drei weiteren Artikel nur als Titel.
Ich hatte schon vorher das Problem, dass ich nicht wollte, dass der Featured auch in den Kategorien auf der Startseite erscheint (damals habe ich dann nur die Featured-Kategorie gewählt und erst beim Erstellen eines weiteren Featured den Artikel dann der endgültigen Kategorie hinzugefügt).
Nachteil war, dass der Artikel daher erst nach Tagen in die entprechende endgültige Kategorie kam und man zudem immer dran denken musste.
Nach der ganz am Anfang beschriebenen Umstellung Kategorie2Tag und Permalinkänderung kann ich ja so nicht mehr verfahren. Also bräuchte ich einen Codeschnipsel, den ich mit in die query_posts einbauen kann.
Ein Auszug aus dem "Kategorienblock" auf der Startseite (davon gibt es dann 8 Stück oder so ...)
PHP
Alles anzeigen<?php $display_categories = array(12); foreach ($display_categories as $category) { ?> <?php query_posts("showposts=1&cat=$category"); $wp_query->is_category = false; $wp_query->is_archive = false; $wp_query->is_home = true; ?> <h3><a href="<?php echo get_category_link($category);?>"> <?php single_cat_title(); ?></a></h3> <?php while (have_posts()) : the_post(); ?> <h2><a href="<?php the_permalink() ?>" class="title" rel="bookmark"> <?php the_title(); ?></a></h2> <?php the_excerpt() ; ?>[ <?php endwhile; ?> <?php } ?>Die benötigte Funktion würde ich mal wie folgt beschreiben:
Zeige den letzten Artikel aus der Kategorie A, ausser er ist der letzte ALLER Artikel (der neueste Artikel), der mit dem Tag XYZ gepostet wurde - dann mache ein Offset
Damit es verständlicher wird, hier die URL zum Angucken: Man sieht den Featured eben auch unten in der Kategorie: brasilblog Magazin - Nachrichten & Reportagen live aus Brasilien
(Sofern es für mein Problem eine Lösung geben sollte, sehe ich schon das nächste: Die Liste unterhalb der Kategorie läuft ja per Offset. Wenn der Featured ausgeblendet wird, wird ja Artikel 2 als Excerpt abgebildet und dann müssten in der Liste nicht Artikel 2-4 sondern 3-5 erscheinen).
Jeder Lösungsansatz, jede Idee ist willkommen. Ich denke, man muss ein wenig um die Ecke denken, aber es will mir heute nicht gelingen. :-D
Danke für eure Rückmeldungen!
-
Nochmals Danke. Du bist schneller als der Schall.
Werden max. 2 Kategorien werden, die als Feed bereitstellen will, da passt deine Lösung optimal.
:-D