Beiträge von digdigger

    single.php:

    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.

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

    Der 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

    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:

    PHP
    [dlink url="http://domain.net/file.ext"]

    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 Reihe

    Achtung: 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.

    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.

    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.

    PHP
    <?php
    global $wp_query;
     $post_obj = $wp_query->get_queried_object();
     $post_id = $post_obj->ID;
     $auswahl = get_post_custom_values('auswahl',$post_id);
    if (!empty($auswahl)) include $auswahl[0];
    ?>

    Habe eine Lösung gefunden, die anscheinend auch funktioniert.

    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)

    PHP
    get_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:

    PHP
    get_header();
    $toppage = '123';  // ID der statischen Übersichtsseite


    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.

    PHP
    function 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):

    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:

    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

    PHP
    function yte_check($the_content, $side=0) {
        if(strpos($the_content, "httpv")!==FALSE  ) {
            
            $char_codes = array('×','&#8211 ;'); // 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 ...)

    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!