* * @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/ */ /** * @internal never define functions inside callbacks. * these functions could be run multiple times; this would result in a fatal error. */ /** * custom option and settings */ function xarxaprod_plugin_settings_init() { // Register a new setting for "xxpplugin" page. register_setting( 'xxpplugin', 'xarxaprod_plugin_options' ); // Register a new section in the "xxpplugin" page. add_settings_section( 'xarxaprod_plugin_section_options', __( 'Control de les opcions de la web Xarxaprod', 'xxpplugin' ), 'xarxaprod_plugin_section_options_callback', 'xxpplugin' ); // Register a new field in the "xarxaprod_plugin_section_options" section, inside the "xxpplugin" page. add_settings_field( 'xarxaprod_plugin_field_reusableblocks', // As of WP 4.6 this value is used only internally. // Use $args' label_for to populate the id inside the callback. __( 'Reusable blocks', 'xxpplugin' ), 'xarxaprod_plugin_field_reusableblocks_cb', 'xxpplugin', 'xarxaprod_plugin_section_options', array( 'label_for' => 'xarxaprod_plugin_field_reusableblocks', 'class' => 'xarxaprod_plugin_row', 'xarxaprod_plugin_custom_data' => 'custom', ) ); } /** * Register our xarxaprod_plugin_settings_init to the admin_init action hook. */ add_action( 'admin_init', 'xarxaprod_plugin_settings_init' ); /** * Custom option and settings: * - callback functions */ /** * Xarxaprod section callback function. * * @param array $args The settings array, defining title, id, callback. */ function xarxaprod_plugin_section_options_callback( $args ) { ?>

. * - the "class" key value is used for the "class" attribute of the containing the field. * Note: you can add custom key value pairs to be used inside your callbacks. * * @param array $args */ function xarxaprod_plugin_field_reusableblocks_cb( $args ) { // Get the value of the setting we've registered with register_setting() $options = get_option( 'xarxaprod_plugin_options' ); ?>

Reusable Blocks

. * - the "class" key value is used for the "class" attribute of the containing the field. * Note: you can add custom key value pairs to be used inside your callbacks. * * @param array $args */ /** * top level menu * https://developer.wordpress.org/reference/functions/add_menu_page/ */ if( ! function_exists('xarxaprod_plugin_options_page') ){ function xarxaprod_plugin_options_page() { // add top level menu page add_menu_page( $page_title = 'Xarxaprod plugin options', // $page_title $menu_title = 'Xarxaprod', //$menu_title $capability = 'manage_options', //'edit_others_posts', // $capability $menu_slug = 'xxpplugin-options', // $menu_slug $function = 'xarxaprod_plugin_options_page_html', //$function $icon_url = 'dashicons-sos',// $icon_url //https://developer.wordpress.org/resource/dashicons/#menu $position = '25'// $position ); } } /** * Register our xarxaprod_plugin_options_page to the admin_menu action hook. */ add_action( 'admin_menu', 'xarxaprod_plugin_options_page' ); /** * Top level menu callback function */ function xarxaprod_plugin_options_page_html() { // check user capabilities if ( ! current_user_can( 'manage_options' ) ) { 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( 'xarxaprod_plugin_messages', 'xarxaprod_plugin_message', __( 'Settings Saved', 'xxpplugin' ), 'updated' ); } // show error/update messages settings_errors( 'xarxaprod_plugin_messages' ); ?>