Olen työskennellyt projektissa, jossa minun on kutsuttava menetelmä (joka hyväksyy käyttäjän tunnus syötteenä) Lähetä-painikkeen napsautuksella (Hyväksy-painike).
Olen kokeillut kaikkia tapoja, mutta todellinen haaste, jonka kohtaan, on saada käyttäjätunnus käyttöliittymään ja välitä se menetelmälle.
Menetelmäni päivittää kyseisen käyttäjän käyttäjämetat.
HTML-koodi:
<div> <div class="modalconent"> <h3 align=center>GDPR</h3> <p>This is a GDPR Pop Up</p><br><br><br> <form> <input name="accept" type="checkbox" value="Gdpr" required/>I accept the GDPR <input type="submit" value="Accept"> </form> </div> </div> <script> window.onload = function () { document.getElementById("accept-button").onclick = function () { document.getElementById("modal").style.display = "none" }; }; </script> 
Tällä hetkellä Hyväksy-painike napsautettaessa ei näytä mitään. Haluan kutsua menetelmää yhdessä display: none: n kanssa;
PHP-koodini:
function updateHasReadFlag($user) { // I added support for using this function either with user ID or user object if ( $user && is_int( $user ) ) { $user_id = $user; } else if ( ! empty( $user->ID ) ) { $user_id = $user->ID; } else { return; } return update_user_meta( $user_id, "META_KEY", true ); } 
Luotu lomakekoodi:
<form method="post" action="<?php echo esc_url( home_url() ); ?>"> <input name="accept" type="checkbox" value="Gdpr" required=""> I accept the GDPR <input type="submit" value="Accept"> <!--?php wp_nonce_field( "accept-gdpr", "accept_gdpr_nonce" ); ?--> </form> 
En ymmärrä, miksi nonce-kenttää kommentoidaan. Juuri tämä koodi luotiin, en ole muokannut mitään koodissa.
Kommentit
- Yritätkö päivittää metatietoja lataamatta uudelleen nykyinen sivu? Entä yksinkertaisesti lähettämällä lomake samalle sivulle ja päivittämällä metatiedot sivulatauksen yhteydessä?
 - Kyllä, yritän päivittää metatietoja. Voitteko antaa minulle jonkinlaisen ratkaisun siitä, mistä puhut. Se olisi hienoa.
 
Vastaa
Voit käyttää AJAX: ää, jos et halua ladata nykyistä page — ts. kun napsautat ”Hyväksy” -painiketta, tee AJAX-pyyntö päivittää käyttäjän metatiedot, kaikki poistumatta nykyiseltä sivulta.
 Ratkaisu Ehdotan, että  en  käytä AJAXia; sen sijaan yksinkertaisesti lähetämme lomakkeen (aseta sen action määritteen arvo) kotisivulle ja päivitämme sitten metadatan template_redirect -koukun avulla (ja ohjaa takaisin edelliselle tai viittaavalle sivulle). 
Vaiheet
- 
Muuta
form-tunniste :<form method="post" action="<?php echo esc_url( home_url() ); ?>">ja lisää tämä nonce -kenttä:
<?php wp_nonce_field( "accept-gdpr", "accept_gdpr_nonce" ); ?>joten
formnäyttää nyt tältä:<form method="post" action="<?php echo esc_url( home_url() ); ?>"> <input name="accept" type="checkbox" value="Gdpr" required /> I accept the GDPR <input type="submit" value="Accept" /> <?php wp_nonce_field( "accept-gdpr", "accept_gdpr_nonce" ); ?> </form> - 
Lisää tämä teema
functions.php-tiedostoon:function accept_gdpr() { // Check if the user is authenticated. if ( ! is_user_logged_in() ) { return; } // Check if we have all necessary data. if ( empty( $_POST["accept_gdpr_nonce"] ) || empty( $_POST["accept"] ) || "Gdpr" !== $_POST["accept"] ) { return; } // Verify the nonce. if ( ! wp_verify_nonce( $_POST["accept_gdpr_nonce"], "accept-gdpr" ) ) { return; } // Update the meta. update_user_meta( get_current_user_id(), "META_KEY", "1" ); // Redirect back to the previous page. wp_safe_redirect( wp_get_referer() ); exit; } add_action( "template_redirect", "accept_gdpr" );Huomautuksia:
- 
Gdprkuten kohdassa"Gdpr" !== $_POST["accept"]on sama kuin yllä<input name="accept" type="checkbox" value="Gdpr" required />. - 
Muista korvata
META_KEYja varsinainen meta-avain. - 
Uskon, että GDPR: n hyväksyntä tähtää lokiin Vain sisäänkirjautuneet käyttäjät, joten ”siksi käytin
is_user_logged_in()jaget_current_user_id()yllä olevassa koodissa / toiminnossa. 
 - 
 
PÄIVITYS
 wp_safe_redirect() ei toiminut OP: n palveluksessa, joten hän käytti div id = ”94ec52c069″> 
.
Vastaa
 Sinun on käytettävä  wp_localize_script ()  on saatavana myös  täällä . 
 Novelli: se on WordPress-tapa kutsua PHP ryhmässä JS 
 Joten voit tehdä jotain seuraavista. 
  FIRST  luo js -kansio teeman juurelle, samalla tasolla kuin style.css, jos sinulla ei ole sellaista vielä, sitten luo tähän js -kansioon tiedosto call-php.js. Voit nimetä sen mitä ikinä haluat, tärkeintä on, että sen on oltava .js -tiedosto 
  function.php    function updateHasReadFlag($user) add: 
/** * Hooking in JS code. */ function call_php_in_js() { wp_enqueue_script( "call-php-in-js", get_template_directory_uri() . "/js/call-php.js", array( "jquery" ), filemtime( get_theme_file_path( "/js/call-php.js" ) ), true ); $php_to_js = array( "my_php_function" => updateHasReadFlag( $user ), ); wp_localize_script( "call-php-in-js", "object_name", $php_to_js ); } add_action( "wp_enqueue_scripts", "call_php_in_js" ); 
  SECOND , call-php.js -tiedostossa lisää: 
( function( $ ) { $( "#accept-button" ).click( function( e ) { e.preventDefault(); $( "#modal" ).hide(); object_name.my_php_function; }); } )( jQuery ); 
 Toivottavasti tämä ratkaisee ongelmasi. 
 En tehnyt ” Testaa sitä, mutta sen pitäisi toimia. 
 Kerro minulle testauksen jälkeen. 
Kommentit
-  kiitos vastauksesta. Arvostan sitä . Mutta jotenkin tämä ei toimi. 
function updateHasReadFlag($user)ei tule soittamaan. Tai voi olla, että sitä kutsutaan, muttaupdate_user_meta( $user_id, 'META_KEY', true );ei ole jotenkin toimii. Voitteko tutkia sitä. Olen myös poistanut<script></script>html-koodistani. -  Sinulta kysytään vain vahvistaa m, Oma 
function updateHasReadFlag($user)hyväksyy parametrin UserID tai user Object, jotta se voi päivittää kyseisen käyttäjän metatiedot. Lähetetäänkö tämä parametrina soitettaessa numeroonfunction updateHasReadFlag($user) -  voisitko korvata 
object_name.my_php_function;sanallaconsole.log(object_name.my_php_function);ja kerro minulle, mitä näet konsolissa.Vain tietääksesi, onko#modalpiilossa, kun napsautat#accept-buttonvastausta käyttämällä? - Se kirjataan kuten " null " puhelun php.js-konsolissa
 -  on 
#modalpiilotetaan, kun napsautat#accept-buttonkäyttämällä vastausta?