Beiträge von christianschenk

    Zitat

    Cannot modify header information - headers already sent

    Dies erscheint immer dann, wenn bereits eine Ausgabe erfolgt ist, nun aber noch versucht wird etwas am HTTP-Header zu ändern. Dieser wurde natürlich schon längst gesendet, da die Ausgabe (bspw. irgendein Text auf der Webseite) transferiert werden musste und die Übertragung der Daten bereits begonnen hat.

    Dies lässt sich lösen, in dem man eben keine Ausgabe macht, bevor etwas am HTTP-Header verändert wird. Achte also bitte darauf, dass in der Datei "limit-archive-widget.php" weder am Anfang noch am Ende Leerzeichen/zeilen enthalten sind. Zwar sollte dies mit ziemlicher Sicherheit das Problem lösen, aber falls nicht, versuch mal kurz den Plugin "Wassup" zu deaktivieren.

    Zitat

    gesagt nur leider weiß ich nicht wie ich dass anstellen soll.


    Kopiere den folgenden Code in eine Datei namens "limit-archive-widget.php", die du unter "wp-content/plugins" ablegst. Pass bitte auf, dass vor "<?php" und nach "?>" keine Leerzeichen/zeilen eingefügt werden.

    Nachdem du den Plugin aktiviert hast, sollte das Archiv-Widget nur noch fünf Einträge anzeigen; die Anzahl lässt sich über "LAW_LIMIT" im Code des Plugins steuern.

    Unterhalb des Archiv-Widget kannst du nun ein einfaches Text-Widget in der Sidebar platzieren und folgenden Link eintragen:

    HTML
    <a href="?archive_more">Mehr...</a>


    Wird dieser Link nun angeklickt, werden alle Einträge des Archivs angezeigt. Der entsprechende Parametername ("LAW_QUERY_STRING") kann ebenfalls im Code des Plugins angepasst werden.

    Es bleibt die Frage, was du von dem DKP-System erwartest. Wenn der Funktionsumfang in ein paar Tagen herunter programmiert wäre, würde ich dir empfehlen, dass eben zu machen. Zumal es sowas für WordPress noch nicht gibt, findest du vielleicht Interessierte, die dir dabei helfen.

    Soweit ich weiß liegt es am Plugin-Autor dem Benutzer eine Möglichkeit an die Hand zu geben, mit deren Hilfe festgelegt werden kann, auf welchen Seiten der Plugin bspw. JavaScript oder CSS einbinden soll. Tatsächlich wird dies aber in den wenigsten Fällen umgesetzt. Dies führt zusätzlich zu unschönen Inkompatibilitäten zwischen Plugins, da sich z.B. betimmte JavaScript-Frameworks oft nicht mit einander vertragen.

    Hat man nun gefallen an Googles Page Speed oder Yahoos YSlow gefunden, kann man schnell verzweifeln, da viel JavaScript, CSS, Bilder, etc. unnützerweise geladen wird. Oft hilft hier nur das Ändern der Plugins oder Themes, um eine Seite flott zu machen; benutzerdefinierte Felder oder das Vergleichen der aktuellen URL mit einer vorgegebenen Menge an URL-Pfaden sind hier hilfreich.

    Zusätzlich würde ich dir empfehlen die Autoren deiner Plugins anzuschreiben und darum zu bitten entsprechende Möglichkeiten vorzusehen. Idealerweise erkennt der Plugin natürlich selbst, ob er auf der aktuellen Seite genutzt wird oder nicht; in Fällen in denen das nicht möglich sein sollte, sollte der Blogger gefragt werden.

    Ich hatte in der Datei "wp-includes/feed.php" folgendes gefunden:

    PHP
    function get_comment_author_rss() {
        return apply_filters('comment_author_rss', get_comment_author() );
    }


    Nun war ich davon ausgegangen, dass diese Funktion beim erstellen des Feeds genutzt würde und man mit einem einfachen Plugin den Autor zumindest leer setzen könnte:

    PHP
    if (function_exists('add_filter'))
      add_filter('comment_author_rss', create_function('$a', 'return "";'));

    Da aber o.g. Funktion gar nicht genutzt wird, sondern einfach "the_author" aufgerufen wird, hätte das ohnehin nicht funktioniert.

    Vielmehr willst du sowas in einen Plugin schreiben:

    PHP
    if (function_exists('add_filter')) 
        if (strpos($_SERVER['REQUEST_URI'], '/feed') !== false)
            add_filter('the_author', create_function('$a', 'return "";'));


    Mit "is_feed" hat es nicht geklappt, daher werte ich die URI aus; bei dir entsprechend anpassen, falls es nicht "/feed" ist.

    Nebenbei: der Feed bleibt trotz leerem creator-Element valid.

    Ich gehe mal davon aus, dass du nicht das Archiv-Widget nutzt, dass bei WordPress dabei ist bzw. das man in eine Sidebar zieht. Dort gibt es in der Widget-Konfiguration standardmäßig nämlich keine Möglichkeit die Anzahl der angezeigten Monate zu beeinflussen. Oder hast du den Filter "widget_archives_args" genutzt und den Parameter "limit" hinzugefügt? In dem Fall solltest du einfach unter dem Archiv einen "More"-Link anzeigen, der einen bestimmten Parameter an die URL hängt (bspw. nolimit_archive=1). Beim Einfügen des "limit" Parameters prüfst du nun, ob genannter Parameter in der URL vorkommt ("isset($_REQUEST['nolimit_archive'])") und fügst dann eben kein Limit ein. Klickt man nun auf den More-Link werden alle Monate im Archiv angezeigt.

    Na gut, ich habe eben mal für dich gesucht, aber nichts gefunden. Ich würde dir empfehlen eine vorhandene Software (wie du sagtest bspw. EQDKP) in deine WordPress-Seite zu integrieren. Vielleicht einfach mit einem iFrame?

    Da ich mich mit DKP-Systemen aber nicht genau auskenne, kann ich nichts zum Aufwand sagen, sowas mit WordPress zu verheiraten.

    Sofern dein Theme eine Datei 404.php hat, kannst du dort einfach mit PHP eine Mail an dich schicken. Folgendes in der Datei einfügen:

    PHP
    <?php
    mail('MP387@domain.de', 'Wiedermal ein 404...', 'Wir hatten einen 404 auf '.$_SERVER['REQUEST_URI'], 'From: MP387 <MP387@domain.de>');
    ?>

    Ob es dazu auch entsprechende Plugins gibt, weiß ich nicht. Pass aber mit solchen Lösungen auf, da du sonst vielleicht eines Tages mit einem überquellenden Postfach dastehst.

    Im angehängten ZIP befinden sich zwei Dateien: "functions.php" und "sidebar.php". Die im Theme vorhandenen Dateien damit überschreiben und schon kannst du Widgets in die neue "Sidebar 1" und "Sidebar 2" bewegen.

    Wirklich hübsch kommen manche Widgets allerdings nicht rüber - der Text des Text-Widgets ist beispielsweise recht dunkel -, aber mit ein bisschen CSS bekommst du das in den Griff. Ich hoffe Stylesheets sind dir nicht allzu fremd...

    Vielleicht hast du in deinem Theme die Aufrufe für wp_head und wp_footer nicht drin. An diesen Stellen fügen Plugins beispielsweise JavaScript und CSS ein, das u.a. für ThickBox benötigt wird.

    Also konkret: in der header.php deines Themes innerhalb des head-Elements "<?php wp_head(); ?>" einfügen. Das gleiche Spiel in der footer.php mit "<?php wp_footer(); ?> irgendwo vor dem schließenden body-Element.

    In der Datei "comments.php" deines Themes sollte es einen Abschnitt geben, der in etwa so aussieht:

    PHP
    <?php
      if ('open' == $post-> comment_status) { ?>
      <?php if ( get_option('comment_registration') && !$user_ID ) { ?>
        <!-- Text in etwa:
             Du must eingeloggt sein, um Kommentare schreiben zu können -->
      <?php } else { ?>
        ...


    Möchtest du nun die Eingabefelder für Kommentare in einer bestimmten Kategorie nur noch für eingeloggte Benutzer anzeigen, muss das - in meinem Beispiel - zweite "if" angepasst werden. Hier hilft die Funktion "in_category".

    Da bei dir normalerweise immer kommentiert werden darf, brauchen wir die Abfrage nicht, ob ein Benutzer zum kommentieren registriert sein muss und schreiben die if-Anweisung so um:

    PHP
    <?php
      if ('open' == $post-> comment_status) { ?>
      <?php if (in_category(4711) and !$user_ID ) { ?>
        <!-- Hier wird sachlich diskutiert, also bitte einloggen -->
      <?php } else { ?>
        <!-- Kommentarfelder -->
      <?php } ?>
      ...


    Nun wäre nur noch die ID beim Funktionsaufruf "in_category" anzupassen und fortan müsste man zum kommentieren in dieser speziellen Kategorie angemeldet sein.

    Folgenden Code in einer Datei "neuester-beitrag.php" im Plugin-Verzeichnis ("wp-content/plugins") abspeichern:

    Nun auf deiner Seite den Shortcode "neuester_beitrag" mit einer Kategorie versorgen und das wars. Also für Kategorie 42 so:

    Code
    [neuester_beitrag cat=42]
    Das ist mein neuester Beitrag und ich wollte euch noch
    ein bisschen Text dazu blubbern...

    Alles klar?

    Richte für Domain B und C entsprechende Weiterleitungen auf die Seiten ein, die über Domain A zu erreichen sind. Dies geht entweder mit sog. Rewrite-Regeln im Apache-Webserver (oder einem Pendant in IIS), ganz einfach mit einem Meta-Refresh oder mit JavaScript.

    Vielleicht ist das alles aber auch schon zu viel des guten und dein Webhoster bietet bereits in einem Verwaltungsbereich eine Möglichkeit an Weiterleitungen einzurichten. Sofern das möglich ist, solltest du dies nutzen.

    Dennoch, hier die Vorgehensweisen.

    1. Kommt bei dir Apache zum Einsatz, fügst du in eine ".htaccess"-Datei für Domain B folgendes ein:

      Code
      RedirectMatch permanent ^.*$ http://www.domain-a.de/spezielle-seite/


      Für Domain C machst du das ähnlich und änderst nur die Zielseite entsprechend ab.

    2. Sofern du keine Weiterleitungen im Apache einrichten kannst, kann der Klassiker in einer index.html zum Einsatz kommen:

      HTML
      <html>
      <head>
      <meta http-equiv="refresh" content="0; URL=http://www.domain-a.de/spezielle-seite/">
      </head>
      <body>
      <a href="http://www.domain-a.de/spezielle-seite/">Sofern ihr Browser keine Weiterleitung unterstützt, bitte hier klicken.</a>
      </body>
      </html>


      Auch hier die Zielseite entsprechend anpassen.

    3. Letztlich ginge das auch noch mit JavaScript. Davon würde ich aber abraten.