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!
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 set
kö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.
Sie können das Array mit json_encode($your_array) und json_decode() speichern, um es wiederherzustellen. Dies funktioniert auch für assoziative Arrays.
Zeigen Sie den Code an, der diesen Fehler erzeugt.
– Brasilo
27. April 2013 um 2:07 Uhr