我是wordpress的新手,正在尝试创建按钮计数器并将单击保存到数据库中。此表单仅适用于wordpress登录用户。
作用php
function getcount($userID){
$click_key = \'click_count\';
$count = get_user_meta($userID, $click_key, true);
if($count==\'\'){
delete_user_meta($userID, $click_key);
add_user_meta($userID, $click_key, \'0\');
return "0 click";
}
return $count.\'click\';
}
function setcount($userID){
$click_key = \'click_count\';
$count = get_user_meta($userID, $click_key, true);
$count++;
update_user_meta($userID, $click_key, $count);
}
HTML:
<?php
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
if( isset($_POST[\'clicks\']) ) {
setcount($userID);
}
?>
<form action="<?php echo get_bloginfo(\'home\')?>" method="post">
<input type="submit" value="click me!" name="clicks">
</form>
<p>Click Count: <?php echo get_user_meta(\'click_count\', $current_user, true); ?></p>
<?php } ?>
How to count button clicks for each users?
最合适的回答,由SO网友:Tom J Nowell 整理而成
第一个问题不是WP问题,而是对HTML表单工作方式的根本误解。
具体而言,问题在于:
if( isset($_POST[\'clicks\']) ) {
没有名为的输入
clicks, 因此,此值从未设置(因为您从未设置)。
让我们看看您的表单:
<form action="<?php echo get_bloginfo(\'home\')?>" method="post">
<input type="submit" value="click me!" name="clicks">
</form>
<p>Click Count: <?php echo get_user_meta(\'click_count\', $current_user, true); ?></p>
<?php } ?>
在这里,它使用
POST, 但它从不发送任何信息。唯一的
input 标记是提交按钮。需要使用隐藏输入
name 属于
clicks第二个问题
$current_user = wp_get_current_user();
if( isset($_POST[\'clicks\']) ) {
setcount($userID);
这里,代码获取当前用户,然后传递
$userID 到
setcount.
$userID 虽然没有在任何地方定义,但它没有值,因此PHP默认为
null 或空值。这就是为什么即使您成功提交表单,它也无法更新数据库
最后一条提示,如果双击submit按钮,当多个请求尝试增加值时,代码将进入竞争条件。根据服务器的速度、服务器负载以及用户双击的速度,计数将增加,或者增加2而不是1。
因此,在通过javascript单击提交按钮后,请禁用该按钮