Speichern eines Arrays in Advanced Custom Fields WordPress

Lesezeit: 4 Minuten

Ich benutze die ACF-Plugin für WordPress. Ich poste programmgesteuert über mein Design in einem benutzerdefinierten Beitragstyp. Jetzt dachte ich, ich könnte ganz einfach eine Reihe von Elementen in einem benutzerdefinierten Feld speichern, aber wenn ich es versuche, wird nichts eingegeben. Ich bekomme einfach diesen Fehler, wenn ich den Beitragsbildschirm im Admin-Bereich überprüfe:

Warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/lukeseag/public_html/spidr-wp/wp-content/plugins/advanced-custom-fields/core/fields/text.php on line 127

Jetzt werfe ich dies irgendwie nach draußen, um Vorschläge zu erhalten, wie ich dieses Problem lösen kann.

Um etwas Kontext zu geben, speichere ich programmgesteuert die Dateneingabe eines Benutzers und erstelle damit einen Beitrag. Viele der Daten sind einfache Zeichenfolgen und Zahlen, die jeweils über ein eigenes benutzerdefiniertes Feld verfügen können.

Aber ich habe eine unbekannte Anzahl von text strings und URL's (mit jeweils einer ID-Nummer), die ebenfalls über diese Seite kommen und mit demselben Beitrag verknüpft werden müssen. Ich muss in der Lage sein, jeden Satz auszugeben text string und URL in ihre eigene div auf der single.php Seite posten. Nun, idealerweise würden diese Text/URL-Paare in einem einzigen Array gespeichert, damit ich das Array einfach durchlaufen und die Daten ausgeben kann, aber es sieht so aus, als ob ACF dies nicht zulassen möchte?

Irgendwelche Vorschläge, wie ich diese Daten speichern und dann einfach auf die ausgeben kann single.php Seite? Jeder Ergebnissatz hat eine ID (Nummer), text string und url.

Vielen Dank!

  • Zeigen Sie den Code an, der diesen Fehler erzeugt.

    – Brasilo

    27. April 2013 um 2:07 Uhr

Das ist genau der Grund für all die "frameworks" sind normalerweise more pain than gain. Sie sind so konzipiert, dass sie für die Faulen flexibel aussehen, aber dann erweisen sie sich in einem realen Fall-Szenario immer als nutzlos, das etwas komplexer ist als alles, was ohne sie tatsächlich leicht zu erreichen wäre.

Jedenfalls zu deiner Frage.

Das Problem ist, dass Sie ein Array anstelle eines Strings übergeben. Ich werde nicht auf das Debuggen des Plugins eingehen, und sowieso werden mehr Code und Informationen benötigt, also werde ich Ihnen nur EINE mögliche und einfache Lösung geben, und das ist, ein pseudo-array string so:

'ID|URL|STRING'

Beachten Sie, dass das Trennzeichen (|) nur ein Beispiel ist, Sie könnten ( , ) ( : ) ( # ) oder Wasauchimmer.

mit anderen Worten :

$url="http://myurl.url/something";
$id = 35;
$string = 'my string';

$pseudo_r = $id . '|' . $url .  '|' . $string . '|'; // results in 'ID|URL|STRING';

oder Sie können die verwenden implode() Funktion

 $pseudo_r = array(
       "url" => $url,
       "id" => $id ,
       "string" => $string
       );

$pseudo_r = implode("|", $pseudo_r); // gives a string

und übergeben Sie es als Zeichenfolge, mit der Sie es später zerlegen können explode() so:

$pseudo_r = explode( '|', $pseudo_r ); // gives back the original array

(Bitte beachten Sie, dass jetzt das Array ist NON ASSOCIATIVE mehr . )

Nun, da Sie erwähnt haben, dass jeder von denen ein ist setkönnen Sie dasselbe Pseudo-Array aus den Mengen zusammensetzen, indem Sie ein anderes Trennzeichen verwenden.

Das könnte für Sie funktionieren, aber essentially it is wrong .

warum ist es falsch?

Weil dies ein generisches und etwas ist hackisch Lösung, die Ihren Datentyp tatsächlich ignoriert. Sie mischen 3 Arten von Datentypen, URL , ID und ein STRING . Alle 3 (sollten) haben potenziell unterschiedliche Validierungsschemata, und ich vermute, dass die htmlspecialchars() Teil gehören zu den URL.

Eine andere Lösung besteht darin, einfach das richtige Datenfeld in den ACF-Einstellungen zu finden oder für jedes ein anderes Feld zu verwenden und es dann einfach zusammen anzuzeigen, ebenfalls mit dem implode() und explode() Funktionen.

  • Der einzige Gedanke, den Sie wirklich in Betracht ziehen sollten, ist, diese Frameworks (nämlich ACF) nicht zu verwenden, wenn Sie Ihre Programmierkenntnisse verbessern möchten … und BTW – Sieht mein Avatar wirklich so männlich aus? 🙂

    – Obmerk Kronen

    30. April 2013 um 2:38 Uhr


  • Ja, ich habe tatsächlich beschlossen, eine benutzerdefinierte DB-Tabelle zu erstellen und die Ergebnisse dorthin zu senden. Auf diese Weise kann ich sie genau so haben, wie ich sie haben möchte, ohne ganz “hacky” sein zu müssen. haha, ich habe deinen Avatar bemerkt! Aber es war 10 Minuten, nachdem ich den Kommentar gepostet hatte, also ließ ich mich nicht bearbeiten, mein Fehler! 😛

    – Lukas

    30. April 2013 um 14:05 Uhr

Sie können das Array mit json_encode($your_array) und json_decode() speichern, um es wiederherzustellen. Dies funktioniert auch für assoziative Arrays.

  • Hallo @Mirko … Ich bin daran interessiert, mehr über Ihre Lösung zu erfahren. Glauben Sie, Sie können einen Code mit Ihrer Antwort posten, um zu sehen, wie das funktionieren könnte? Vielen Dank.

    – schwefelhaltig

    8. August 2013 um 2:36 Uhr

1054150cookie-checkSpeichern eines Arrays in Advanced Custom Fields WordPress

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy