只需按一下按钮,即可从函数调用方法。

时间:2019-07-06 作者:Subham

我一直在从事一个项目,在这个项目中,我必须通过单击submit按钮(Accept按钮)调用一个方法(接受用户id作为输入)。

我一直在尝试各种方法,但我面临的真正挑战是如何在前端获取用户id并将其传递给方法。

我的方法更新该特定用户的用户元。

Html code:

<div id="modal">
    <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" id="accept-button" value="Accept">
        </form>
    </div>
</div>
<script>
    window.onload = function () {
    document.getElementById(\'accept-button\').onclick = function () {
        document.getElementById(\'modal\').style.display = "none"
    };
};
</script>
目前,单击“我的接受”按钮时仅显示“无”。我想在显示的同时调用该方法:none;

My PHP code:

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 );
}
The form code generated :

<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" id="accept-button" value="Accept">
             <!--?php wp_nonce_field( \'accept-gdpr\', \'accept_gdpr_nonce\' ); ?-->
        </form>
我不理解为什么对nonce字段进行了注释。这正是生成的代码,我没有编辑代码中的任何内容。

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

如果不想重新加载当前页面,可以使用AJAX;i、 e.单击“接受”按钮后,发出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" id="accept-button" 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\' );

Notes:

  1. Gdpr 如中所示\'Gdpr\' !== $_POST[\'accept\'] 与中的相同<input name="accept" type="checkbox" value="Gdpr" required /> 在上面

    务必更换META_KEY 使用实际的元键

    我认为GDPR的接受只针对登录用户,所以我使用了is_user_logged_in()get_current_user_id() 在上述代码/功能中。

    更新

wp_safe_redirect() 没有为OP工作,所以他用wp_redirect().

SO网友:LebCit

您需要使用wp_localize_script() 也可用here.
短篇小说:这是WordPress的通话方式PHP 在里面JS
因此您可以执行以下操作
FIRST 创建js 文件夹位于主题的根目录下,与样式处于同一级别。css,如果你还没有,那么在这个js 文件夹创建文件call-php.js. 你可以随意命名,重要的是它必须是.js 在您的functions.php after 你的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 );
希望这能解决你的问题
我没有测试它,但它应该可以工作
测试后请告诉我。

相关推荐

当使用wp_Dropdown_Categories时,Get_Search_Form不包括搜索表单.php

我的searchform中有一个类别下拉列表。php,在Wordpress 4中编码。x、 这几年来一直没有问题。Wordpress 5.2出现了一个问题。我的searchform.php 包括用于搜索的修改表单和用于类别的下拉菜单,使用wp_dropdown_categories(). get_search_form() 无输出。一份searchform.php;<div> $args = array ( ...some arguments... );&#