Plugin mit Shortcode Definition, da steckt ein Wurm drin

  • Hi,

    Seit kurzem arbeite ich mit Wordpress und auch mit php. Nun wollte ich, um zu lernen damit umzugehen, ein eigenes Plugin schreiben, dass mir mithilfe eines Shortcodes auf einer Seite eine Liste mit einer gewissen Anzahl Beiträgen in zufälliger Reihenfolge anzeigt.

    PHP
    <?php//[zufaellige_liste cat_id="integer" anzahl_posts="integer"]
    function zufaellige_liste_func( $atts ){    $ints = shortcode_atts( array(        'cat_id' => 'cat_id',        'anzahl_posts' => 'anzahl_posts',    ), $atts );
        return liste_output( $ints );}
        function liste_output( $ints ) {        // Widget output        global $wpdb;?>        <?php query_posts("cat=" . $ints['cat_id'] . "&showposts=" . $ints['anzahl_posts'] . "&orderby=rand"); ?>        <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>        <ul style="list-style-type:none">            <li>                <h4><?php the_title(); ?></h4>                <?php the_content(); ?>                <hr>            </li>        </ul>         <?php endwhile; else: ?><?php endif; ?>
    <?php            }
    add_shortcode('zufaellige_liste', 'zufaellige_liste_func');?>

    Soweit bin ich schon einmal. Nur leider macht das Ganze mehr als es soll, denn nach der Liste (die ich schonmal hinbekomme) erscheinen die restlichen Beiträge einzelnd in zufälliger Reihenfolge. und genau das soll ja nicht so sein. Leider weiß ich jetzt auch nicht mehr weiter.

    Kann mir vlt jemand helfen?
    Gruß Windy

    • 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

  • Formatiere bitte den Code richtig, damit man ihn lesen kann und wird die überflüssigen PHP Tags raus. ?> <? macht keinen Sinn.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Nach so kurzer Zeit kann man nichts mehr bearbeiten? Wie fies.... oder war ich zu blöd den Knopf zu finden?

    Besser so? Wenn ich noch irgendwo irgendwas falsch gemacht habe, seid nachsichtig. Bin Anfänger :)

    Einmal editiert, zuletzt von Windy (20. März 2015 um 20:18)

  • Besser so? Wenn ich noch irgendwo irgendwas falsch gemacht habe, seid nachsichtig. Bin Anfänger :)

    Also der Code ist immer noch Kraut und Rüben. Es gibt Forenteilnehmer die sich jetzt die Arbeit machen und den Code so formatieren wie sich das gehört um ihn zu lesen und zu verstehen woher Dein Problem kommt. Die meisten aber nutzen die Zeit um 3 anderen Fragenden zu helfen. Und gerade ein Anfänger muss zuerst einmal eine Sprachsyntax lernen, dazu gehört das Formatieren.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • So zum dritten... und jetzt klappt's endlich...

  • z.B. gibt es den Parameter showposts schon seit WP2.1 nicht mehr: http://codex.wordpress.org/Class_Referenc…tion_Parameters

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • Du gibst die Posts ja bereits in der Funktion liste_output() mit echo aus und dann gibts Du sie nochmal via return zurück. Anstatt einer echo Ausgabe musst Du einen String erstellen ( $output .= anstatt echo ), den Du mit return zurück gibst.

    Das ganz passt im Übrigen in eine einzige Funktion. Die query_posts Argument gehören übersichtlich in ein array und die Syntax Deiner if bzw. while Konstruktion ist für Templates (html code) gedacht, gehört aber nicht in PHP Code

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Danke für die Tipps,
    Ich bastel mal ein wenig rum... wahrscheinlich mache ich das morgen. ich melde mich wenn ich es hinbekomme... oder auch nicht. Auf jeden Fall Danke.

  • Danke nochmal für die Tipps, bin jetzt ein wenig weiter gekommen:

    Jetzt bekomme ich zwar die Liste, aber leider immer mit 10 Posts, obwohl ich mittels "anzahl_posts", wie der Name schon sagt, die Anzahl der Posts in dieser Liste darstellen will.
    Könnt ihr mir sagen wo ich jetzt Mist gebaut habe?

  • auf den allerersten Blick:

    da fehlt ein "s" => [COLOR=#000000][COLOR=#DD0000]post_per_page
    posts_per_page[/COLOR][/COLOR]

    https://codex.wordpress.org/Class_Referenc…tion_Parameters

  • Es muss ja auch posts_per_page heißen ;-)

    PS.: Monikas Antwort stand auf der nächsten Seite :oops:

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

Jetzt mitmachen!

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