verschachtelte Arrays in einfache umwandeln

  • Hi Wordpressteam,

    ich sitze gerade an meiner lokalen Wordpress-Seite und versuche mit PHP Datenbankeinträge abzufragen und da hab' ich ein Problem, vermutlich weil ein waschechter Noob bin^^.

    Aber zuerst: Was ich überhaupt erreichen möchte.

    Ich habe ein Menü in der Sidebar, was ganz schlicht erstmal so aufgebaut ist:

    HTML
    <div class="supermenue" id="post">                         
             <p class="supermenue">Artikel</p>    
       </div>  
       <div class="supermenue" id="page">
             <p class="supermenue">Seiten</p> 
       </div>

    Jetzt möchte ich einen Code schreiben, der überprüft, ob überhaupt veröffentliche Artikel bzw. veröffentliche Seiten in der Datenbank vorhanden sind. Wenn "TRUE" soll er das entsprechende Menue einblenden, wenn "FALSE" soll er das entsprechende Menü ausblenden.

    Um das zu bewerkstelligen muss ich eine Datenbankabfrage mit php schreiben und da ist eben der Harken...Leider

    Ich habe schon den SQL-Code fertig geschrieben, nun habe ich das Problem dieses in ein php-tauglichen Array zu umzusetzten.

    SQL
    SELECT DISTINCT post_type 
    FROM wp_posts 
    WHERE post_status = 'publish'

    Wenn ich das in die SQL Komandozeile von PhpMyadmin einfüge funktioniert das einwandfrei.

    Nun will ich das ja in meinen Php-code einfügen, damit der Webserver den Array, der mir da ausgegeben wird, weiterverarbeiten kann und zwar beispielsweise im folgenden Format:

    Code
    Array ( [0] => page      
            [1] => post  
            )

    Und mein armesliger Versuch in Php sieht so aus:

    PHP
    <?php
    $published_posts = $wpdb->get_results(
        "SELECT DISTINCT post_type 
         FROM   $wpdb->posts 
         WHERE  post_status = 'publish'", 
         ARRAY_A);
    print_r($published_posts);
    ?>

    Die Ausgabe aus dem PHP-CODE lautet dann leider:

    Code
    Array ( [0] => Array ([post_type] => page)      
            [1] => Array ([post_type] => post)  
            )

    Danach wollte ich mit in_array("post/page",$published_posts); weiterarbeiten, um zu prüfen, ob in dem Array "post" oder "page" als Elemente vorhanden sind und demenstprechend weitere Anweisungen folgen lassen.

    Ich möchte nun von den Profis wissen, ob es vielleicht einen viel einfacheren PHP-Code für meine Zwecke gibt oder wie ich dieses Array vielleicht in mein gewünschtes Array-Format umwandeln lassen kann oder jedenfalls ein Tip, der mir da weiterhelfen könnte.

    Ich hoffe, ich konnte Euch mein Probleme verständlich darlegen.

    Dank im Voraus für Eure Antwort!

    Gr4ck

    Einmal editiert, zuletzt von gr4ck (30. Oktober 2010 um 16:27)

    • 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

  • Zitat

    Um das zu bewerkstelligen muss ich eine Datenbankabfrage mit php schreiben

    Ich denke, das ist die Stelle, wo Du gedanklich falsch abgebogen bist. ;-) Manuelle SQL-Queries abzusetzen sollte immer ein allerletztes Mittel sein. Wann immer möglich solltest Du mit der WP-API arbeiten, das hält länger und birgt weniger Gefahren.

    In Deinem Fall solltest Du Dir Funktionen wie query_posts anschauen, siehe dazu den Codex: http://codex.wordpress.org/Function_Reference/query_posts

  • Hi,
    Danke für die Antwort,

    ich habe es mal mit query_post(); mal versucht!

    PHP
    <?php
    $a = query_posts('post_status=publish');
    print_r($a);
    ?>

    So mein $a enthält jetzt sozusagen alle Daten der Rows, in dennen der post_status=publish ist.
    Und mein Problem besteht weiterhin... anscheint weil ich mit arrays eher wenig auskenne.
    Aber hier erstmal das, was mir der Browser ausgibt:

    Code
    Array([0]=>stdClass Object(...[page_status]=publish [post_type]=>post ...)
          [1]=>stdClass Object(...[page_status]=publish [post_type]=>page ...)
           ...
          [3]=>stdClass Object(...[page_status]=publish [post_type]=>post ...)
         )

    Aber nun möchte ich der query_post(); i-welche parameter geben, die mir mein gewünschtes Array-Format ausgibt oder möchte aus $a mein gewünschtes Array-Format erzeugen lassen.
    Es würde mir auch reichen, zu wissen, wie ich aus $a den Wert von [post_type] in eine Variable einlesen lassen kann. Doch wie mach ich das?

    Hoffe mal Euch nervt mein Low-Level-Knowledge nicht....... :-(.

    Dank im Voraus,

    Gr4ck

  • Gelöst: Verschachtelte Arrays in einfache umwandeln

    Hi WP-Team,

    so ich habe mein Problem gelöst!!!
    Und damit andere, die vielleicht den gleichen Gedankengang hatten wie ich, hier nicht auf der Strecke bleiben, will die Lösung mal hier aufschreiben:

    Ich habe einfach mit Hilfe von
    [LEFT]

    PHP
    wp_count_posts('post')->publish;

    [/LEFT]
    mir ausgeben lassen wie oft ein Eintrag mit post_type=post gibt, der den post_status= publish hat. Analog dazu habe ich das dann auch für post_type=page geschrieben:
    [LEFT]

    PHP
    wp_count_posts('page')->publish

    [/LEFT]

    Anschließend ist es sehr simpel mit einer if-clause abzufragen, ob das gleich null ist...

    Man staunt wie einfach eigentlich WP funktioniert und das obwohl ich noob bin!!! :mrgreen::mrgreen:

    Danke für die Hilfe,

    Gr4ck

  • Freut mich, dass das geklappt hat. Schau im Zweifelsfall immer zuerst in den Codex nach brauchbaren Methoden, WP bietet schon sehr viel an API. Da kommt man relativ weit mit. ;-)

Jetzt mitmachen!

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