So legen Sie Perioden und Leerzeichen für Array-Werte (Metaschlüssel) fest

Problem:

Bevor ich Meta-Boxen erstellt habe, habe ich Dinge auf die alte Art gemacht, indem ich benutzerdefinierte Felder direkt eingegeben habe. Ich habe die ID und den Wert von Hand ausgefüllt und den “Update Button” gedrückt. Ich würde eingeben, was ich wollte, spaces und . (Punkte) und sie würden korrekt in meiner database angewendet werden (FEHLERFREI). Allerdings möchte ich das nicht mehr manuell machen, weshalb ich Metaboxen erstellt habe, aber seit ich sie benutze, Sonderzeichen wie . und spaces nicht übernommen, was zu einem leeren Feld führt, wenn ich versuche, den Post zu aktualisieren, um die Meta-Box-Werte zu speichern. Was fehlt mir und warum unterscheiden sich die Regeln für Sonderzeichen, wenn Sie die ID manuell eingeben, anstatt sie über Metaboxen voreinzustellen? Letztendlich, wie kann ich Meta-Box-Array-IDs mit Sonderzeichen erstellen?

Hinweis: Alle meine Nicht-Sonderzeichen Meta-Boxen funktionieren ordnungsgemäß. Das Problem liegt also NICHT in der functionalität des Codes

Details :

Ich verwende das MP3-Player-Plugin “mp3-jplayer”, das benutzerdefinierte Felder zur Anzeige von Audio verwendet. Das benutzerdefinierte Feldformat (das der Ersteller dieses Plugins bestimmt hat und ich selbst nicht ändern kann) ist …

ID = Tracknummer mp3.Artist

( beachte den Raum und die obige Periode, dies ist der Grund für die Einreichung des Metabox-Wertes)

Wert = SongTitle @ SongURL

Bildbeschreibung hier eingeben

Im Moment verwende ich Metaboxen, um benutzerdefinierte Felder wie folgt einzugeben:

 $meta_boxes[] = array( 'id' => 'musicboxes', 'title' => 'Music Box Head', 'pages' => array('post'), 'context' => 'normal', 'priority' => 'low', 'fields' => array( array( 'name' => 'Musicbox 1', 'desc' => 'ID', 'id' => '1 mp3.Artist', 'type' => 'text', 'std' => '', ) ) ); 

Wenn ich jedoch in das Array-ID-Feld “1 mp3.Artist” eingabe, wird das benutzerdefinierte Feld nicht korrekt aktualisiert (mit anderen Worten bleibt es leer) und ich denke, es liegt daran, dass zwischen der Nummer und dem Wort “mp3” ein Leerzeichen ist “. Also, wie würde ich (wenn es möglich ist) immer noch in der Lage sein, den Raum zu halten, damit das benutzerdefinierte Feld mit dem mp3-jplayer-Plugin richtig funktioniert.

Solutions Collecting From Web of "So legen Sie Perioden und Leerzeichen für Array-Werte (Metaschlüssel) fest"

Möglicherweise haben Sie Ihr Meta-Feld falsch aufgebaut: Wenn Ihre benutzerdefinierten Feldnamen keine gültigen Variablennamen sind , konvertiert PHP alle Zeichen, die nicht mit [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff] zu Unterstrichen. Der Grund: register_globals. Ein Anfragefeld muss in der Lage sein, als Variable zu arbeiten.

Es gibt zwei Problemumgehungen:

  1. das Feld wie ein Array: . Dann parse foo , um den Wert zu erhalten. Das macht WordPress mit dem benutzerdefinierten Feld.

  2. Suchen Sie nach TrackNumber_mp3_Artist und konvertieren Sie den Wert, bevor Sie ihn in der database speichern.

Haben Sie versucht, den Text zu entschlüsseln, bevor er in der database gespeichert wurde?

esc_textarea

 $mp3ID = esc_textarea($_REQUEST['_mp3IDBoxData']); update_post_meta(esc_attr($post_id), '_mp3IDBoxData', $mp3ID); 

Falls Sie noch nach einer Antwort suchen; Ich denke, du wirst deine Hände schmutzig machen müssen. Als erstes müssen Sie den Wert, der im benutzerdefinierten Feld Name registriert wird (“1 mp3.Artist”), trimmen.

Zum Beispiel: $ id = trim ($ field [‘id’]); $ newID = get_post_meta ($ post-> ID, $ id, true);

Ich hoffe, das hilft. Ich habe es nicht getestet, aber die Logik dahinter sollte es tun. Viel Glück!