• Gelöst bennddy

    (@bennddy)


    Hallo,

    ist es möglich Shortcodes in einer For-Schleife zu erstellen?

    Wenn ich einen einzelnen Shortcode erstelle, gehe ich wie folgt vor:

    add_shortcode( 'shortcode_name', 'shortcode_beispiel' );
    function shortcode_beispiel_init(){
    	function shortcode_beispiel() {
    		return "<span id='beispiel'>Load</span>";
    	}
    }
    add_action('init', 'shortcode_beispiel_init');

    [shortcode_name] funktioniert dann einwandfrei.
    Nun möchte ich den Code allerdings mehrfach ausführen, sodass am Ende [shortcode_name_1], [shortcode_name_2], [shortcode_name_3] u.s.w. rauskommen. Alle fest zu definieren ist nicht möglich, da nicht genau gesagt werden kann um wie viele Durchläufe es sich handelt. Hauptproblem vor dem ich stehe ist, dass ich nicht weiß wie ich einzigartige Funktionen erstellen kann, damit sich nichts ins Gehege kommt.

    Mein Versuch:

    for ($i = 0; $i <10; $i++) {
    	$function1 = 'shortcode_beispiel'.$i.'_init';
    	$function2 = 'shortcode_beispiel'.$i.'';
    	
    	add_shortcode( 'shortcode_name_'.$i.'', $function2 );
    	function $function1(){
    		function $function2() {
    			return "<span id='beispiel".$i."'>Load</span>";
    		}
    	}
    	add_action('init', $function1);
    }

    Wie könnte man das Vorhaben realisieren bzw. ist es so überhaupt sinnvoll oder gibt es bessere Optionen?

Ansicht von 8 Antworten – 1 bis 8 (von insgesamt 8)
  • Es macht doch keinen Sinn, eine Funktion mehrfach zu erstellen, die genau das gleiche macht. Es ist doch besser, eine Funktion zu erzeugen, der man einen Parameter übergibt.

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Zu Fragen zur PHP-Programmierung wendest du dich besser an ein PHP-Forum. Wir können hier kein Grundwissen vermitteln, weil es den (zeitlichen) Rahmen sprengt.

    Funktionen in Funktionen gibt es in PHP nicht. Es wäre auch besser, wenn du erst einmal beschreibst, was du erreichen möchtest, statt ungültigen Code vorzugeben.

    Nachtrag: die Aussage, dass es in PHP keine Funktionen in Funktionen gibt, scheint nicht richtig zu sein. Sinn macht dieses Konstrukt aus meiner Sicht trotzdem nicht.

    • Diese Antwort wurde geändert vor 3 Jahren, 10 Monaten von Bego Mario Garde. Grund: Nachtrag
    Thread-Starter bennddy

    (@bennddy)

    Ich habe vergessen zu erwähnen, dass mit jQuery diverse IDs erstellt werden, die ich hinterher einem Shortcode zuweise.
    Die IDs sind z.B. beispiel1, beispiel2, beispiel3. Die einzelnen IDs möchte ich dann innerhalb eines Span (<span id='beispiel".$i."'>Load</span>) ausgeben. Jede Ausgabe soll hinterher in einem Shortcode sein, weshalb ich da an eine Schleife dachte, die die Shortcodes entsprechend erstellt.

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Warum gibst du das HTML nicht innerhalb deiner JavaScript-Funktion aus?

    Da sind zu viele unbekannte Informationen, um dir wirklich zu helfen.

    Thread-Starter bennddy

    (@bennddy)

    Ich versuche es mal besser zu beschreiben, was ich vorhabe.

    Ich habe mir ein kleines Plugin erstellt, welches zuerst eine URL in Datenbank schreibt (das ist eine .json URL).
    Dann habe ich eine .js-Datei (jQuery), die sich den Datenbankeintag besorgt, die JSON auswertet und IDs erstellt.

    
    document.getElementById('beispiel1').innerHTML = DataOutput.1;
    document.getElementById('beispiel2').innerHTML = DataOutput.2;
    document.getElementById('beispiel3').innerHTML = DataOutput.3;

    Soweit funktioniert alles.
    Nun könnte man z.B. mittels <span id='beispiel1'>Load</span> die ID beispiel1 ausgeben. Ich möchte den Span aber gerne als Shortcode erstellen.

    Bzgl. Shortcodes habe ich eine Anleitung von Kinsta befolgt, was ebenfalls funktioniert.

    
    add_shortcode( 'shortcode_name_1', 'shortcode_beispiel' );
    function shortcode_beispiel_init(){
    	function shortcode_beispiel() {
    		return "<span id='beispiel1'>Load</span>";
    	}
    }
    add_action('init', 'shortcode_beispiel_init');

    So habe ich den Span mit der ID beispiel1 jetzt im Shortcode [shortcode_name1]

    Nun kommen wir zu dem Punkt wo ich derzeit festhänge:
    Anstatt alle Shortcodes manuell zu erstellen (im Beispiel sind es nur 3 IDs, es können aber auch 10 oder mehr sein), würde ich gerne eine Schleife anwenden, damit sie Automatisch erzeugt werden.
    Problem ist allerdings, dass die functionen eindeutige Namen brauchen (z.B. Anhand des Schleifendurchlaufs hochzählen) und genau da weiß ich nicht, wie ich es realisieren soll.

    Ich hoffe, ich konnte ein wenig Licht ins Dunkle bringen. Sollte es zu sehr vom Thema WordPress abweichen und in anderen Foren besser aufgehoben sein, bitte ich um Entschuldigung.

    Ich wiederhole mich ja gerne:

    Es macht doch keinen Sinn, eine Funktion mehrfach zu erstellen, die genau das gleiche macht. Es ist doch besser, eine Funktion zu erzeugen, der man einen Parameter übergibt.

    Beispiel:

    
    add_shortcode( 'write_span', 'write_span' );
    
    function write_span($atts)
    {
        return "<span>Beispiel_" . $atts['number'] . "</span>";
    }
    [write_span number="1"]
    
    [write_span number="2"]
    
    [write_span number="3"]
    Thread-Starter bennddy

    (@bennddy)

    Du rettest mir den Tag. Vielen Dank, das macht genau das, was ich benötigt habe.
    Dazu ist die Lösung viel eleganter als mein missglückter Versuch.

Ansicht von 8 Antworten – 1 bis 8 (von insgesamt 8)
  • Das Thema „Shortcodes in For-Schleife erstellen?“ ist für neue Antworten geschlossen.