• Hallo liebe WordPress-Gemeinde 😉

    Ich habe kein passendes Forum für mein Problem gefunden, so schreibe ich es hier.

    Ich versuche gerade in meinem eigenen Theme eine Abfrage zu programmieren, bei der ich als erstes auswähle wie viele Elemente (in meinem Fall Referenzen) ich anlegen möchte.
    Diese Variable $mt_ref[anzahl] hat beispielsweise den Wert 3.
    Und nun sollen 3x im Backend Eingabefelder generiert werden, die ich mit Inhalten belegen kann.

    Hier erstmal der Code:

    <?php
    if (!$mt_ref[anzahl]=="") {
    	$ref_to = $mt_ref[anzahl];
    	for($i = 0; $i < $ref_to; $i++) {
    		$j = $i+1;
    		$ref_for_name = "mt_ref['name".$j."']"; // bis hier funktioniert es
    		$ref_var_name  = "$".$ref_for_name;
    		//$ref_var_name = ${$ref_for_name};
    
    		echo 'Debug <b>$ref_var_name</b>: '.$ref_var_name.'<br>';
    		echo 'Debug: <b>esc_attr_e()</b>: '.esc_attr_e($ref_var_name).'<br>';
    		echo 'Debugtest: $mt_ref[anzahl] '.$mt_ref[anzahl].'<br>';
    ?>
    <!-- Kunden-Name -->
    <label for="<?=$ref_for_name;?>">Referenz Nr. <?=$j;?> - Kundenname
    	<input style="width:700px" id="<?=$ref_for_name;?>" type="text" name="<?=$ref_for_name;?>" value="<?php esc_attr_e($ref_var_name);?>" />
    </label> <br>Debug Value: <?=$$ref_var_name;?><br>
    <!-- Submit -->
    <p class="submit"><input type="submit" class="button-primary" value="Elemente abspeichern" /></p>
    <hr>
    <?php
    	}
    }

    Das was funktioniert: Die Variable-Inhalte von $ref_for_name werden richtig ausgespielt (da sie nur ein String sind).

    Das was nicht funktioniert ist die Variable $ref_var_name. Hier wird leider nur der String $mt_ref[name1] übergeben und nicht, wie es sein soll die Variable $mt_ref[name1]. Da ich sie für den value der Eingabe benutze sollte hier aber die echte Variable stehen.

    Ich versuche schon seit Stunden heraus zu finden, wie ich diese ordentlich einbinde. Ich habe es auch schon mit folgendem versucht:

    $mt_ref ändert sich ja nicht, also habe ich es so probiert:

    $mt_ref[$ref_in_name] … allerdings gibt er mir hier auch nur den Volltext aus und nicht den Inhalt von $ref_in_name.

    Ich benötzige also eine Funktion, die aus einer ‚$xyz‘ String eine $xyz Variable macht, welche zusätzlich innerhalb des Arrays funktioniert.

    Kann mir jemand bitte helfen.

    Dankende Grüße

