Intereting Posts
Изменить slug стандартной категории wp Post Не удается загрузить SVG-файлы после обновления WordPress 4.7.1 Как включить различные теги html в заголовке для разных страниц? Как переместить мои кнопки для обмена социальными медиа на более высокие должности в теме журнала WAP Hades? ! is_admin () становится истинным в страницах администратора Как добавить категорию и подкатегорию в пользовательский код WordPress? Как получить идентификаторы для объектов в ветке меню? Активы в css не связаны правильно на страницах, кроме дома WP_Options high Предварительный контент для отображения в лайтбокс HTML, введенный в текстовый редактор Изменения при сохранении Могут ли изображения автоматически сжиматься? Ошибка при установлении ошибки подключения к базе данных на сайте, который раньше работал нормально Получите post_id, где meta_value равно чем-то в сериализованном поле meta_value Отправка пользовательских сообщений из внешнего интерфейса, jQuery ajax и выборочной проверки – не может найти подходящее место для вставки wp_insert_post ()

Количество ссылок в WordPress по ip-адресу

Я создаю веб-сайт WordPress, который будет иметь возможность загружать zip-файл из определенного пользовательского типа сообщений. Нажав кнопку загрузки, пользователь автоматически начнет загрузку zip-файла.

<a id="countable_link" href="#">download</a> 

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

Вместо этого я бы хотел, чтобы этот счетчик мог выполняться только один раз уникальным пользователем. Я предполагаю, что это должно что-то сделать с IP-адресами пользователей, но мои знания PHP, SQL и ajax крайне низок.

Вот сценарий, который я нашел: (он также был опубликован здесь )

 <?php if ( is_admin() ) add_action( 'wp_ajax_nopriv_link_click_counter', 'link_click_counter' ); function link_click_counter() { if ( isset( $_POST['nonce'] ) && isset( $_POST['post_id'] ) && wp_verify_nonce( $_POST['nonce'], 'link_click_counter_' . $_POST['post_id'] ) ) { $count = get_post_meta( $_POST['post_id'], 'link_click_counter', true ); update_post_meta( $_POST['post_id'], 'link_click_counter', ( $count === '' ? 1 : $count + 1 ) ); } exit(); } add_action( 'wp_head', 'link_click_head' ); function link_click_head() { global $post; if( isset( $post->ID ) ) { ?> <script type="text/javascript" > jQuery(function ($) { var ajax_options = { action: 'link_click_counter', nonce: '<?php echo wp_create_nonce( 'link_click_counter_' . $post->ID ); ?>', ajaxurl: '<?php echo admin_url( 'admin-ajax.php' ); ?>', post_id: '<?php echo $post->ID; ?>' }; $( '#countable_link' ).on( 'click ', function() { var self = $( this ); $.post( ajax_options.ajaxurl, ajax_options, function() { window.location.href = self.attr( "href" ); }); return false; }); }); </script> <?php } } ?> 

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

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

Благодаря,

Что бы вы сделали, если пользователь использует прокси-сервер и рандомизирует его IP-адрес? Существует множество плагинов для браузера, чтобы упростить это до щелчка кнопки для загрузки несколько раз. То же самое касается файлов cookie. Помимо этого вы пытаетесь собрать данные, которые позволяют идентифицировать пользователей, что является незаконным во многих странах.

Что (может) работать намного лучше – это одноразовый хеш, который вы добавляете в качестве метаданных. Пример, который добавляет такой хэш во время публикации сообщения – в этом случае дата сообщения хеширования md5 как отметка времени UNIX:

 add_action( 'draft_to_publish', function( \WP_Post $post ) { add_post_meta( $post->ID, 'download_hash', md5( date( 'U', $post->post_date ), true ); } ); 

(Вы можете построить свой хэш, как хотите).

Затем, когда пользователь загружает файл, просто установите для пользователя мета значение с этим хэшем в качестве ключа и значением 1 / true / foo . После загрузки вы просто проверяете, является ли текущая download_hash уже мета-значением пользователя, а затем может запретить загрузку.

Чтобы реализовать счетчик, вы просто добавляете другое значение метаданных вложений с именем download_users где вы сохраняете массив идентификаторов пользователей. Готово.