Support » Allgemeine Fragen » Plugin erstellen, mit dessen Hilfe auf Eingabe eine Ausgabe folgt

  • Gelöst monika09

    (@monika09)


    Ich möchte ein einfaches Plugin erstellen, das man auf einer Seite einbinden kann. Damit soll eine Abfrage mit Absendebutton auf der Seite erscheinen, wo man seinen Namen einträgt. Nach Absenden des Namens soll auf der selben Seite der Text „Hallo [Name] !“ ausgegeben werden.

    Das einzige, das ich hinbekommen habe, ist die Abfrage und dass der Begrüßungstext auf einer blanken Seite außerhalb von wordpress ausgegeben wird. Mein Code macht nur das, das ist mir klar, aber ich weiß nicht, wie ich erreichen kann, dass der Begrüßungstext innerhalb wordpress ausgegeben wird.

    form.php:

    
    <?php
    /*
    Plugin Name: form_greeting
    */
    //defined('ABSPATH') or die("Thanks for visiting");
    
    function form(){
    		
    		if(empty($_POST["name"])==TRUE){
    			echo '<form method="post" target="_self"
    				        action="http://localhost/wordpress-4.9.8-de_DE/wordpress/wp-content/plugins/Greeting2/greeting.php" >
    				<p> Name: <input type="text" name="name" size="30" ></p>
    				<p><input type="Submit" value="submit"></p>
    				</form>
    				';
    		 }
    				
    		else{
    			echo "Hello " . $_POST["name"] . '!';
    		}
    		
    	}
    	
    	add_shortcode( 'form_MG', 'form' );
    

    greeting.php
    echo "Hello " . $_POST["name"] . "!";

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)
  • Hallo @monika09 und willkommen im Forum,

    bei allgemeinen Entwicklungsfragen ist Stackexchange vermutlich die bessere Anlaufstelle. Schau dir mal diese Antwort an, sie dürfte zu deiner Frage passen:

    https://stackoverflow.com/a/24854994

    Bei Formularen solltest du besonders darauf achten, dass Eingaben validiert und Ausgaben bereinigt („sanitized“) werden, damit du dir keine Einfallstore für Angreifer bastelst. WordPress stellt dir dafür eigene Funktionen zur Verfügung:

    https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data

    Wenn es dir nur darum geht, den eingegebenen Text an verschiedenen Stellen unmittelbar zu wiederholen, kannst du das besser mit JavaScript oder jQuery umsetzen.

    Das JavaScript würde dann in etwa so aussehen:

    //Datei: repeatme.js
    jQuery(document).ready(function($) {
    $("#eingabe").keyup(function()
    		{
    	var text = $("#eingabe").val();
    	$("#ausgabe").val(text);
    		});
    });

    und die Datei mit dem JavaScript müsste in deinem Plugin so eingebunden werden:

    function pix_enqueue_repeatme() {
      wp_enqueue_script( 'repeatme', plugins_url( 'js/repeatme.js', __FILE__ ), array( 'jquery' ) );
    }
    add_action( 'wp_enqueue_scripts', 'pix_enqueue_repeatme' );

    Formular und Ausgabe könnten Bestandteil eines Shortcode sein:

    add_shortcode( 'repeatme', 'repeatme_shortcode' );
    function repeatme_shortcode() {
    	$out = '
    		<label name="eingabe">Eingabe</label>
    		<input type="text" id="eingabe"></input>
    		<label name="eingabe">Ausgabe</label>
    		<input type="text" id="ausgabe"></input>';
    	return $out;
    }

    Danach kannst du den Text an beliebiger Stelle mit [repeatme] ausgeben.

    Wahrscheinlich wäre es aber besser, die jQuery-Datei und Funktion in einem Child Theme unterzubringen und dann das/die Template(s) entsprechend zu ergänzen.

    Thread-Starter monika09

    (@monika09)

    Hallo @pixolin, ich denke, dass das keine allgemeine Entwicklungsfrage ist, denn wenn Du mein momentanes Plugin ausprobierst, siehst Du vielleicht besser, was gemeint ist. Ich versuche, es noch einmal zu erklären:

    Ich binde das Plugin mittels [form_MG] auf einer WP-Seite ein. Wenn ich dann zur Webseite gehe und auf die Seite, in der ich das Plugin „aufrufe“, wird ja in form.php die Funktion form() aufgerufen und das HTML-Formular auf dieser einen WP-Seite ausgegeben. Wenn ich jetzt den submit-Button drücke wird auf einer „neutralen Seite“, mit der URL localhost/wordpress/wp-content/plugins/Greeting/greeting.php, also keine WP-Seite, die Begrüßung ausgegeben.

    Wie gesagt, dass dies mit diesem Code so geschieht, ist mir auch klar. Aber ich habe keine Idee, wie ich die Begrüßung auf die WP-Seite mit dem Formular bekomme.

    (Ich bin leider völliger Neuling bei der Webseitenentwicklung, bzw. meine Kenntnisse sind schon sehr eingerostet.)

    … ich denke, dass das keine allgemeine Entwicklungsfrage ist, …

    Wenn du meinst … Ich wollte eigentlich nur darauf hinweisen, dass du bei Entwicklungsfragen bei Stackexchange eher passende Antworten findest.

    Aber ich habe keine Idee, wie ich die Begrüßung auf die WP-Seite mit dem Formular bekomme.

    Hast du dir die Antwort auf Stackexchange eigentlich angeschaut?

    In order to stay on the same page on submit you can leave action empty (action=““) into the form tag, or leave it out altogether.

    … beantwortet doch bereits deine Frage?

    Bei Shortcodes darfst du übrigens nur Werte zurückgeben (return), nicht ausgeben (echo). Aber die unbereinigte Ausgabe echo "Hello " . $_POST["name"] . '!'; macht mir mehr Sorgen.

    Thread-Starter monika09

    (@monika09)

    Die Antwort auf Stackexchange habe ich mir angeschaut. Aber das funktioniert hier nicht, da er dann meine greeting.php nicht findet und ich erhalte (auf einer WP-Seite) die Meldung, dass die Seite nicht gefunden werden konnte.

    Dass man bei Shortcodes nicht ausgeben darf, habe ich vorher noch nie gelesen. Wohin gibt man dann den Wert zurück?

    Das mit der Bereinigung habe ich mir auch angeschaut, und ich bin Dir auch dankbar für den Hinweis. Nur nützt mir das alles nichts, solange ich die Ausgabe nicht auf eine WP-Seite bekomme.

    Kann es sein, dass dies so gar nicht als Plugin möglich ist? Es gibt im Theme twentyseventeen ein Suchformular, das ja so ähnlich funktioniert. Aber das ist ja kein Plugin und sieht im übrigen ziemlich kompliziert aus.

    Dass man bei Shortcodes nicht ausgeben darf, habe ich vorher noch nie gelesen. Wohin gibt man dann den Wert zurück?

    Hm, vielleicht habe ich das missverständlich formuliert? Die Funktion für den Shortcode darf nur einen Wert zurückgeben und nicht ausgeben.

    Thread-Starter monika09

    (@monika09)

    Hallo, nochmal zu meinem Problem.

    Die Schwierigkeit ist, dass ich beim target des Formulars ja die Internetseite angeben muss, zu der die übermittelten Daten geschickt werden. Aber, in WordPress hat eine Seite keine URL, da sie in einer Datenbank gespeichert wird. Daher findet er die Seite auch nicht, wenn ich gar kein target angebe (oder dieses leer lasse), oder die angezeigte URL der Seite als target verwende. Aber wie kann ich es jetzt in WordPress erreichen, dass ich die aktuelle Seite als Empfänger der Formulardaten angeben kann? Geht das irgendwie?

    Es muss doch möglich sein, die Formulardaten auf die selbe, oder wenigstens auf die gleiche Seite zu posten.

    Thread-Starter monika09

    (@monika09)

    Ich meinte „Action“ nicht „target“.

    Thread-Starter monika09

    (@monika09)

    Ich habe jetzt eine Lösung:

    <?php
    /*
    Plugin Name: greeting
    */
    function mg_greeting() {
    	if ( !isset($_POST['mg_send'] ) ) {
    		$output = '<form method="post" action="">
    					<p>Name: <input type="text" name="mg_name" size="30"></p>
    					<p><input type="Submit" name="mg_send" value="submit"></p>
    					</form> ';
    	} else {
    		if ( !empty( $_POST['mg_name'] ) ) {
    			$output = 'Hallo ' . esc_html( $_POST['mg_name'] ) . '!';
    		} else {
    			$output = 'Bitte gib Deinen Namen ein:'.'<form method="post" action="">
    					<p><input type="text" name="mg_name" size="30"></p>
    					<p><input type="Submit" name="mg_send" value="submit"></p>
    					</form> ';
    		}
    	}
    	return $output;
    }
    function mg_shortcodes_init() {
    	if( !shortcode_exists( 'greeting_MG' ) ) {
    		add_shortcode( 'greeting_MG', 'mg_greeting' );
    	}
    }
    add_action( 'init', 'mg_shortcodes_init' );
Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)
  • Das Thema „Plugin erstellen, mit dessen Hilfe auf Eingabe eine Ausgabe folgt“ ist für neue Antworten geschlossen.