Ejemplo opciones en WordPress

<?php
/**
 * Plugin Name: Contar palabras
 * Description: Cuenta las palabras que tiene una entrada del blog y lo pone al final
 * Version: 1.1
 * Author: Jotapé
 */


// Esta función se encarga de contar las palabras y añadirlas
function contar_palabras($content){
    $ppm=get_option( 'palabras_minuto_default', 200 );
    // usamos str_word_count para contar las palabras: se puede mejorar para no contar html o imágenes o etc...
    $num_palabras=str_word_count($content);
    // Calculo el tiempo de lectura
    $tiempo=round($num_palabras/$ppm,1);
    // Creo el texto a añadir. Como son comillas dobles puedo poner la variable dentro
    $texto="Número de palabras: <b>$num_palabras</b>. Tiempo estimado de lectura: <b>$tiempo minutos</b>";

    // Devuelvo el contenido con el texto anterior. 
    return "<p>$texto</p>$content";
}

// Añado el filtro para modificar el contenido
add_filter("the_content","contar_palabras");

function ppm_add_admin_menu() {
    add_menu_page(
        'Palabras por minuto', // Título de la página
        'Config PPM',              // Texto en el menú
        'manage_options',             // Capacidad requerida
        'ppm-config',                 // Slug del menú
        'ppm_options_page_html',      // Callback
        'dashicons-admin-generic',    // Icono
        20                            // Posición
    );
}
add_action( 'admin_menu', 'ppm_add_admin_menu' );

function ppm_settings_init() {
    register_setting( 'options_contar_palabras', 'palabras_minuto_default', array(
        'type' => 'integer',        
    'sanitize_callback' => 'absint',
        'default' => 200,
    ) );

    add_settings_section(
        'contar_palabras_section',
        'Configuración de las palabras por minuto',
        function() { echo '<p>Configura el valor de las palabras por minuto para estimar el tiempo de lectura.</p>'; },
        'options_contar_palabras'
    );

    add_settings_field(
        'palabras_minuto_default',
        'Palabras por minuto por defecto',
        'asp_field_palabras_render',
        'options_contar_palabras',
        'contar_palabras_section'
    );
}
add_action( 'admin_init', 'ppm_settings_init' );

function asp_field_palabras_render() {
    $valor = get_option( 'palabras_minuto_default', 200 );
    echo '<input type="number" name="palabras_minuto_default" value="' . esc_attr( $valor ) . '" min="50" max="500">';
}

function ppm_options_page_html() {
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?>
    <div class="wrap">
        <h1>Configuración de las palabras por minuto por defecto</h1>
        <form action="options.php" method="post">
            <?php
            settings_fields( 'options_contar_palabras' );
            do_settings_sections( 'options_contar_palabras' );
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos