Plik główny pika-ripple-button.php
<?php
/*
Plugin Name: Pika Ripple Button Plugin
Description: Plugin ma na celu zmianę wyglądu obecnych przycisków tworzonych za pomocą bloków Gutenberg oraz dodanie do nich efektu ripple po kliknięciu.
Author: pikademia
Version: 1.0.0
Author URI: https://pikademia.pl
*/
if ( !defined( 'ABSPATH' ) ) {
exit;
}
define ('PIKA_RIPPLE_PLUGIN_URL', trailingslashit( plugins_url('/',__FILE__) ));
function pika_ripple_plugin(){
wp_enqueue_style('pika-ripple-plugin-style',PIKA_RIPPLE_PLUGIN_URL.'pika-style.css','',rand());
$color = esc_attr(get_option('bgcolor')) ;
$color2 = esc_attr(get_option('bgcolorhover'));
$custom_css = '';
if($color!=''){
$custom_css .= "a.piBtn{background-color: {$color};}";
}
if($color2!=''){
$custom_css .= "a.piBtn:hover{background-color: {$color2};}";
}
wp_add_inline_style( 'pika-ripple-plugin-style', $custom_css );
wp_enqueue_script('pika-ripple-plugin-script',PIKA_RIPPLE_PLUGIN_URL.'pika-script.js', array('jquery'),rand(), true );
}
add_action('wp_enqueue_scripts','pika_ripple_plugin');
include (plugin_dir_path( __FILE__ ) .'pika-settings.php');
Plik pika-settings.php z funkcją tworzenia strony z ustawieniami
<?php
// add settings page
function pika_rp_add_admin_page(){
add_menu_page(
'Pika Ripple Button Settings', // tytuł strony
'Pika Ripple Button', // tytuł menu widoczny w admin!!!
'manage_options', // capability
'pika_rp_id', //id !!!
'pika_rp_create_page', //callback func. do utworzenia !!!!
'dashicons-editor-expand', //ikona
110 //położenie w menu
);
}
add_action('admin_menu','pika_rp_add_admin_page');
function pika_rp_create_page(){
echo '<h1>Pika Ripple Button Settings</h1>';
settings_errors();
echo '<form method="post" action="options.php">';
settings_fields('pika-rp-settings-group');
do_settings_sections('pika_rp_id');
submit_button();
echo '</form>';
echo 'Odwiedź nas na <a href="https://www.pikademia.pl/">www.pikademia.pl</a>';
}
function pika_rp_custom_settings(){
register_setting(
'pika-rp-settings-group', // nazwa grupy opcji, do której się donosimy w funkcji settings_fields()
'bgcolor' // id opcji !!!!
);
register_setting(
'pika-rp-settings-group', // nazwa grupy opcji, do której się donosimy w funkcji settings_fields()
'bgcolorhover' // id opcji !!!!
);
add_settings_section(
'pika-rp-myoptions', // id slug do identyfikacji sekcji w metodzie add_settings_field() !!!!
'Add colors in hex format with # (eg. #44aaaa)', // wyświetlany tytuł, może być pusty
'pika_rp_options', // callback function do utworzenia !!!
'pika_rp_id' // id strony na której dodajemy sekcję(pobieramy z funkcji pikademia_add_admin_page)!!!
);
add_settings_field(
'colorid', // id
'Bg color / Bg hover color', // wyświetlany tytuł pola !!
'pika_rp_settings_field', //function callback do utworzenia !!!
'pika_rp_id', //id strony !!!
'pika-rp-myoptions' //section id z metody add_settings_section !!!
);
}
add_action('admin_init', 'pika_rp_custom_settings');
function pika_rp_options(){
// echo "Sekcja z ustawieniami";
}
function pika_rp_settings_field(){
$btncolor = esc_attr(get_option('bgcolor'));
echo '<input type="text" name="bgcolor" value="'.$btncolor.'" placeholder="color"/>';
$btncolorhover = esc_attr(get_option('bgcolorhover'));
echo '<input type="text" name="bgcolorhover" value="'.$btncolorhover.'" placeholder="color hover"/>';
}
Plik uninstall.php
<?php
// if uninstall.php is not called by WordPress, die
if (!defined('WP_UNINSTALL_PLUGIN')) {
die;
}
delete_option('bgcolor');
delete_option('bgcolorhover');
Plik pika-script.js
jQuery( function ( $ ) {
$(".wp-block-button__link").each(function(index){
$(this).removeClass().addClass("piBtn").click(function(e){
let ripples = $(document.createElement('span')).addClass("piBtnSpan");
let offset = $(this).offset();
ripples.css("left", e.pageX - offset.left);
ripples.css("top", e.pageY - offset.top);
$(this).append(ripples);
setTimeout(()=>{ripples.remove()},300);
})
})
})
Plik pika-style.css
a.piBtn{
background-color: #44aaaa;
color: azure;
padding: 15px 30px;
text-decoration: none;
text-transform: uppercase;
font-size: 18px;
overflow:hidden;
display: block;
position: relative;
text-align:center;
cursor:pointer;
-webkit-transition: background-color 0.3s ease-out;
-moz-transition: background-color 0.3s ease-out;
-o-transition: background-color 0.3s ease-out;
transition: background-color 0.3s ease-out;
}
a.piBtn:hover{
background-color:#aa4444;
-webkit-transition: background-color 0.3s ease-out;
-moz-transition: background-color 0.3s ease-out;
-o-transition: background-color 0.3s ease-out;
transition: background-color 0.3s ease-out;
}
.piBtnSpan{
position: absolute;
background: #fff;
pointer-events: none;
border-radius: 50%;
transform:translate(-50%, -50%);
animation: animate 0.3s linear infinite;
}
@keyframes animate{
0%{
width:0px;
height:0px;
opacity:0.8;
}
100%{
width:300px;
height:300px;
opacity:0;
}
}