Как разрешить зарегистрированным пользователям отправлять форму только 5 раз в день?

Вопрос

Есть ли способ, которым мои зарегистрированные пользователи (если они не являются формой, скрыты, поэтому мне это не нужно) ограничиваются отправкой формы более 5 раз в день, или 20 в месяц или любым другим значением, которое я бы использовал?

И мне также нужно будет отобразить количество оставшихся сообщений. Если они уже отправили форму 3 раза, у них была бы функция echo примерно так: «У вас осталось 2 представления на сегодня».

Код формы (как и любая другая форма с подачей внизу :))

<form id="submiter" method="post" action="<?php echo get_author_custom_permalink( b_extract_user_info('user_id') , 'submit' ); ?>" onsubmit="return ray.ajax()" enctype="multipart/form-data"> bla bla bla form fields... <input type="submit" value="<?php print __('Submit', 'an'); ?>" class="button-form" /> <input type="hidden" name="user_id_value" value="<?php echo b_extract_user_info('user_id'); ?>" /> <input type="hidden" name="action" value="wp_handle_upload" /> <input type="hidden" name="jj_form_action" value="submit_post" /> 

я бы очень признателен за любую помощь! Всем спасибо 🙂

Как писал @amit, в представлении должен быть ежедневный счетчик, который сохраняет счетчик для этого пользователя в таблице wp_usermeta.

Если вы можете запустить задание cron, которое выполняется ежедневно, вы можете сохранить счетчик отправки. Ежедневный cron может сбросить счетчик в назначенное время. Но если вы этого не сделаете, вы должны сохранить счетчик и день.

 $current_user = wp_get_current_user(); $old_count = get_user_meta($current_user->ID,'form-counter', true); if($old_count['day'] == $today){ // still the same day $new_count['day'] = $today; $new_count['count'] = $old_count; } else { // the day after the last submission $new_count['day'] = $today; $new_count['count'] = 1; } update_user_meta( $current_user->ID, 'form-counter', $new_count, $old_count); 

Сама форма может иметь простой условный код, который проверяет значение метаинформации текущего пользователя.

 $current_user = wp_get_current_user(); $counter = get_user_meta($current_user->ID,'form-counter', true); if($counter['day'] != $today || ($counter['day'] == $today && $counter['count'] < 5)){ get_template_part('form'); } else { echo ' You have reached your daily limit'; } 

Надеюсь, что эта помощь

Обновить

Я не уверен, как ваша форма обрабатывает ajax, используя get_author_custom_permalink() .

Вот код, который идет на ваш functions.php, если вы используете wp_ajax для обработки представления формы.

Обратите внимание, что этот код не проверен.

 add_action('wp_ajax_my_custom_form', 'process_my_custom_form'); function process_my_custom_form() { global $current_user; // validate nonce if ( empty($_POST) || !wp_verify_nonce($_POST[$current_user->user_login],'form_process') ) { echo 'You targeted the right function, but sorry, your nonce did not verify.'; die(); } else { // validate post data $input_1 = $_POST['input_1']; $input_2 = $_POST['input_2']; // process data // start counter here $old_count = get_user_meta($current_user->ID,'form-counter', true); $today = date('YY-MM-DD'); // check if the user havent sent a submission at all if(!$old_count){ $new_count['day'] = $today; $new_count['count'] = 0; } if($old_count['day'] == $today){ // still the same day $new_count['day'] = $today; $new_count['count'] = $old_count; } else { // the day after the last submission $new_count['day'] = $today; $new_count['count'] = 1; } update_user_meta( $current_user->ID, 'form-counter', $new_count, $old_count); $submission_limit = 5 $message = 'You have '.$submission_limit - $new_count['count'].' submission left'; echo $message; die(); } } 

И в вашей форме

 $counter = get_user_meta($current_user->ID,'form-counter', true); $submission_limit = 5 if($counter['day'] != $today || ($counter['day'] == $today && $counter['count'] < $submission_limit)){ echo 'You have '.$submission_limit - $counter['count'].' submission left'; get_template_part('form'); } else { echo ' You have reached your daily limit'; } 

Я не знаю, какие формы вы используете, но базовая форма загружает данные в базу данных.

Чтобы иметь возможность отслеживать отправку, вам необходимо сохранить данные в базе данных. В этом случае, если вы можете изменить эту форму для хранения дополнительных данных, таких как дата, идентификатор пользователя, представления и т. Д., Тогда вы можете легко выполнить запросы mysql и определить, сколько остатков осталось и т. Д.