WP-Artikel in Homepage einbinden

  • Guten Tag,

    ich wollte vorher in meiner Seite eine PHP-Funktion einbauen, die mir meinen letzten WP-Artikel samt Link ausgibt bzw. einen Link mit dem Artikel-Namen zum Link. Nach einer kurzen Google-Suche fand ich eine [COLOR=#0066ff]gute Vorlage[/COLOR], die ich dann zu folgendem umgeändert habe:

    PHP
    <?php include("WordPress/wp-blog-header.php");
    query_posts('showposts=1'); ?>
    <span class="recent-posts">
    <?php while (have_posts()) : the_post(); ?>
    <span><a href="<?php the_permalink() ?>"><?php the_title(); ?> -- dBlog</a></span></br>
    <?php endwhile; ?>
    </span>

    PS: Das mit dem span-Tag vor und nach dem a-Tag hat seinen Sinn (CSS).

    Nun aber funktioniert das ganze nicht so, wie es soll.

    1. Es werden die letzten 3 Artikel ausgegeben (der Älteste unten).
    2. Es gibt einen Konflikt mit dem Count-Per-Day-Plugin.

    Code
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /users/dmanstrator/www/index.php:25) in
    /users/dmanstrator/www/WordPress/wp-content/plugins/count-per-day/counter-core.php on line 200
    
    
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/dmanstrator/www/index.php:25) in
    /users/dmanstrator/www/WordPress/wp-content/plugins/count-per-day/counter-core.php on line 200


    Ich weiß nicht, was ich jetzt machen soll. Habe schon probiert die Warning-Meldung auszuschalten [error_reporting(E_ALL^ E_WARNING);], ohne Erfolg und das Plugin will ich auch nicht löschen / deaktivieren.
    Außerdem verstehe ich nicht, warum mir meine letzten 3 Artikel ausgegeben werden.

    Bitte um Hilfe, vielen Dank.

    Gruß, DMan

    Einmal editiert, zuletzt von DManstrator (12. April 2014 um 14:15)

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Nach einer kurzen Google-Suche fand ich eine [COLOR=#0066ff]gute Vorlage[/COLOR],


    So ist es halt mit den guten Schnipseln, die man nach Jahren findet.
    [COLOR=#ff0000]showposts[/COLOR] ist deprecated und sollte nun langsam nicht mehr verwendet werden.

    Zusätzlich wirst Du wohl auch noch etwas falsch gespeichert haben, zumindest würde ich bei der Fehlermitteilung davon ausgehen. Also auf Leerzeichen oder HTML vor öffnenden PHP-Tags achten und im richtigen Editor mit UTF-8 ohne BOM speichern.

    Einmal editiert, zuletzt von Melewo (12. April 2014 um 16:34)

  • Du hast doch sogar schon den Hinweis wo genau der Output gestartet ist - da sollte es doch simpel sein das zu finden.

    Man kann die Realität ignorieren - aber nicht die Folgen der ignorierten Realität.

  • So ist es halt mit den guten Schnipseln, die man nach Jahren findet.
    showposts ist deprecated und sollte nun langsam nicht mehr verwendet werden.


    Und was soll ich dann benutzen?


    Zusätzlich wirst Du wohl auch noch etwas falsch gespeichert haben, zumindest würde ich bei der Fehlermitteilung davon ausgehen. Also auf Leerzeichen oder HTML vor öffnenden PHP-Tags achten und im richtigen Editor mit UTF-8 ohne BOM speichern.


    Hab ich jetzt nicht gesehen, witzigerweiße wird der o.g. Error nurnoch 1 ausgegeben. Hab aber nicht direkt was dran geändert. Hab nur die wp-blog-head.php aufgerufen. Bei 'HTML vor öffnenden PHP-Tags' fällt mir nur die Zeile mit dem a-Tag ein.


    Du hast doch sogar schon den Hinweis wo genau der Output gestartet ist - da sollte es doch simpel sein das zu finden.


    Ja, Zeile 25, da lande ich hier:

    PHP
    <a href="/WordPress">WordPress-Blog</a><br /><?php echo '

    Weiter geht das so:

    PHP
    <a href="http://download.'.GetServerLink().'">Download-Archiv</a><br />
            <a href="http://survey.'.GetServerLink().'">Umfragen</a><br />
            <a href="http://upload.'.GetServerLink().'">Filehosting</a><br />
            <a href="http://challenge.'.GetServerLink().'">Challenge</a><br />' ?>
            <a href="/music.php">Meine Charts</a></div><br /><br />

    Wüsste nicht, was diese Zeile da oben ausmacht.


    PS: Danke für eure Antworten. :)

    Einmal editiert, zuletzt von DManstrator (12. April 2014 um 21:35)

  • Deine Fehlermeldung bedeutet dass der Header nichtmehr modifiziert werden kann weil bereits irgendeine Ausgabe erfolgte - und ein echo ist eine Ausgabe, also ist genau das der Knackpunkt. Du könntest eventuell versuchen die Reihenfolge des einbindens zu ändern: sobald der modifizierte Header gesendet ist kann die Ausgabe erfolgen, dann ists kein Prolem mehr.

    Bezüglich der Funktion: ich nutze dafür etwas wie

    PHP
    $posts = get_posts(array('posts_per_page' => 1));

    - das sollte Dir den aktuellsten Post in die Variable packen.

    Noch ne Frage: Du beendest den PHP-Bereich VOR dem letzten Link? Ist das Absicht? Mir kommt das so etwas seltsam vor.

    Man kann die Realität ignorieren - aber nicht die Folgen der ignorierten Realität.

    Einmal editiert, zuletzt von Nevery (12. April 2014 um 21:39)

  • Hey Nevery,

    danke für die schnelle Antwort.

    Du könntest eventuell versuchen die Reihenfolge des einbindens zu ändern: sobald der modifizierte Header gesendet ist kann die Ausgabe erfolgen, dann ists kein Prolem mehr.

    Das ist meines Wissens nach unmöglich, da zuerst die Links zu den Seiten und erst dann der letzte WP-Artikel aufgelistet werden soll.

    PS: In den Zeilen 10 - 17 ist auch ne PHP-Schleife, aber nur eine Funktion (die GetServerLink-Funktion). Egal?

    Bezüglich der Funktion: ich nutze dafür etwas wie

    PHP
    $posts = get_posts(array('posts_per_page' => 1));

    - das sollte Dir den aktuellsten Post in die Variable packen.

    Soll dann also am Ende so aussehen?:

    PHP
    <?php include("WordPress/wp-blog-header.php");
    $posts = get_posts(array('posts_per_page' => 1));
    query_posts($posts); ?>
    ...

    Noch ne Frage: Du beendest den PHP-Bereich VOR dem letzten Link? Ist das Absicht?


    Ja. Die 4 Links darüber brauchen ja die GetServerLink-Funktion, der Letzte nicht.


    Nochmal Danke für die schnelle Antwort.

    Gruß, DMan

  • Das ist meines Wissens nach unmöglich, da zuerst die Links zu den Seiten und erst dann der letzte WP-Artikel aufgelistet werden soll.

    Code
    Warning: ... (output started at /users/dmanstrator/www/index.php:25) ...


    Das ist doch nicht die Index von einem Theme sondern die Index von der WordPress-Engine und die enthält nur 18 Zeilen. Ich habe da zwar zu Testzwecken auch schon gelegentlich Code untergebracht, aber auf so eine Idee in der PHP beenden zu wollen, um HTML einzufügen, auf so eine Idee kam ich bisher noch nicht. Möchte es auch nicht in einem Test nachstellen, nur um so eine Fehlermeldung zu produzieren.

    Wenn Du nicht einmal die Pfade Deiner wichtigsten Dateien kennst, solltest Du nicht versuchen deren Code zu verändern oder zu ergänzen.

  • Das ist doch nicht die Index von einem Theme sondern die Index von der WordPress-Engine


    Ups... guter Hinweis, habe ich glatt übersehen. Nein, da sollte man wirklich nicht irgendwas einfach so reinschreiben.

    DMan, beschränke Dich doch lieber auf Änderungen innerhalb des verwendeten Themes, dann sollten solche Probleme auch nicht auftreten. Bezüglich Deiner Frage wie die Funktion dann zu verwenden ist - ich pflege das in etwa so einzusetzen:


    - bei mir eben mit den letzten 3, aber das kann man natürlich auch mit nur einem so machen - in dem Fall kannst Du das HTML drumherum was bei mir dazu dient die drei News zusammenzuhalten sicherlich auch weglassen.

    Man kann die Realität ignorieren - aber nicht die Folgen der ignorierten Realität.

    Einmal editiert, zuletzt von Nevery (13. April 2014 um 10:12)

  • Das ist doch nicht die Index von einem Theme sondern die Index von der WordPress-Engine

    Nein, das ist die Index meiner Homepage.
    .de/index.php, nicht .de/WordPress/index.php



    Soll dann also am Ende so aussehen?:

    PHP
    <?php include("WordPress/wp-blog-header.php");
    $posts = get_posts(array('posts_per_page' => 1));
    query_posts($posts); ?>
    ...

    Hab das gestern mal getestet, es wurden alle Artikel aufgelistet.


    Edit: Das Warning ist weg, hab einfach das Include nach ganz oben gesetzt. (facepalm)

    Einmal editiert, zuletzt von DManstrator (13. April 2014 um 12:30)

  • Wie gesagt, ich würde es auch nicht über query_posts machen - wozu auch, der eine Post den Du haben willst sitzt dann schon in dem Array, Verwendung siehe oben ;)

    Man kann die Realität ignorieren - aber nicht die Folgen der ignorierten Realität.

  • .de/index.php, nicht .de/WordPress/index.php


    Das ist Bullshit, was Du schreibst, weil die /www/index.php keine 25 Zeilen hat, sondern nur 18 und der Serverpfad gemeint ist und nicht die URL, egal wie die URL sich schreibt.

    ...(output started at /users/dmanstrator/www/index.php:25) ...

    Wenn sich die Fehlermeldung auf die index vom Theme bezogen hätte, dann hätte die Fehlermeldung in etwa so aussehen müssen bei der URL de/WordPress/index.php:

    Zitat

    .../www/WordPress/wp-content/name_des_theme/index.php

    Einmal editiert, zuletzt von Melewo (13. April 2014 um 12:58)

  • PHP
    <?php include("WordPress/wp-blog-header.php");


    Und das kommt mir genauso wie Bullshit vor, da die '/wp-blog-header.php' eigentlich bereits in der index von WP geladen wird

    index.php von WP:

    PHP
    /** Loads the WordPress Environment and Template */
    require( dirname( __FILE__ ) . '/wp-blog-header.php' );

    und nicht in der index vom Theme, was völlig über wäre, da die '/wp-blog-header.php' weitere Dateien mit require_once nachladet,

    wp-blog-header.php:


    was bedeutet, dass diese Dateien, da sie bereits von der index von WP geladen werden, ohne kein zweites Mal von einer Theme-Datei geladen werden, dafür sorgt ja das once.

    In den Theme-Dateien wird eigentlich die Funktion

    get_header();

    verwendet, die in der Datei general-template.php definiert wird.

    Meiner Meinung nach hast Du einfach nur die index.php von WP mit der index.php vom Theme verwechselt und bei den Fehlermitteilungen ebenso.

    Einmal editiert, zuletzt von Melewo (13. April 2014 um 13:31)

  • Das ist Bullshit, was Du schreibst, weil die /www/index.php keine 25 Zeilen hat, sondern nur 18 und der Serverpfad gemeint ist und nicht die URL, egal wie die URL sich schreibt.

    Und das kommt mir genauso wie Bullshit vor, da die '/wp-blog-header.php' eigentlich bereits in der index von WP geladen wird

    Erkundige dich doch bitte, wie das mit den Pfaden bei bPlaced abläuft, vielen Dank.


    PS: Hab jetzt 2 verschiedene PHP-Codes probier's:

    1.

    PHP
    <?php $posts = get_posts(array('posts_per_page' => 1)); ?>
    <span class = "recent-posts">
    <?php while (have_posts()) : the_post(); ?>
    <span><a href="<?php the_permalink() ?>"><?php the_title(); ?> – dBlog</a></span></br>
    <?php endwhile; ?>
    </span>

    Ergebnis:
    «Artikelname» – dBlog (CSS-span-Tag wird nur hier beachtet)
    – dBlog
    – dBlog
    [...] (Das geht solange weiter, wie die Anzahl an Artikeln existiert)

    Link zu «Artikelname» funktioniert korrekt.


    2. (Deine Vorlage umgeändert)

    Ergebnis:
    Letzter Artikel + '– dBlog', nur der Link geht nicht bzw. führt zur Hauptseite (lt. DOM:

    PHP
    <div class="recent-posts"><span><a href="">«Artikelname» – dBlog</a></span><br></div>

    ). Idee?


    PS: Die Fehler sind noch da. Beim Laden der Seite wird erst ne leere Seite mit den [COLOR=#0066ff]2 Warnings[/COLOR] angezeigt und danach wird die Seite ganz normal und ohne Fehler angezeigt.

    Einmal editiert, zuletzt von DManstrator (13. April 2014 um 13:45)

  • $value->post_permalink dürfte es nicht geben, probiers mit $value->guid - wenn das nicht funktionieren sollte lass Dir den gesamten Post per print_r($value); ausgeben und schau wo der Link drin steht.

    Alternativ: http://codex.wordpress.org/Function_Reference/get_permalink ;)

    Man kann die Realität ignorieren - aber nicht die Folgen der ignorierten Realität.

    Einmal editiert, zuletzt von Nevery (13. April 2014 um 14:08)

  • Erkundige dich doch bitte, wie das mit den Pfaden bei bPlaced abläuft, vielen Dank.


    Das siehst Du doch in den Fehlermitteilungen, PHP lügt selten.

    Radikale Methode:

    Fehler in Index vom Theme und darunter in index von WP:

    C:\xampp\htdocs\wordtheme\wp-content\themes\exempel\index.php
    C:\xampp\htdocs\wordtheme\index.php

  • Hey Nevery,

    danke für die Lösung.

    $value->guid hat funktioniert, es hat den ?p=X-Link ausgegeben. <a href="'.$value->get_permalink.'"> hat zu nichts geführt.
    Gibt's ne Methode, um den genauen Link (YYYY/MM/DD/«Artikel-name») rauszubekommen?

    PS: Die Warnings nerven wirklich und error_reporting(0); und was es noch alles gibt funktioniert nicht. Gibt's da ne Lösung, das abzuschalten oder zu beheben?

  • Hast Du's denn schon mit der get_permalink(id)-Methode probiert? Ich hab die Unterschiede grade nicht im Kopf und auch keine Lust es zu testen, wenn Deine Permalinkstruktur entsprechend ist könnte das klappen.

    Was die Fehler angeht: nur, wenn Du aufhörst an so früher Stelle etwas auszugeben oder der Header nachher nicht mehr modifiziert werden soll ;-)

    Man kann die Realität ignorieren - aber nicht die Folgen der ignorierten Realität.

  • Was die Fehler angeht: nur, wenn Du aufhörst an so früher Stelle etwas auszugeben oder der Header nachher nicht mehr modifiziert werden soll ;-)


    Meh. Wüsste nicht, wie ich das mit dem GetServerLink anders regeln könnte.

    Edit: Ich glaub, ich hab ne Idee. Wenn's geklappt hat sag ich Bescheid.


    Hier die Lösung:

    Einmal editiert, zuletzt von DManstrator (13. April 2014 um 15:30)

  • Hier die Lösung:

    PHP
    <?php include("WordPress/wp-blog-header.php"); ?>...


    Woher hast Du dieses Beispiel mit "WordPress/wp-blog-header.php"?
    Würde mich jetzt wirklich einmal interessieren. Kommt das so in uralten Beispielen vor oder auch in neueren?
    Und Fehler beseitigt man, statt diese verstecken zu wollen.

    Habe ich jetzt gerade als index.php und als single.php getestet, weil ich mir das Elend gar nicht mit ansehen kann:

    Gibt noch einige andere Varianten.

  • Noch ein zweites Beispiel, wobei have_posts eigentlich bereits true oder false liefert, jedoch zusätzlich noch abgefragt werden könnte, wie man es in vielen Beispielen sieht:

    https://codex.wordpress.org/Function_Reference/have_posts

    Bei Dir lohnt es sich aber nicht eine neues Objekt zu instanziieren, weil eigentlich alles bereits enthalten sein sollte. Es sollten sich auch genügend andere und vor allen neuere Beispiele bei WP finden lassen. Auf die Erklärung woher Du das hast,

    [COLOR=#000000][COLOR=#0000BB][/COLOR][COLOR=#007700]include([/COLOR][COLOR=#DD0000]"WordPress/wp-blog-header.php"[/COLOR][COLOR=#007700])[/COLOR][/COLOR]

    da warte ich wirklich.

    Einmal editiert, zuletzt von Melewo (13. April 2014 um 16:06)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!