Cómo llamar a las funciones de WordPress desde un script de procesamiento de formularios

2

Estoy trabajando en un complemento que envía datos a través de un formulario desde una página de administración personalizada. Esta es una versión simplificada de mi formulario:

<form action="<?php echo plugin_dir_path(); ?>/process.php" method="post">
    <input type="text" name="keyName">
    <input type="submit" value="Update">
</form>

El formulario está dentro de mi archivo php principal para el complemento, por lo que tiene acceso a todas las funciones de WordPress, como el plugin_dir_path () al que he llamado anteriormente.

Sin embargo, cuando el usuario hace clic en el botón "enviar" y la variable $ _POST se envía al script "process.php", pierdo el acceso a todas las funciones de WordPress en ese script de proceso.

Busqué cómo agregar funciones de WordPress en scripts externos y vi esta pregunta: ¿Cómo puedo llamar a las funciones básicas de WordPress en scripts externos?

La respuesta proporcionada es que incluyo esta línea de código en la parte superior de mi script de procesamiento:

require_once("wp-load.php");

Sin embargo, cuando hago "wp-load.php" se agrega al final de la url actual, lo que resulta en un error de tipo 404. No puedo usar la función "get_site_directory ()" para apuntar al directorio de instalación principal de WordPress porque es una función de WordPress.

¿Cómo puedo hacer que esto funcione? ¿Debo utilizar un enlace de acción para enviar el formulario frente a mi propio botón de envío personalizado?

    
pregunta YAHsaves 18.11.2018 - 08:38

1 respuesta

5

Nunca debes publicar nada directamente en los archivos de complementos. Casi siempre es una falla de seguridad e impide que el propietario del sitio endurezca el sitio correctamente (en una situación perfecta, no es necesario realizar ninguna solicitud a los archivos PHP dentro de wp-content )

La buena práctica es que utilice admin_post acciones ... (similar a admin_ajax ).

Para que su formulario se vea así:

<form action="<?php echo esc_attr('admin-post.php'); ?>" method="post">
    <input type="hidden" name="action" value="my_action" />
    <input type="text" name="keyName">
    <input type="submit" value="Update">
</form>

Y luego, en tu complemento, agregas tu método de acción:

add_action( 'admin_post_my_action', 'prefix_admin_my_action' );
add_action( 'admin_post_nopriv_my_action', 'prefix_admin_add_foobar' );

function prefix_admin_my_action() {
    // Handle request then generate response using echo or leaving PHP and using HTML
}

PS. Siempre es una buena idea incluir algunos nonces dentro de ese formulario también.

    
respondido por el Krzysiek Dróżdż 18.11.2018 - 09:56

Lea otras preguntas en las etiquetas