Wie man JavaScript-Variable an PHP in WordPress-Widget übergeben?

Ich habe viel Zeit damit verbracht, nach einer Lösung zu suchen, bei der ich den Wert der JavaScript-Variablen in eine PHP-Variable in derselben Datei mit derselben function (WordPress-Widget, Formularfunktion) übergeben kann. Gibt es ab 2017 einen guten Weg dazu?

Ich habe diese Methode unten versucht. Obwohl der Ajax-Teil die erfolgreiche Nachricht hervorbringt, ist der php-Teil fehlgeschlagen.

wiederholen

  jQuery(document).ready(function($){ var exampleJS = "hi!"; $.ajax({ url: ajaxurl, //I have tried 'repeat.php' instead of ajaxurl, but not working. type: 'POST', data: { examplePHP: exampleJS }, success: function( response){ console.log("Successful!"); }, error: function(error){ console.log("error"); } }); });  

Solutions Collecting From Web of "Wie man JavaScript-Variable an PHP in WordPress-Widget übergeben?"

Bitte denken Sie daran, dass der Code von oben nach unten ausgetriggers wird.

Auf diese Weise können Sie die POST-Variable nicht “bekommen”, bevor Sie sie über Ajax senden.

Etwas, das mit deinem Setup funktionieren würde :

 < ?php if(isset($_POST['examplePHP'])){ //check if $_POST['examplePHP'] exists echo $_POST['examplePHP']; // echo the data die(); // stop execution of the script. } ?>  

Zuerst prüfen wir, ob die POST-Variable mit isset() . Wenn dies der Fall ist, wiederholen wir den Inhalt von ‘examplePHP’ und stoppen dann die Ausführung des Skripts mit diey die(); .

Wenn keine POST-Variable verfügbar ist, lädt jemand nur die Seite. Dann echoten wir nicht, sondern machen einfach weiter mit dem Rest der Seite.

Ich habe window.location hinzugefügt, welches die aktuelle URL ist. Und die response gibt das Echo.

Da dies der WordPress Stack Exchange ist, würde ich Ihnen empfehlen, WordPress Ajax zu verwenden . Sie können mehr über die Codex-Seite lesen!

Ich habe einen einfachen Weg gefunden, eine JavaScript-Variable an die PHP-Variable zu übergeben. Bitte beachten Sie, dass diese Methode in WordPress Version 4.7.2 und nur speziell auf Widget funktioniert. Ich habe viele Kommentare geschrieben, um zu erklären, was jede Zeile getan hat. Wenn Sie eine bessere Lösung haben, teilen Sie uns bitte mit!

Lösung:

  • Erstellen Sie ein verstecktes Eingabefeld, um den Wert des zu übergebenden Javascript zu speichern.
  • Greifen Sie auf dieses versteckte Eingabefeld zu und weisen Sie seinen Wert einer PHP-Variablen zu.

Demo-Widget:

  • Ich erstelle ein Demo-Widget, das “LOVE YOU” -Wort hinzufügt, je nachdem, wie oft Sie die Schaltfläche ” Add LOVE YOU ” drücken.

  • Beachten Sie, dass ich das versteckte Feld zum besseren Verständnis angezeigt habe.

  • Sie können type="text" in type="hidden" ändern, um es auszublenden.

  • Diese Demo konzentriert sich nur auf die form des Widgets.

  • Stellen Sie sicher, dass Sie auf die Schaltfläche Speichern klicken. Andernfalls wird der Wert der ausgeblendeten Eingabe nicht vom Widget gespeichert.

Demo Widget ScreenShot:

Bildbeschreibung hier eingeben

Quellcode:

wp-Text-Repeater.php

 < ?php /** *Plugin Name: WP Text Reapter **/ class wp_text_repeater extends WP_Widget { /** * Sets up the widgets name etc */ public function __construct() { $widget_ops = array( 'classname' => 'wp_text_repeater', 'description' => 'Widget that prints LOVE YOU repeatedly according to button press', ); parent::__construct( 'wp_text_repeater', 'WP Text Repeater Widget', $widget_ops ); } /** * Outputs the content of the widget * * @param array $args * @param array $instance */ public function widget( $args, $instance ) { // outputs the content of the widget $wp_text_repeater_button = ! empty( $instance['wp_text_repeater_button'] ) ? $instance['wp_text_repeater_button'] : ''; $wp_text_repeater_appendee = ! empty( $instance['wp_text_repeater_appendee'] ) ? $instance['wp_text_repeater_appendee'] : ''; $wp_text_repeater_hidden = ! empty( $instance['wp_text_repeater_hidden'] ) ? $instance['wp_text_repeater_hidden'] : ''; } /** * Outputs the options form on admin * * @param array $instance The widget options */ public function form( $instance ) { // outputs the options form on admin $instance = wp_parse_args( (array) $instance, array( 'wp_text_repeater_button' => '', 'wp_text_repeater_appendee' => '', 'wp_text_repeater_hidden' => '')); $wp_text_repeater_button = $instance['wp_text_repeater_button']; $wp_text_repeater_appendee = $instance['wp_text_repeater_appendee']; $wp_text_repeater_hidden = $instance['wp_text_repeater_hidden']; $tempHidden = 'wp_text_repeater_hidden'; ?>   < ?php $max = 0; //Number of time user press the button //if JavaScript front-end hidden input has value, assign $max to it. //This If statement sync between the javascript and the php part. if(strlen($$tempHidden) > 0){ $max = intval($$tempHidden); } $counter = 0; while($counter < $max){ //loop according to how many time user press the button ?> 

LOVE YOU!

< ?php $counter++; } $id_prefix = $this->get_field_id(''); //get the widget prefix id. ?> < ?php } /** * Processing widget options on save * * @param array $new_instance The new options * @param array $old_instance The previous options */ public function update( $new_instance, $old_instance ) { // processes widget options to be saved $instance = $old_instance; $instance['wp_text_repeater_button'] = sanitize_text_field($new_instance['wp_text_repeater_button']); $instance['wp_text_repeater_appendee'] = sanitize_text_field ($new_instance['wp_text_repeater_appendee']); $instance['wp_text_repeater_hidden'] = sanitize_text_field( $new_instance['wp_text_repeater_hidden'] ); return $instance; } } // register wp_text_repeater widget function register_wp_text_repeater_widget() { register_widget( 'wp_text_repeater' ); } add_action( 'widgets_init', 'register_wp_text_repeater_widget' );