Activar i desinstal·lar un plugin
Afegirem una pàgina de configuració i integrar-la amb la base de dades, per fer-ho implementarem la funcionalitat per permetre als usuaris canviar el color per defecte del banner.
Això requerirà modificar tres parts del plugin "Banner Personalitzat":
-
Activació/Desactivació: Crear i eliminar la taula de la base de dades.
-
Administració: Afegir el menú i la pàgina de configuració.
-
Shortcode: Recuperar el color per defecte de la nova taula de la BBDD.
Introduirem els següents canvis al plugin:
-
Crea una taula de configuració en activar-se.
-
Mostra una pàgina de configuració a l'administració per guardar un nou color.
-
Utilitza el color guardat com a valor per defecte del shortcode.
-
Neteja la taula de la BBDD en desinstal·lar-se.
Gestió base dades (Activació i Desinstal·lació)
Modificarem el fitxer principal banner-personalitzat.php per gestionar les funcions d'activació i desinstal·lació.
Creació taula (bp_activar_plugin)
Utilitzarem la funció especial register_activation_hook per executar el codi que crea la taula.
// Fitxer: banner-personalitzat.php
// ... [El codi de definició de constants i càrrega d'assets ja existent] ...
// 1. Funció d'Activació: Crea la taula
function bp_activar_plugin() {
global $wpdb;
// El nom de la taula (prefix de WP + nom propi)
$taula_nom = $wpdb->prefix . 'bp_configuracio';
// Incloure el fitxer d'actualització de WordPress (necessari per a dbDelta)
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
// Consulta SQL per crear la taula
$sql = "CREATE TABLE $taula_nom (
id mediumint(9) NOT NULL AUTO_INCREMENT,
opcio_clau varchar(50) NOT NULL,
opcio_valor varchar(50) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY opcio_clau (opcio_clau)
) $wpdb->charset_collate;";
// Executar la consulta
dbDelta( $sql );
// Inserir el valor per defecte del color si la taula és nova
$wpdb->insert(
$taula_nom,
array(
'opcio_clau' => 'color_per_defecte',
'opcio_valor' => '#0073aa' // Color blau per defecte inicial
)
);
}
register_activation_hook( __FILE__, 'bp_activar_plugin' );
// 2. Funció de Desinstal·lació: Elimina la taula
function bp_desinstal_plugin() {
global $wpdb;
$taula_nom = $wpdb->prefix . 'bp_configuracio';
// Consulta SQL per eliminar la taula
$sql = "DROP TABLE IF EXISTS $taula_nom";
$wpdb->query( $sql );
}
// NOTA: Cal registrar-la com a hook d'uninstall per esborrar-la de la BBDD quan
// l'usuari tria 'Esborrar' el plugin.
register_uninstall_hook( __FILE__, 'bp_desinstal_plugin' );
Pàgina configuració administració
Crearem un nou fitxer per a la lògica de l'administració i definirem el menú i el formulari.
Arxiu lògica (includes/admin.php)
Crea el fitxer includes/admin.php i afegeix-lo a la càrrega del teu fitxer principal banner-personalitzat.php:
// Fitxer: banner-personalitzat.php
// ... [Abans de carregar el shortcode.php] ...
// Carregar fitxers de lògica de l'administració
require_once( BP_PATH . 'includes/admin.php' );
// ...
Implementació pàgina
El fitxer includes/admin.php contindrà:
-
La funció per afegir el menú.
-
La funció per gestionar la presentació (HTML) de la pàgina.
-
La funció per guardar la informació del formulari.
<?php
// Fitxer: includes/admin.php
// Funció per afegir el menú d'administració
function bp_menu_administracio() {
add_menu_page(
'Configuració del Banner', // Títol de la pàgina
'Config. Banner', // Text del menú
'manage_options', // Capacitat requerida
'bp-configuracio', // Slug del menú
'bp_pagina_configuracio', // Funció que mostra el contingut
'dashicons-art', // Icona
60 // Posició (a prop dels Posts)
);
}
add_action( 'admin_menu', 'bp_menu_administracio' );
// Funció per guardar els valors del formulari
function bp_gestionar_post() {
// 1. Verificar si s'ha enviat el formulari
if ( isset( $_POST['bp_submit'] ) ) {
// 2. Comprovar el nonce de seguretat
if ( ! isset( $_POST['bp_configuracio_nonce'] ) ||
! wp_verify_nonce( $_POST['bp_configuracio_nonce'], 'bp_guardar_color' ) ) {
return; // Fallada de seguretat
}
// 3. Comprovar permisos de l'usuari
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
// 4. Netejar i guardar el nou valor
global $wpdb;
$taula_nom = $wpdb->prefix . 'bp_configuracio';
$nou_color = sanitize_text_field( $_POST['bp_color_per_defecte'] );
$wpdb->update(
$taula_nom,
array( 'opcio_valor' => $nou_color ),
array( 'opcio_clau' => 'color_per_defecte' )
);
// Mostrar missatge de confirmació
add_settings_error( 'bp_missatges', 'bp_missatge_guardat', 'Configuració desada correctament.', 'success' );
}
}
// Hook per processar l'enviament del formulari a temps.
add_action( 'admin_init', 'bp_gestionar_post' );
// Funció que mostra el contingut HTML de la pàgina de configuració
function bp_pagina_configuracio() {
global $wpdb;
$taula_nom = $wpdb->prefix . 'bp_configuracio';
// Recuperar el valor actual de la base de dades
$color_actual = $wpdb->get_var(
$wpdb->prepare( "SELECT opcio_valor FROM $taula_nom WHERE opcio_clau = %s", 'color_per_defecte' )
);
?>
<div class="wrap">
<h2>Configuració del Banner Personalitzat</h2>
<?php settings_errors( 'bp_missatges' ); ?>
<form method="post" action="">
<?php
// Camp de seguretat (Nonce)
wp_nonce_field( 'bp_guardar_color', 'bp_configuracio_nonce' );
?>
<table class="form-table">
<tr>
<th scope="row">
<label for="bp_color_per_defecte">Color per Defecte del Banner</label>
</th>
<td>
<input name="bp_color_per_defecte" type="text" id="bp_color_per_defecte"
value="<?php echo esc_attr( $color_actual ); ?>" class="regular-text" />
<p class="description">Introdueix un codi de color hexadecimal (Ex: #FF0000).</p>
</td>
</tr>
</table>
<p class="submit">
<input type="submit" name="bp_submit" id="submit"
class="button button-primary" value="Desar Canvis">
</p>
</form>
</div>
<?php
}
Recuperació del color al shortcode
Finalment, cal actualitzar el fitxer includes/shortcode.php perquè, quan l'usuari no especifiqui un color en el shortcode, es busqui el valor per defecte a la taula.
Funció auxiliar per recuperar el color
Afegirem una petita funció per obtenir el color.
// Fitxer: includes/shortcode.php
/**
* Funció auxiliar per obtenir el color per defecte de la BBDD
* @return string Color hexadecimal per defecte
*/
function bp_obtenir_color_per_defecte() {
global $wpdb;
$taula_nom = $wpdb->prefix . 'bp_configuracio';
$color = $wpdb->get_var(
$wpdb->prepare( "SELECT opcio_valor FROM $taula_nom WHERE opcio_clau = %s", 'color_per_defecte' )
);
// Retorna el color o un color de reserva si no es troba
return $color ? $color : '#0073aa';
}
// Funció que processa el shortcode [banner]
function bp_shortcode_banner( $atts, $content = null ) {
// 1. Definir els valors per defecte dels paràmetres
$color_default_db = bp_obtenir_color_per_defecte(); // <--- OBTENIM EL COLOR DE LA BBDD
$params = shortcode_atts(
array(
'titol' => 'Benvingut!',
'tipus' => 'informatiu',
'color' => $color_default_db, // <--- ÚS DEL COLOR DE LA BBDD
),
$atts,
'banner'
);
// ... [La resta del codi del shortcode segueix igual] ...
extract( $params );
$content = do_shortcode( $content );
ob_start();
include BP_PATH . 'templates/banner-template.php';
$output = ob_get_clean();
return $output;
}
// ...