Menetelmän kutsuminen funktiot.php-sovelluksesta napin painalluksella

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

  1. 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> 
  2. 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:

    1. Gdpr kuten kohdassa "Gdpr" !== $_POST["accept"] on sama kuin yllä <input name="accept" type="checkbox" value="Gdpr" required />.

    2. Muista korvata META_KEY ja varsinainen meta-avain.

    3. Uskon, että GDPR: n hyväksyntä tähtää lokiin Vain sisäänkirjautuneet käyttäjät, joten ”siksi käytin is_user_logged_in() ja get_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, mutta update_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 numeroon function updateHasReadFlag($user)
  • voisitko korvata object_name.my_php_function; sanalla console.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?

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *