Tracking visitors and page views is essential for understanding your website’s performance and user behavior. While many plugins offer this functionality, you can also implement it yourself using custom code. This guide will show you how to track WordPress visitors and page views without a plugin, providing a lightweight and customizable solution.
Step 1: Create a Custom Database Table
First, we need to create a custom database table to store the tracking data. Add the following code to your theme’s functions.php file.
/*
* Snippet: How to Track WordPress Visitors and Page Views Without a Plugin – 2026
* Author: John Cook
* URL: https://wcsuccessacademy.com/?p=1290
* Tested with WooCommerce 10.7.0
* "Create custom database table for tracking"
*/
function wcsuccess_create_tracking_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'visitor_tracking';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
visit_time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
ip_address varchar(100) NOT NULL,
user_agent text NOT NULL,
referrer text NOT NULL,
page_url text NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
add_action('after_switch_theme', 'wcsuccess_create_tracking_table');
This code creates a custom database table named wp_visitor_tracking to store visitor data such as visit time, IP address, user agent, referrer, and page URL.
Step 2: Record Visitor Data
Next, we need to capture and store the visitor data. Add the following code to your functions.php file.
/*
* Snippet: How to Track WordPress Visitors and Page Views Without a Plugin – 2026
* Author: John Cook
* URL: https://wcsuccessacademy.com/?p=1290
* Tested with WooCommerce 10.7.0
* "Record visitor data"
*/
function wcsuccess_record_visitor_data() {
global $wpdb;
$table_name = $wpdb->prefix . 'visitor_tracking';
$ip_address = $_SERVER['REMOTE_ADDR'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'Direct';
$page_url = home_url( add_query_arg( null, null ) );
$wpdb->insert(
$table_name,
array(
'visit_time' => current_time('mysql'),
'ip_address' => $ip_address,
'user_agent' => $user_agent,
'referrer' => $referrer,
'page_url' => $page_url
)
);
}
add_action('wp_footer', 'wcsuccess_record_visitor_data');
This code hooks into the wp_footer action to record the visitor data for every page load.
Step 3: Display Visitor Data in the Admin Area
To view the visitor data, we’ll create a custom admin page. Add the following code to your functions.php file.
/*
* Snippet: How to Track WordPress Visitors and Page Views Without a Plugin – 2026
* Author: John Cook
* URL: https://wcsuccessacademy.com/?p=1290
* Tested with WooCommerce 10.7.0
* "Create admin page for viewing visitor data"
*/
function wcsuccess_add_tracking_menu() {
add_menu_page(
'Visitor Tracking',
'Visitor Tracking',
'manage_options',
'visitor-tracking',
'wcsuccess_display_tracking_data',
'dashicons-chart-bar',
27
);
}
add_action('admin_menu', 'wcsuccess_add_tracking_menu');
function wcsuccess_display_tracking_data() {
global $wpdb;
$table_name = $wpdb->prefix . 'visitor_tracking';
$tracking_data = $wpdb->get_results("SELECT * FROM $table_name ORDER BY visit_time DESC");
echo '<div class="wrap">';
echo '<h1>Visitor Tracking</h1>';
echo '<table class="wp-list-table widefat fixed striped">';
echo '<thead><tr><th>ID</th><th>Visit Time</th><th>IP Address</th><th>User Agent</th><th>Referrer</th><th>Page URL</th></tr></thead>';
echo '<tbody>';
foreach ($tracking_data as $data) {
echo '<tr>';
echo '<td>' . $data->id . '</td>';
echo '<td>' . $data->visit_time . '</td>';
echo '<td>' . $data->ip_address . '</td>';
echo '<td>' . $data->user_agent . '</td>';
echo '<td>' . $data->referrer . '</td>';
echo '<td>' . $data->page_url . '</td>';
echo '</tr>';
}
echo '</tbody></table>';
echo '</div>';
}
This code creates an admin page under the “Visitor Tracking” menu where you can view the recorded visitor data.
Step 4: Secure the Admin Page
To ensure only users with the appropriate permissions can access the visitor tracking page, we need to add a capability check. Check, and if necessary update the wcsuccess_add_tracking_menu function as follows:
/*
* Snippet: How to Track WordPress Visitors and Page Views Without a Plugin – 2026
* Author: John Cook
* URL: https://wcsuccessacademy.com/?p=1290
* Tested with WooCommerce 10.7.0
* "Secure the admin page"
*/
function wcsuccess_add_tracking_menu() {
add_menu_page(
'Visitor Tracking',
'Visitor Tracking',
'manage_options',
'visitor-tracking',
'wcsuccess_display_tracking_data',
'dashicons-chart-bar',
27
);
}
add_action('admin_menu', 'wcsuccess_add_tracking_menu');
This ensures that only users with the manage_options capability can access the visitor tracking page.
Step 5: Trigger Database Creation
To ensure the database creation is triggered, you will need to switch themes and switch back again. The database creation is hooked into the after_theme_switch hook. Triggering a change the visitor tracking table will be added.
Step 6: View Visitor Data
With the above code added to your theme’s functions.php file, you can now view detailed visitor tracking data from your WordPress admin dashboard. Navigate to Visitor Tracking under the admin menu to see the recorded data.
Conclusion
Tracking visitors and page views is crucial for gaining insights into your website’s performance and user behavior. By following the steps outlined in this guide, you can implement a visitor tracking system in WordPress without using a plugin. This approach offers a lightweight and customizable solution tailored to your specific needs.
Implementing visitor tracking helps you monitor your website’s traffic, identify popular pages, and understand user behavior. With this information, you can make data-driven decisions to improve your site’s user experience and overall performance.
Place these code snippets in your theme’s functions.php file to start tracking visitors and page views on your WordPress site. Customize the provided code to fit your specific needs and enhance your WordPress site’s functionality.
By implementing this feature, you’ll be able to monitor your site’s traffic and gain valuable insights to optimize your website’s performance and user engagement. Happy coding!
I have been working with WordPress and WooCommerce since 2012 and have developed a deep knowledge of the content management system. Since 2012, I have developed several plugins and designed dozens of websites utilising different frameworks, CMS’s and programming languages. I am proficient in PHP, Python, Java, C, C++, R and JavaScript with limited experience in Go, Kotlin and Swift.
Educationally, I have a Master’s degree in cyber security a Bachelor’s (Hons, First Class) in Applied Research and a Graduate Certificate in Data Science. I’m currently undertaking PhD studies investigating IoT cybersecurity. I recently graduated with First Class Honours and Masters of Information Technology, receiving the Executive Dean’s Award for studies undertaken in the 2021 and 2022 academic years. I have worked in the information technology industry for the past 11 years primarily as a software/web developer specific to design, optimisation, network management and security. My research interests are in the areas of Internet of Things (IoT), 5G and Beyond Networks, information security for wireless networks and software development.
Stay In Touch


wrong code
You’ll need to switch themes and back again to trigger the creation of the custom database table. Once that is done visitors will be tracked to the database