나는 메소드를 호출해야하는 프로젝트에서 작업하고 있습니다 (사용자를 받아들이는 ID를 입력으로) 제출 버튼 (수락 버튼)을 클릭합니다.
모든 방법을 시도했지만 제가 직면 한 진짜 과제는 프런트 엔드에서 사용자 ID를 얻는 방법이고 메소드에 전달합니다.
내 메소드는 특정 사용자의 사용자 메타를 업데이트합니다.
Html 코드 :
<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>
현재 클릭했을 때의 수락 버튼은 아무 것도 표시하지 않습니다. display : none;
내 PHP 코드 : p와 함께 메서드를 호출하고 싶습니다. >
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 ); }
생성 된 양식 코드 :
<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>
넌스 필드가 주석 처리 된 이유를 이해할 수 없습니다. 코드가 생성 된 것과 정확히 일치하며 코드에서 아무 것도 편집하지 않았습니다.
설명
- 다시로드하지 않고 메타 데이터를 업데이트하려고합니까? 현재 페이지? 양식을 동일한 페이지에 제출하고 페이지로드시 메타 데이터를 업데이트하는 것은 어떻습니까?
- 예 메타 데이터를 업데이트하려고합니다. 당신이 말하는 것에 대한 해결책을 제공 할 수 있습니까? 아주 좋을 것입니다.
답변
현재를 다시로드하지 않으려면 AJAX를 사용할 수 있습니다. — 페이지 즉, “수락”버튼을 클릭하면 현재 페이지를 벗어나지 않고 AJAX 요청을 통해 사용자 메타 데이터를 업데이트합니다.
그러나 해결책은 제가 제안하는 것은 AJAX를 사용하지 않습니다 . 대신 홈페이지에 양식 (action
속성 값 설정)을 제출 한 다음 template_redirect
후크를 사용하여 메타 데이터를 업데이트합니다. (이전 또는 참조 페이지로 다시 리디렉션)
단계
-
form
태그를 :<form method="post" action="<?php echo esc_url( home_url() ); ?>">
다음 nonce 필드를 추가합니다.
<?php wp_nonce_field( "accept-gdpr", "accept_gdpr_nonce" ); ?>
이제
form
는 다음과 같습니다.<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>
-
테마
functions.php
파일에 추가 :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" );
참고 :
-
Gdpr
는"Gdpr" !== $_POST["accept"]
는 위의<input name="accept" type="checkbox" value="Gdpr" required />
와 동일합니다. -
반드시 교체해야합니다. 실제 메타 키가있는
META_KEY
-
GDPR 승인이 로그를 목표로한다고 생각합니다. ged-in 사용자 만 해당되므로 위 코드 / 함수에서
is_user_logged_in()
및get_current_user_id()
를 사용한 이유입니다.
-
UPDATE
wp_safe_redirect()
가 OP에서 작동하지 않았으므로 wp_redirect()
.
답변
wp_localize_script () 도 여기 에서 사용할 수 있습니다.
짧은 이야기 : WordPress에서
in JS
따라서 다음과 같은 작업을 수행 할 수 있습니다.
FIRST style.css와 같은 수준의 테마 루트에 js
폴더를 만듭니다 (없는 경우). 그러나이 js
폴더에 call-php.js
파일을 만듭니다. 원하는대로 이름을 지정할 수 있습니다. 중요한 것은 .js
파일
에 있어야한다는 것입니다. functions.php function updateHasReadFlag($user)
추가 :
/** * 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
파일에 다음을 추가하십시오.
( function( $ ) { $( "#accept-button" ).click( function( e ) { e.preventDefault(); $( "#modal" ).hide(); object_name.my_php_function; }); } )( jQuery );
이 방법으로 문제가 해결되기를 바랍니다.
제가하지 않았습니다. ” 테스트 해보지 만 제대로 작동합니다.
테스트 한 후 알려주세요.
댓글
- 답변 해 주셔서 감사합니다. .하지만 어떻게 든 작동하지 않습니다. 내
function updateHasReadFlag($user)
가 호출되지 않습니다. 또는 호출되고 있지만update_user_meta( $user_id, 'META_KEY', true );
가 어떻게 든 작동합니다. 살펴볼 수 있습니까? 또한 HTML 코드에서<script>
</script>
를 제거했습니다. - 질문 그냥 확인하기 위해 m, My
function updateHasReadFlag($user)
는 사용자 ID 또는 사용자 개체를 매개 변수로 허용하므로 특정 사용자 메타 데이터를 업데이트 할 수 있습니다.function updateHasReadFlag($user)
-
object_name.my_php_function;
를console.log(object_name.my_php_function);
콘솔에 표시되는 내용을 알려주세요.참고로, 내 답변을 사용하여#accept-button
를 클릭하면#modal
가 숨겨 지나요? - 기록됩니다. call-php.js의 콘솔에서 " null "
- 는
#modal
내 답변을 사용하여#accept-button
를 클릭하면 숨겨 지나요?
를 호출 할 때 이것을 매개 변수로 전송하고 있습니까?