2021-02-18 15:27:46 +01:00
< ? php
/**
2021-11-24 14:18:26 +01:00
* Plugin Name
*
* @ package Biofriction - website options
* @ author jorge - vitrubio . net
* @ copyright 2021 jorge - vitrubio . net & hangar . org
* @ license GPL - 3.0 - or - later
*
* @ wordpress - plugin
* Plugin Name : Biofriction - website options
* Plugin URI : https :// git . hangar . org / hangar - tech / biofriction - wp - plugin
* Description : All the < strong > options </ strong > for < strong > Biofriction website </ strong > wich do not come by default with wordpress such as : selector for showing buttons , a date picker for old posts , and any other needs .
* Version : 0.4
* Date : 2021 11 24
* Requires at least : 5.2
* Requires PHP : 7.2
* Author : jorge - vitrubio . net
* Author URI : https :// vitrubio . net /
* Text Domain : bfr_plugin_txtdomain
* Domain Path : / languages
* License : GPL 3.0
* License URI : https :// www . gnu . org / licenses / gpl - 3.0 . html
* Update URI : https :// git . hangar . org / hangar - tech / biofriction - wp - theme . git
2021-02-18 15:27:46 +01:00
*/
/*
if ever read this never forget to check
howto write a pluggin by Wordpress . org
2021-11-24 14:18:26 +01:00
https :// developer . wordpress . org / plugins /
2021-02-18 15:27:46 +01:00
and the best practices
https :// developer . wordpress . org / plugins / plugin - basics / best - practices /
*/
defined ( 'ABSPATH' ) or die ( 'No script kiddies please!' );
2021-11-24 14:18:26 +01:00
// Load translation, if it exists
function bfr_plugin_init () {
$plugin_dir = basename ( dirname ( __FILE__ ));
load_plugin_textdomain ( 'bfr_plugin_txtdomain' , null , $plugin_dir . '/assets/languages/' );
}
add_action ( 'plugins_loaded' , 'bfr_plugin_init' );
// add settings link in pluggin page
function bfr_plugin_plugin_action_links ( $links , $file ) {
$this_plugin = basename ( plugin_dir_url ( __FILE__ )) . '/bfr-theme-plugin.php' ;
if ( $file == $this_plugin ) {
$links [] = '<a href="admin.php?page=biofriction-options">' . __ ( 'Settings' , 'bfr_plugin_txtdomain' ) . '</a>' ;
}
return $links ;
}
add_filter ( 'plugin_action_links' , 'bfr_plugin_plugin_action_links' , 10 , 2 );
// Registers stylesheet for a custom plugin.
2021-02-18 15:27:46 +01:00
function biofriction_theme_plugin_styles_admin () {
2021-11-24 14:18:26 +01:00
add_editor_style ( 'assets/css/bfr-theme-plugin.css' );
2021-02-18 15:27:46 +01:00
}
add_action ( 'admin_init' , 'biofriction_theme_plugin_styles_admin' );
2021-11-24 14:18:26 +01:00
// enqueue scripts and styles
2021-02-18 15:27:46 +01:00
function biofriction_theme_plugin_styles_public () {
2021-11-24 14:18:26 +01:00
wp_enqueue_style ( 'bfr-theme-plugin' , plugin_dir_url ( __FILE__ ) . 'assets/css/bfr-theme-plugin.css' , array (), filemtime ( plugin_dir_url ( __FILE__ ) . 'assets/css/bfr-theme-plugin.css' ), 'all' );
2021-02-18 15:27:46 +01:00
}
add_action ( 'wp_enqueue_scripts' , 'biofriction_theme_plugin_styles_public' );
2021-11-24 14:18:26 +01:00
/* *
* Custom button in TINYMCE editor for styling
* * * * * * * * * * * * * * * * * * * * * * */
// as read on
// https://codex.wordpress.org/Plugin_API/Filter_Reference/mce_buttons,_mce_buttons_2,_mce_buttons_3,_mce_buttons_4
2021-02-18 15:27:46 +01:00
// https://www.wpbeginner.com/wp-tutorials/how-to-add-custom-styles-to-wordpress-visual-editor/
// https://kinsta.com/blog/wordpress-tinymce-editor/
// Callback function to insert 'styleselect' into the $buttons array
if ( ! function_exists ( 'bfr_mce_buttons' ) ) :
function bfr_mce_buttons ( $buttons ) {
// array_unshift( $buttons, 'styleselect', 'removeformat' );
array_push ( $buttons , 'styleselect' , 'removeformat' );
return $buttons ;
2021-11-24 14:18:26 +01:00
}
2021-02-18 15:27:46 +01:00
endif ;
// Register our callback to the appropriate filter
add_filter ( 'mce_buttons_2' , 'bfr_mce_buttons' );
// Callback function to filter the MCE settings
if ( ! function_exists ( 'bfr_mce_before_init_insert_formats' ) ) :
function bfr_mce_before_init_insert_formats ( $init_array ) {
// Define the style_formats array
$style_formats = array (
// Each array child is a format with it's own settings
array (
'title' => 'button' ,
'block' => 'span' ,
'classes' => 'button' ,
'wrapper' => true ,
),
array (
'title' => 'button secondary' ,
'block' => 'span' ,
'classes' => 'button secondary' ,
'wrapper' => true ,
),
array (
'title' => 'button hollow' ,
'block' => 'span' ,
'classes' => 'button hollow primary' ,
'wrapper' => true ,
),
array (
'title' => 'button hollow secondary' ,
'block' => 'span' ,
'classes' => 'button hollow secondary' ,
'wrapper' => true ,
),
);
// Insert the array, JSON ENCODED, into 'style_formats'
$init_array [ 'style_formats' ] = json_encode ( $style_formats );
return $init_array ;
}
endif ;
// Attach callback to 'tiny_mce_before_init'
add_filter ( 'tiny_mce_before_init' , 'bfr_mce_before_init_insert_formats' );
// function biofriction_mce_buttons_3( $buttons ) {
// $buttons[] = 'superscript';
// $buttons[] = 'subscript';
// $buttons[] = 'cut' ;
// $buttons[] = 'copy' ;
// $buttons[] = 'paste' ;
// $buttons[] = 'hr' ;
// $buttons[] = 'backcolor' ;
// $buttons[] = 'newdocuement' ;
// $buttons[] = 'formatselect' ;
// $buttons[] = 'fontselect' ;
// $buttons[] = 'fontsizeselect' ;
// $buttons[] = 'styleselect' ;
// return $buttons;
// }
// add_filter( 'mce_buttons_3', 'biofriction_mce_buttons_3' );
2021-11-24 14:18:26 +01:00
/**
*
* Custom settings page
* * * * * * * * * * * * * * * * * * /
*
* @ internal never define functions inside callbacks .
* these functions could be run multiple times ; this would result in a fatal error .
* https :// developer . wordpress . org / plugins / settings / custom - settings - page /
*/
/**
* custom option and settings
*/
2021-02-18 15:27:46 +01:00
function bfr_settings_init () {
2021-11-24 14:18:26 +01:00
// register a new setting for "bfr" page
register_setting ( 'bfr_settings' , 'bfr_options' );
// register a new section in the "bfr" page
add_settings_section (
'bfr_section_olderthandate' ,
__ ( 'Biofrictions Options.' , 'bfr_plugin_txtdomain' ),
'bfr_section_olderthandate_cb' ,
'bfr_settings'
);
// register a new field in the "bfr_section_olderthandate" section, inside the "bfr" page
add_settings_field (
'bfr_field_olderthandate' , // as of WP 4.6 this value is used only internally
// use $args' label_for to populate the id inside the callback
__ ( 'Hide content older than...' , 'bfr_plugin_txtdomain' ),
'bfr_field_olderthandate_cb' ,
'bfr_settings' ,
'bfr_section_olderthandate' ,
[
'label_for' => 'bfr_field_olderthandate' ,
'class' => 'bfr_row' ,
'bfr_custom_data' => 'custom' ,
]
);
2021-02-18 15:27:46 +01:00
}
/**
2021-11-24 14:18:26 +01:00
* register our bfr_settings_init to the admin_init action hook
*/
2021-02-18 15:27:46 +01:00
add_action ( 'admin_init' , 'bfr_settings_init' );
/**
2021-11-24 14:18:26 +01:00
* custom option and settings :
* callback functions
*/
2021-02-18 15:27:46 +01:00
// olderthandate section cb
// section callbacks can accept an $args parameter, which is an array.
// $args have the following keys defined: title, id, callback.
// the values are defined at the add_settings_section() function.
function bfr_section_olderthandate_cb ( $args ) {
2021-11-24 14:18:26 +01:00
?>
< p id = " <?php echo esc_attr( $args['id'] ); ?> " >
< ? php esc_html_e ( 'Here you should set the options for the older content to be marked as it.' , 'bfr_plugin_txtdomain' ); ?>
</ p >
< ? php
2021-02-18 15:27:46 +01:00
}
// daysback field cb
// field callbacks can accept an $args parameter, which is an array.
// $args is defined at the add_settings_field() function.
// wordpress has magic interaction with the following keys: label_for, class.
// the "label_for" key value is used for the "for" attribute of the <label>.
// the "class" key value is used for the "class" attribute of the <tr> containing the field.
// you can add custom key value pairs to be used inside your callbacks.
function bfr_field_olderthandate_cb ( $args ) {
2021-11-24 14:18:26 +01:00
// get the value of the setting we've registered with register_setting()
$options = get_option ( 'bfr_options' );
// output the field
?>
< p class = " description " >
< ? php _e ( 'You should set up the <b>number of days</b> from today to the past or the date from wich will be <b>considered old posts</b>. Then the class <span style="font-family:monospace;">oldpost</span> will be added to the post and pages so you can apply a css style to your theme.' , 'bfr_plugin_txtdomain' ); ?>
</ p >
< form id = " bfr-oldpost-numberofdays " class = " bfr-oldpost-numberofdays " >
< label for = " bfr-oldpost-numberofdays " > Number of days :</ label >
< input type = " number " id = " bfr-oldpost-numberofdays " name = " bfr-oldpost-numberofdays " min = " 1 " max = " 100 " >
</ form >
< form id = " bfr-oldpost-enddate " class = " bfr-oldpost-enddate " >
< label for = " bfr-oldpost-enddate " > Start date :</ label >
< input type = " date " id = " bfr-oldpost-enddate " name = " bfr-oldpost-endate " value = " " >
</ form >
<!-- borrar desde aqui -->
< p >
label_for :< ? php echo esc_attr ( $args [ 'label_for' ] ); ?>
< br />
bfr_custom_data :< ? php echo esc_attr ( $args [ 'bfr_custom_data' ] ); ?>
< br />
class :< ? php echo esc_attr ( $args [ 'class' ] ); ?>
< br />
< ? php esc_html_e ( 'daysback' , 'bfr_plugin_txtdomain' ); ?>
< br />
</ p >
<!-- borrar hasta aqui -->
< ? php
2021-02-18 15:27:46 +01:00
}
/**
2021-11-24 14:18:26 +01:00
* top level menu
* https :// developer . wordpress . org / reference / functions / add_menu_page /
*/
function bfr_options_page () {
// add top level menu page
add_menu_page (
$page_title = 'Biofriction Options' , // $page_title
$menu_title = 'Biofriction' , //$menu_title
$capability = 'manage_options' , //'edit_others_posts', // $capability
$menu_slug = 'biofriction-options' , // $menu_slug
$function = 'bfr_options_page_html' , //$function
$icon_url = 'dashicons-rest-api' , // $icon_url //https://developer.wordpress.org/resource/dashicons/#menu
$position = '50' // $position
);
}
// register our bfr_options_page to the admin_menu action hook
2021-02-18 15:27:46 +01:00
add_action ( 'admin_menu' , 'bfr_options_page' );
2021-11-24 14:18:26 +01:00
// top level menu: callback functions
2021-02-18 15:27:46 +01:00
function bfr_options_page_html () {
2021-11-24 14:18:26 +01:00
// check user capabilities
if ( ! current_user_can ( 'manage_options' ) ) {
?>
< p class = " description " >
< ? php esc_html_e ( 'Sorry, you do not have permission to edit this settings, please, contact any admin to get granted.' , 'bfr_plugin_txtdomain' ); ?>
</ p >
< ? php
return ;
}
// add error/update messages
// check if the user have submitted the settings
// wordpress will add the "settings-updated" $_GET parameter to the url
if ( isset ( $_GET [ 'settings-updated' ] ) ) {
// add settings saved message with the class of "updated"
add_settings_error ( 'bfr_messages' , 'bfr_message' , __ ( 'Settings Saved' , 'bfr_plugin_txtdomain' ), 'updated' );
}
// show error/update messages
settings_errors ( 'bfr_messages' );
?>
< div class = " wrap " >
< h1 >< ? php echo esc_html ( get_admin_page_title () ); ?> </h1>
< form action = " options.php " method = " post " >
< ? php
// output security fields for the registered setting "bfr"
settings_fields ( 'bfr_settings' );
// output setting sections and their fields
// (sections are registered for "bfr", each field is registered to a specific section)
do_settings_sections ( 'bfr_settings' );
// output save settings button
submit_button ( 'Save Settings' );
?>
</ form >
</ div >
< ? php
2021-02-18 15:27:46 +01:00
}
2021-11-24 14:18:26 +01:00
// Randomize images in gallery homepage
// https://plugins.trac.wordpress.org/browser/random-gallery/trunk/random-gallery.php