Ejercicios shortcode

1.- Crear un shortcode llamado ‘cuestionario’ que nos muestre un texto de encabezado que ponga ‘Cuestionario de wwordpress’
2.- Sobre ese shortcode añadir un array de 10 preguntas sobre wordpress. Ejemplo:
$preguntas=[«¿Qué es wp?»,»Desde donde se descarga WP»,»Como se llama el contenido de wp que tiene etiquetas?»]
3.- En el shortcode elegir una pregunta al azar y crear un formulario con la pregunta, un campo para responder y un botón de enviar
4.- Recoger la respuesta y ver si es correcta comparándola con un array de respuestas, ejemplo:
$respuestas=[«CMS»,»wordpress.org»,»Entrada»]
Si la respuesta es correcta indicarlo y si no lo es, también

5.- Nivel Pro: Añadir cuatro respuestas que una sea la correcta y que el usuario la elija.

<?php
/*
Plugin Name: Cuestionario WP
Description: Un pequeño cuestionario para poner a prueba nuestros conocimientos
Version: 1.0
Author: Tu Nombre
*/

add_shortcode("cuestionario","crear_cuestionario");

function crear_cuestionario(){
    ob_start();
    $respuestas=["CMS","wordpress.org","Entrada"];
     if ( isset($_POST['fb_submit']) ) {
        
        $respuesta=sanitize_text_field($_POST['respuesta']);
        $numero=sanitize_text_field($_POST['pregunta']);
        if ($respuesta==$respuestas[$numero]){
            echo "Respuesta correcta ¡Muy bien!";
        }else{
            echo "Incorrecto, eres un looser";
        }
     }
    $preguntas=["¿Qué es wp?","Desde donde se descarga WP","Como se llama el contenido de wp que tiene etiquetas?"];
    $numero=rand(0,count($preguntas)-1);
    $pregunta=$preguntas[$numero];
     // Formulario HTML
    ?>
    <h2><?=$pregunta?></h2>
    <form method="post">
        <input type="hidden" name="pregunta" value="<?=$numero?>"/>
        <p>
            <label for="fb_titulo">Respuesta:</label><br>
            <input type="text" name="respuesta" id="respuesta" required style="width:100%;">
        </p>
       <p>
            <input type="submit" name="fb_submit" value="enviar respuesta">
        </p>
    </form>
    <?php
    return ob_get_clean();
}

Versión PRO

<?php
/*
Plugin Name: Cuestionario WP
Description: Un pequeño cuestionario para poner a prueba nuestros conocimientos
Version: 1.0
Author: Tu Nombre
*/

add_shortcode("cuestionario","crear_cuestionario");

function crear_cuestionario(){
    ob_start();
    $cuestionario=[
        ["pregunta"=>"¿Qué es wordpress?",
        "respuestas"=>["CMS","Web","La palabra de la prensa","No tengo ni idea"]],
         ["pregunta"=>"¿Desde donde se descarga WP?",
        "respuestas"=>["wordpress.org","Un sitio pirata","Mis descargas.com","Tengo miedo de descargar cosas"]],
         ["pregunta"=>"¿Cómo se llama el contenido que tiene etiquetas?",
        "respuestas"=>["Entradas","Etiquetometro","Páginas","Me llamo Ralph"]],
    ];
     if ( isset($_POST['fb_submit']) ) {
        $correcta=sanitize_text_field($_POST['correcta']);
        $respuesta=sanitize_text_field($_POST['respuesta']);
        if ($respuesta==$correcta){
            echo "Respuesta correcta ¡Muy bien!";
        }else{
            echo "Incorrecto, eres un looser";
        }
     }

    $elegida=$cuestionario[array_rand($cuestionario)];
    $correcta=$elegida['respuestas'][0];
    shuffle($elegida['respuestas']);
     // Formulario HTML
    ?>
    <h2><?=$elegida['pregunta']?></h2>
    <form method="post">
        <input type="hidden" name="correcta" value="<?=$correcta?>"/>
        <p>
            <label for="fb_titulo">Respuesta:</label><br>
            <?php  
                foreach($elegida['respuestas'] as $respuesta){
            ?>
                <label><input type="radio" name='respuesta' value='<?=$respuesta?>'>
                <?=$respuesta?></label>
            <?php
            s }
    ?> </p>
       <p>
            <input type="submit" name="fb_submit" value="enviar respuesta">
        </p>
    </form>
    <?php
    return ob_get_clean();
}

Ejemplo shortcode

/**
 * Shortcode: [form_borrador]
 */
