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
form
nä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:
-
Gdpr
kuten kohdassa"Gdpr" !== $_POST["accept"]
on sama kuin yllä<input name="accept" type="checkbox" value="Gdpr" required />
. -
Muista korvata
META_KEY
ja 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#modal
piilossa, kun napsautat#accept-button
vastausta käyttämällä? - Se kirjataan kuten " null " puhelun php.js-konsolissa
- on
#modal
piilotetaan, kun napsautat#accept-button
käyttämällä vastausta?