Hi, all,
I’d be interested in feedback/advice. I usually limit myself to HTML and CSS and tweaking snippets of PHP and JavaScript.
But I had some particular requirements for a plugin for Pirsch on my sites so ChatGPT and I created this.
My requirements are:
- Simple plugin so I can easily update the Pirsch code (for example, change all my sites to the latest pa.js
- Ignore page views if the visitor is logged in
- display a nag message if I haven’t set the Identification Code
And this is what we came up with:
<?php
/**
* Plugin Name: fm Pirsch
* Plugin URI: https://fairlymarvellous.co.uk
* Description: Adds Pirsch Analytics code for non-logged-in visitors
* Version: 1.00
* Author: Jonathan Gwyer
* Author URI: https://fairlymarvellous.co.uk
*/
// Add Settings Page
function fmpirsch_settings_page() {
add_options_page(
'fm Pirsch Settings',
'fm Pirsch',
'manage_options',
'fmpirsch-settings',
'fmpirsch_settings_page_content'
);
}
add_action('admin_menu', 'fmpirsch_settings_page');
function fmpirsch_settings_page_content() {
?>
<div class="wrap">
<h2>fm Pirsch Settings</h2>
<form method="post" action="options.php">
<?php settings_fields('fmpirsch_settings_group'); ?>
<?php do_settings_sections('fmpirsch-settings'); ?>
<?php submit_button(); ?>
</form>
</div>
<?php
}
// Register Settings
function fmpirsch_register_settings() {
register_setting('fmpirsch_settings_group', 'fmpirsch_identification_code', 'fmpirsch_sanitize_options');
add_settings_section(
'fmpirsch_section',
'Identification Code Settings',
'fmpirsch_section_callback',
'fmpirsch-settings'
);
add_settings_field(
'fmpirsch_identification_code_field',
'Identification Code:',
'fmpirsch_identification_code_field_callback',
'fmpirsch-settings',
'fmpirsch_section'
);
}
add_action('admin_init', 'fmpirsch_register_settings');
function fmpirsch_section_callback() {
echo '<p>Enter your Identification Code below:</p>';
}
function fmpirsch_identification_code_field_callback() {
$options = get_option('fmpirsch_identification_code');
echo '<input type="text" id="fmpirsch_identification_code_field" name="fmpirsch_identification_code[identification_code]" value="' . esc_attr($options['identification_code']) . '" />';
}
function fmpirsch_sanitize_options($input) {
$sanitized_input = array();
if (isset($input['identification_code'])) {
$sanitized_input['identification_code'] = sanitize_text_field($input['identification_code']);
}
return $sanitized_input;
}
// Insert JavaScript Code
function fmpirsch_insert_code() {
$options = get_option('fmpirsch_identification_code');
if (!is_user_logged_in() && !empty($options['identification_code'])) {
?>
<script defer src="https://api.pirsch.io/pa.js"
id="pianjs"
data-code="<?php echo $options['identification_code']; ?>"></script>
<?php
}
}
add_action('wp_head', 'fmpirsch_insert_code');
// Check if Identification Code is set
function fmpirsch_check_identification_code() {
$options = get_option('fmpirsch_identification_code');
if (is_user_logged_in() && empty($options['identification_code'])) {
add_action('admin_notices', 'fmpirsch_display_identification_code_notice');
}
}
add_action('admin_init', 'fmpirsch_check_identification_code');
// Display notice if Identification Code is not set
function fmpirsch_display_identification_code_notice() {
?>
<div class="notice notice-error">
<p><?php esc_html_e('fm Pirsch Identification Code is not set. Please set the Identification Code in the settings.'); ?></p>
</div>
<?php
}
Any comments? Want to use it yourself or tidy it up so it doesn’t look like it was generated by AI?
Be nice