Ansicht von 8 Antworten – 1 bis 8 (von insgesamt 8)
  • Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Mit dieser Frage bist du vermutlich in einem PHP-Forum oder Stackexchange besser aufgehoben. Ich sehe auch bis auf die fehlerhafte Verwendung von esc_attr_e() keinen Zusammenhang zu WordPress?

    Was möchtest du denn mit diesem Formular erreichen?

    Thread-Starter MonTea

    (@rdt-dienst)

    Ich möchte Datensätze anlegen, im BE von WordPress, welche dynamisch Variablen erstellen um nicht zu viele Zeilen html-php zu haben.

    Was heisst fehlerhafte Verwendung von esc_attr_e() … der Ursprung stammt aus einem Tutorial, welches bisher mit allen anderen Elementen, die ich angelegt habe, gut funktioniert hat.

    Thread-Starter MonTea

    (@rdt-dienst)

    kannst du mir ein php-forum empfehlen, welches auch wordpress behandelt?

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Dass du Datensätze anlegen möchtest, habe ich schon vermutet – sonst würde das Eingabefeld wenig Sinn machen, oder? Nur … was für Datensätze? Und warum so?

    Du kannst in WordPress eigene Inhaltsarten (Custom Post Types) definieren oder Inhaltsarten zusätzliche Eingabefelder für Meta-Daten zuweisen (Custom Fields). Oder du erstellst eine neue Seite im Backend um wie auch immer geartete Informationen als Optionen abzulegen. Dafür gibt es die Settings-API. Du verwendest aber nichts von den zuvor genannten Lösungen, die WordPress dir bereits zur Verfügung stellt und die (z.B. mit Nonces, die in deinem Code bisher fehlen) auch gegen Missbrauch abgesichert sind.

    Thread-Starter MonTea

    (@rdt-dienst)

    Ich möchte dem Redakteur vorgeben, wie die Felder heissen.

    Anhand meines Beispiels möchte ich folgende Felder hinzufügen:
    Kundenname, Launchdatum, verwendete Techniken, ein Bild, Link etc.

    Und, um Code zu sparen, diese per Forschleife dynamisch generieren lassen.
    Da die Felder ja in eine Variable gespeichert werden sollen, brauche ich auch eine dynamisch generierte Variable im Fall von Kundenname: $mt_ref[name1] $mt_ref[name2] usw.

    Habe bisher nur ein Feld 😉

    Da dies nur im Backend so zur Verfügung steht, sollte der Missbrauch durch die Administration geschützt sein. Kommt ja kein Externer ran nur die BE-Administration bzw -Redaktion.

    Ich habe mich mit Custom_Post_Types noch nicht so sehr auseinander gesetzt. Könnte das die Lösung für mein Problem sein?

    Das BE-Menü habe ich mit

    register_setting('ref_options', 'mt_ref');
    und
    add_theme_page('MoreTheme Referenzen', 'MT Referenzen', 'edit_theme_options', 'MT-Referenzen', 'moth_theme_ref_page');

    angelegt. Meintest du das mit Settings_API ?

    Vielen Dank für deine Geduld, bin noch am Anfang meiner Programmierer-Karriere 😉

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Ich weiß nicht, wie gut deine Englischkenntnisse sind, aber die Settings API wird in dieser Beitragsreihe sehr gut erklärt: The Complete Guide To The WordPress Settings API

    Wenn die Felder jedoch Beitragsbezogen sind, solltest du benutzerdefinierte Felder (Custom Fields) verwenden. Das Plugin Advanced Custom Fields könnte dir dann viel Programmierarbeit abnehmen.

    Thread-Starter MonTea

    (@rdt-dienst)

    Eine Wissenschaft für sich, aber danke sehr…

    ich habe es jetzt estmal mit multidimensionalen Arrays gelöst 😉

    Für den Fall das jmd ein ähnliches Problem hat hier der Lösungscode innerhalb der forschleife:

    <label for="<?=$ref_for_name;?>">Referenz Nr. <?=$j;?> - Kundenname
            <input style="width:700px" id="<?=$ref_for_name;?>" type="text" name="<?=$ref_for_name;?>" value="<?php esc_attr_e($mt_ref['name'][$j]);?>" />
        </label> <br><b>Debug Value</b>: <?=$mt_ref['name'][$j];?><br>

    $ref_for_name ist eine VARIABLE. Die kannst Du so problemlos ausgeben. Das andere ist ein ARRAY!

    Mach mal einen var_dump ( http://php.net/manual/de/function.var-dump.php ) dann kannst Du genauer die Struktur des Arrays evaluieren und ggf. genau das ausgeben, was Du willst.

    Ja, Arrays sind auf den ersten Blick die Pest, da muss man sich erst mal rein denken. Aber ein var_dump bringt da meist schnell die Erleuchtung 😉

    $mt_ref[’name‘][$j] ist dabei genau das was ich meine: Du gibst das Array serialisiert (von 0-X) aus.. 😛

    Hope it helps..

Ansicht von 8 Antworten – 1 bis 8 (von insgesamt 8)

Das Thema „PHP Dynamisches Array (Problem)“ ist für neue Antworten geschlossen.