function fb_formulario_shortcode() {
    ob_start();

    // Procesar el formulario si se envió
    if ( isset($_POST['fb_submit']) ) {
        
        $titulo   = sanitize_text_field($_POST['fb_titulo']);
        $contenido = sanitize_textarea_field($_POST['fb_contenido']);

        // Crear el borrador
        $nuevo_post = array(
            'post_title'   => $titulo,
            'post_content' => $contenido,
            'post_status'  => 'draft',
            'post_type'    => 'post'
        );

        $post_id = wp_insert_post($nuevo_post);

        if ($post_id) {
            echo "<p style='color:green;'><strong>✅ Borrador creado correctamente.</strong></p>";
        } else {
            echo "<p style='color:red;'><strong>❌ Hubo un error al crear el borrador.</strong></p>";
        }
    }

    // Formulario HTML
    ?>
    <form method="post">
    
        <p>
            <label for="fb_titulo">Título:</label><br>
            <input type="text" name="fb_titulo" id="fb_titulo" required style="width:100%;">
        </p>

        <p>
            <label for="fb_contenido">Contenido:</label><br>
            <textarea name="fb_contenido" id="fb_contenido" rows="6" required style="width:100%;"></textarea>
        </p>

        <p>
            <input type="submit" name="fb_submit" value="Crear borrador">
        </p>
    </form>
    <?php

    return ob_get_clean();
}
add_shortcode('form_borrador', 'fb_formulario_shortcode');

Ejercicio plugins

Crear un plugin que al final de cada entrada nos diga el número de palabras que tiene.

Es decir, tendremos que modificar el contenido (the_content) añadiendo al final el número de palabras

Pasos a realizar:

1.- Crear los archivos de plugin

2.- Conseguir que al final de cada entrada ponga ‘hola’ y comprobar que funciona

3.- Hacer un código que cuente las palabras de un texto en php y añadir ese número al final.

<?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){
    // 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/200,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");

Ejemplo plugin registro entradas

<?php
/**
 * Plugin Name: Registro entradas
 * Plugin URI: https://trifulcas.com
 * Description: Un plugin que registra en un archivo cuando se publica una entrada
 * Version: 1.0
 * Author: Jotapé
 * Author URI: https://trifulcas.com
 * License: GPL2
 */

function registrar($id,$post){
    // Poner el código para escribir en el archivo
    $texto=$post->post_title." | ".$post->post_author.PHP_EOL;
    $archivo = plugin_dir_path( __FILE__ ) . 'registro.txt';
    file_put_contents( $archivo, $texto, FILE_APPEND | LOCK_EX );
}

add_action('publish_post','registrar',10,2);

Ejemplo plugin wp

<?php
/**
 * Plugin Name: Mi Plugin Personalizado
 * Plugin URI: https://tusitio.com
 * Description: Un plugin simple para demostrar cómo crear uno.
 * Version: 1.0
 * Author: Tu Nombre
 * Author URI: https://tusitio.com
 * License: GPL2
 */


function mensaje_final_personalizado($content) {
    
$aforismos = [
    "La vida es aquello que te sucede mientras estás ocupado haciendo otros planes. – John Lennon",
    "El conocimiento es poder. – Francis Bacon",
    "Pienso, luego existo. – René Descartes",
    "La imaginación es más importante que el conocimiento. – Albert Einstein",
    "El hombre está condenado a ser libre. – Jean-Paul Sartre",
    "Solo sé que no sé nada. – Sócrates",
    "No hay camino para la paz, la paz es el camino. – Mahatma Gandhi",
    "El secreto de la felicidad no es hacer siempre lo que se quiere, sino querer siempre lo que se hace. – León Tolstói",
    "La esperanza es el sueño del hombre despierto. – Aristóteles",
    "El que tiene un porqué para vivir puede soportar casi cualquier cómo. – Friedrich Nietzsche"
];
$aforismo=$aforismos[mt_rand(0,9)];

    if (is_single()) {
        $content .= '<p style="color: green;">'.$aforismo.'</p>';
    }
    return $content;
}
add_filter('the_content', 'mensaje_final_personalizado');

Ejercicio Curriculum

Vamos a crear tres páginas:

Una página de contacto con nuestros datos de contacto y un mapa incrustado

Una página portfolio con una galería de imágenes de nuestros supuestos (o reales proyectos)

Una página de experiencia con todos los trabajos que hemos realizado.

Con lo que sabéis, hacedlas bonitas.

Con estas páginas haced un menú que vaya al menú hamburguesa

Después, cambiad el color de la parte izquierda por uno más agradable o, mejor, por un degradado elegante.

Haced otros cambios de css si lo consideráis oportuno.