Подсчитайте, сколько раз пользователь нажал на кнопку в WordPress - PullRequest
0 голосов
/ 04 мая 2020

Мне нужно посчитать, сколько раз пользователь нажимал указанную кнопку c, например:

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

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

function countClicks() {
 global $wpdb;
 $charset_collate = $wpdb->get_charset_collate();
 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );

 //* Create the teams table
 $table_name = $wpdb->prefix . 'count_clicks';
 $sql = "CREATE TABLE $table_name (
 click_id INTEGER NOT NULL AUTO_INCREMENT,
 click_number INTEGER NOT NULL,
 PRIMARY KEY (click_id)
 ) $charset_collate;";
 dbDelta( $sql );
}

Есть ли у вас лучшие решения для этого вместо создания новой таблицы fre sh? Кстати: это веб-сайт WordPress.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Чтобы увеличить счетчик и получить его без создания новой таблицы. Вы должны использовать API параметров. Это безопасное обновление ядра.

Во-первых, включите в свои скрипты темы следующее, которое, как я предполагаю, у вас есть локальный скрипт темы или файлы плагина js. Вы должны локализовать свой скрипт для использования ajax в "WP Way"

jQuery(document).ready(function($){
    $('a#download').click(function(e){
        e.preventDefault();
        $.ajax({
            url: myajax.ajaxurl,
            data: {
                action: 'increment_counter',
            },
            type: 'POST',
        })
        .done(function(){
            // go to the link they clicked
            window.location = $(this).attr('href');
        })
        .fail(function(xhr){
            console.log(xhr);
        })
    });
});

Затем добавьте следующее к своим функциям. php или в свой плагин.

add_action('wp_ajax_increment_counter', 'my_increment_counter');   
add_action('wp_ajax_nopriv_increment_counter', 'my_increment_counter');

function my_increment_counter(){
    // Name of the option
    $option_name = 'my_click_counter';
    // Check if the option is set already
    if ( get_option( $option_name ) !== false ) {
        $new_value = intval(get_option($option_name)) + 1; 
        // The option already exists, so update it.
        update_option( $option_name, $new_value );
    } else {
        // The option hasn't been created yet, so add it with $autoload set to 'no'.
        $deprecated = null;
        $autoload = 'no';
        add_option( $option_name, 1 , $deprecated, $autoload );
    }
}

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

get_option('my_click_counter')

0 голосов
/ 04 мая 2020

Я бы использовал плагин Advanced Custom Fields и создал настраиваемое поле для каждого загружаемого файла - затем использовал бы JavaScript для захвата клика, который через AJAX отправляет вызов функции, которая увеличивает счетчик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...