Intereting Posts
Проверка экземпляров скриптов в wp_head pagenavi с объединенным wp_query Удаление прилагаемых «комментариев» при удалении комментария WP nav menu + Bootstrap, добавьте role = "menu" в UL Запросить сообщения с пользовательской таксономией из пользовательского типа сообщения Выпадающее меню виджета всегда отображает первый вариант Не удается получить пользовательские таксономии (исчезнувшие) Использование и сохранение настраиваемых раскрывающихся списков в профилях пользователей API настроек включает настройки по умолчанию для установки темы? мета-окно не отображает ввод данных в текстовое поле Пожарный запрос на странице с URL-адресом ajax Как добавить динамический контент на страницу сообщений, архив, таксономии, поиск, автор и т. Д.? wp_mail – использование настраиваемого значения поля для $ to Разрешить использование IP-адреса для входа в страницу wordpress wp-login фильтр таксономии на главной странице

Проверка наличия почты, а затем выполнение действий

Попытка сделать:

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

Проблема:

Если вы введете конкурс (см. Ссылку ниже), он создаст новое сообщение (работает). Затем, если вы обновите страницу, она скажет, что вам нужно подождать X минут (в этом случае 5 минут), прежде чем вы сможете снова войти (работает).

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

Мне нужна помощь:

Мне нужна помощь, чтобы сделать все правильно. Чтобы обновить запись, если она существует, и создать новую, если она не существует.

Код:

// SYSTEM VARS $currentTime = time(); $entryCode = md5($entryEmail); // ENTRY DATA $entryEmail = sanitize_email($_POST['entryEmail']); $entryZip = sanitize_text_field($_POST['entryZip']); $entryIP = $_POST['entryIP']; // CREATE ENTRY function createEntry($cee, $cez, $ceip, $cec) { $newEntry = wp_insert_post( array( 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_author' => '1', 'post_title' => $cee, 'post_status' => 'publish', 'post_type' => 'custom_type_entries' ) ); wp_insert_post($newEntry); update_post_meta($newEntry, 'entryCode', $cec, true); update_post_meta($newEntry, 'entryIP', $ceip, true); update_post_meta($newEntry, 'entryZip', $cez, true); update_post_meta($newEntry, 'entryTime', time(), true); update_post_meta($newEntry, 'entryLast', time(), true); update_post_meta($newEntry, 'entryNumber', '1', true); update_post_meta($newEntry, 'entryWinner', '0', true); update_post_meta($newEntry, 'entryWinnerTime', '0', true); update_post_meta($newEntry, 'entryEmail', $cee, true); update_post_meta($newEntry, 'entryEmailSubscribe', '0', true); } function writeEntry($we) { $entryFile = "entries.txt"; $dataFile = fopen($entryFile, 'a'); $entryData = $we . "\n"; fwrite($dataFile, $entryData); fclose($dataFile); } function secondsToTime($seconds) { $dtF = new DateTime("@0"); $dtT = new DateTime("@$seconds"); return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds'); } // CHECK TO SEE IF ALREADY ENTERED $loop = new WP_Query( array( 'post_type' => 'custom_type_entries', 'posts_per_page' => '-1' ) ); while ( $loop->have_posts() ) : $loop->the_post(); $postID = $post->ID; $entry = get_post_meta($postID, 'entryEmail', true); $day = "300"; $entryTime = get_post_meta($postID, 'entryTime', true); $entryLastTime = get_post_meta($postID, 'entryLast', true); $entryCheckIP = get_post_meta($postID, 'entryIP', true); $entryCheckTime = $currentTime - $entryTime; $entryCheckLastTime = $currentTime - $entryLastTime; if ($entry == $entryEmail) { // IF LESS THAN 24 HOURS SINCE FIRST ENTRY-- if ($entryCheckTime <= $day) { $entryNext = $day - $entryCheckTime; echo "Time to Second Entry: " . secondsToTime($entryNext); get_footer(); exit; } if ($entryCheckTime >= $day) { // IF LESS THAN 24 HOURS SINCE LAST ENTRY-- if ($entryCheckLastTime <= $day) { $entryNext = $day - $entryCheckLastTime; echo "Time to Next Entry: " . secondsToTime($entryNext); get_footer(); exit; } // IF MORE THAN 24 HOURS SINCE LAST ENTRY-- elseif ($entryCheckLastTime >= $day) { // UPDATE ENTRY COUNTER $entryNumber = get_post_meta($postID, 'entryNumber', true); $entryNumber++; update_post_meta($postID, 'entryNumber', $entryNumber); // UPDATE ENTRY TIME update_post_meta($postID, 'entryLast', $currentTime); // WRITE ENTRY TO FILE writeEntry($entryEmail); // WRAP IY UP YO.. echo "Entry Updated!"; get_footer(); exit; } } } else { // CREATE ENTRY createEntry($entryEmail, $entryZip, $entryIP, $entryCode); // WRITE ENTRY EMAIL TO FILE writeEntry($entryEmail); // WRAP IT UP YO.. echo "New Entry!"; get_footer(); exit; } endwhile; wp_reset_query(); 

Живой пример:

Отправить форму: weeklyweedbox.com/win

Solutions Collecting From Web of "Проверка наличия почты, а затем выполнение действий"

Вы хотите переосмыслить этот код … для начала, по мере того, как число записей растет, их циклизация – плохая идея. Подумайте о добавлении аргумента meta_query в WP_Query чтобы вы не перебирали каждую отдельную запись в будущем, а ограничивали поиск базы данных.

В основном вы хотите избавиться от последнего else{} wrapper и полностью переместить код внутри него вне цикла while, иначе вы создадите много ложных записей. Возможно, вы не заметили, что вы проверяете только один адрес электронной почты. Это может также означать добавление другого условия, чтобы вызвать все это только при if (isset($_POST['entryEmail')) { формы (например, if (isset($_POST['entryEmail')) { … (чуть выше $loop )

Есть и другие ошибки.

… прямо вверху вам нужно переместить $entryCode до после $entryEmail

… внутри createEntry вы должны использовать add_post_meta – not update_post_meta который работает только в том случае, если update_post_meta уже существует …

… нет большой $day но $day должен быть установлен как 300, а не «300», целое число не строка …

Чему учиться на этом? Повторите логику своего кода еще несколько раз, прежде чем ожидать, что он будет работать. Вы вряд ли получите такой подробный ответ в будущем (вам повезло), поскольку обзор кода не является целью сайта Q & A. Вместо этого вам, как правило, нужно сузить до определенной ошибки, которую вы не можете понять, пытаясь сделать гораздо более тщательную работу, – и это будет показано так, как вы задаете вопрос.

Вероятно, вы столкнулись с проблемой запроса, который кэшируется WordPress, что приводит к некорректному результату при запросе на дублируемую запись. Я рекомендую запустить wp_cache_flush() когда вы вставляете новый контент. Это заставит кеш запросов быть явно сброшен после того, как вы вставляете свой контент.

Будьте осторожны. Это может привести к проблемам с производительностью, если они запущены слишком часто.