es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

WordPress: Validar metadatos y devolver mensaje de error en Gutenberg.

Anteriormente hice esto:

function my_save_post($post_id, $post, $update)
{
    $errors = new WP_Error('my_errors', 'Algo salió mal:');
    // si hay algún error
    $errors->add('my_errors', 'Mensaje de error');
    //...
    //...
    //...

    if (count($errors->get_error_messages()) > 1) {
        global $wpdb;
        // establecer el estado del post como **pendiente** ya que sus metadatos tienen errores.
        $wpdb->update($wpdb->posts, array('post_status' => 'pending'), array('ID' => $post->ID));
        set_transient('my_errors', $errors, 10);
    } else {
        // publicar el post y actualizar los metadatos
    }
}
add_action('save_post', 'my_save_post', 10, 3);


function my_notices()
{
    if ($errors = get_transient('my_errors')): ?>
        <div class="error">
        <?php foreach ($errors->get_error_messages() as $error): ?>
            <p><?php esc_html_e($error) ?></p>
        <?php endforeach; ?>
        </div><?php

        delete_transient('my_errors');
    endif;
}
add_action('admin_notices', 'my_notices');

Pero ahora no sé cómo implementarlo para validar los datos y, si hubo algún error, despublicar el post ya que tiene errores y luego mostrar algún mensaje de error en Gutenberg.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para implementar la validación de datos y despublicar la entrada si hay errores en Gutenberg mediante PHP, puedes seguir los siguientes pasos:

    1. En primer lugar, necesitas registrar un script para que se ejecute en el editor de Gutenberg, lo cual se puede hacer utilizando el gancho de acción enqueue_block_editor_assets. Este script contendrá la lógica de validación y manejo de errores.
    function my_editor_script() {
        wp_enqueue_script(
            'my-editor-script',
            get_template_directory_uri() . '/js/my-script.js',
            array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-data' ),
            filemtime( get_stylesheet_directory() . '/js/my-script.js' )
         );
    }
    add_action( 'enqueue_block_editor_assets', 'my_editor_script', 10 );
    
    1. En el archivo my-script.js, puedes agregar escuchadores de eventos para el evento save, que se activará cuando el usuario haga clic en el botón “Guardar”. Aquí es donde puedes realizar la validación de datos y manejar cualquier error.
    wp.data.subscribe(() => {
        const onSave = wp.data.select('core/editor').getSaveHandler();
    
        wp.data.dispatch('core/editor').lockPostSaving('my-save-validation');
    
        onSave().then(() => {
            const post = wp.data.select('core/editor').getCurrentPost();
            const meta = post.meta['_my_custom_meta'];
            const errors = [];
    
            // Realiza la lógica de validación y agrega mensajes de error al array `errors`
    
            if (errors.length > 0) {
                wp.data.dispatch('core/editor').unlockPostSaving('my-save-validation');
                wp.data.dispatch('core/editor').editPost({ status: 'pending' });
                wp.data.dispatch('core/notices').createNotice(
                    'error', // `error` para una notificación de error
                    'Mi mensaje de error personalizado', // El mensaje de error a mostrar
                    {
                        isDismissible: true // Permitir que el usuario descarte la notificación de error
                    }
                );
            }
        });
    });
    
    1. Por último, puedes utilizar el gancho de acción admin_notices para mostrar cualquier mensaje de error en el editor de Gutenberg.
    function my_gutenberg_notices() {
        $notices = get_option('my_editor_notices', '');
    
        foreach ($notices as $notice) {
            printf('<div class="%1$s">%2$s</div>', esc_attr($notice['type']), wp_kses_post($notice['message']));
        }
    
        update_option('my_editor_notices', '');
    }
    add_action( 'admin_notices', 'my_gutenberg_notices' );
    

    Este método te permite realizar la validación de datos y despublicar la entrada si hay errores, al mismo tiempo que muestra mensajes de error personalizados en Gutenberg.

Comments are closed.