PHP Fehler: Kategorie über Variable setzen

  • Hallo zusammen,


    Ich habe folgendes Anliegen, möchte mehrere Kategorien, welche über "str_replace" in die jeweilige ID umgewandelt werden als Kategorie für ein neuen Post setzen.

    Das Problem ist, dass wenn ich die Variable benutze, wird nur die erste ID verwendet, und nur die erste Kategorie gesetzt. (hoffenlich versteht ihr, was ich meine)


    Hier der Code, welcher funktioniert:

    Code
    wp_set_post_categories( $newpostid, array( 24, 25, 42 ), false );


    Es Funktioniert wie gewollt, "Action (id 24), Abenteuer(id 25), Sci-Fi(id 42)" werden als Kategorie gesetzt.


    Nur, sobald ich die Variable verwenden will, welche "24, 25, 42" ausgibt, wird nur die ID 24 (Aktion) als Kategorie gesetzt. Also nur die erste ID aus der Variable.


    Hier meine Umsetzung:

    Code
    $from = array('Action', 'Abenteuer', 'Sci-Fi');
            $to =   array('25', '24', '42');
            $post_cat_id = strtolower(str_replace($from, $to, $post_cat));  
            
            wp_set_post_categories( $newpostid, $post_cat_id, false );


    Vielen dank schonmal im vorraus.


    Lg

    • 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

  • Morgen
    Schaue dir mal das an http://php.net/manual/de/function.strtolower.php
    strtolower funktioniert nur mit Strings, d. h. das bei dir nur der erste Wert des Arrays abgearbeitet wird, und als String zurückgegeben wird.

    Aber überlege mal: du benötigst für wp_set_post_categories ein Array. Zusätzlich enthält deine variable $post_cat_id nach dem Ersetzen nur noch Zahlen, und selbige klein schreiben zu wollen ergibt irgendwie keinen Sinn.
    Mit anderen Worten: lass die Funktion strtolower einfach weg, dann sollte es auch funktionieren (vorausgesetzt $post_cat ist auch ein Array).
    LG, pixselig

    Einmal editiert, zuletzt von pixselig (25. Oktober 2014 um 07:21)

  • Hallo,

    Vielen dank für die Info, aber es funktioniert leider nicht wirklich, bekomme immernoch nur die erste id als Kategorie eingetragen.

    Hier mein gekürzter Code:

    Den ersten Wert, Action (ID 11) setzt er als Kategorie aber den rest nicht.


    Habe zum Testen ein kleines Beispiel gemacht:


    Hier ist die Ausgabe "11, 10, 28", welche soweit Richtig ist, so wie es in meinem Fall auch sein sollte.


    Nur "wp_set_post_categories( $newpostid, $post_cat_id, false );" übernimmt diese Ausgabe wohl nicht richtig.


    Das ist echt zum Verzweifeln.. :(


    LG

  • Guten Morgen
    Ich habe ja geschrieben, dass Voraussetzung ist, dass $post_cat ein Array ist, damit dann $post_cat_id auch ein Array ist.
    Bei dir ist das aber ein String, ergo ist $post_cat_id auch ein String, dass kannst du übrigens auch schön aber echo Ausgabe derselben sehen - > wäre die ein Array würdest du als Ausgabe nur "Array" und keine Werte bekommen.
    Also, du musst jetzt noch $post_cat ODER $post_cat_id in ein Array umwandeln, in PHP gibt es dafür die Funktion explode - > http://php.net/manual/de/function.explode.php
    LG, pixselig

  • Hallo,

    Super, vielen dank es hat geklappt :)

    Habe aber noch eine Sache, ich möchte von den gesetzten Kategorien, die 1. Kategorie mit link ausgeben.


    Hier der Code der so funktioniert, aber alle gesetzten Kategorien ausgibt:

    Zitat

    get_the_category_list( '', $parents, $newpostid )


    lg

  • PHP
    // get first element of the array '$post_cat_id'
    $category_id = $post_cat_id[0];
    
    
    // get the url from the category defined before
    $category_url = get_category_link( $category_id );

    LG, pixselig

    Einmal editiert, zuletzt von pixselig (28. Oktober 2014 um 12:34)

Jetzt mitmachen!

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