✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Obtener direcciones de usuario en WordPress, Parte 1

40

Supongamos que está trabajando en un proyecto en el que desea brindarle al usuario la capacidad de descargar todas las direcciones de correo electrónico de los usuarios que existen en la instalación de WordPress. De acuerdo, esto tiene algunos requisitos:

  • Solo quieres que lo hagan los administradores,
  • Debe ser seguro a través de valores nonce,
  • Las respuestas deben estar en JSON,
  • Y desea usar JavaScript para enviar el archivo cuando esté listo para descargar.

Es probable que cada uno de los conceptos anteriores se haya cubierto aquí antes, pero ¿qué sucede si está buscando unirlos todos? Es decir, ¿qué sucede si desea facilitar la descarga de las direcciones de correo electrónico de los usuarios a través de JSON dentro de WordPress desde, por ejemplo, un menú de administración o un submenú?

Una foto obligada de donde estoy trabajando mientras escribo este post.

Aquí hay una forma de abordar ese problema. Tenga en cuenta que se supone que tiene algún conocimiento de lo anterior, pero haré lo que pueda para cubrir cada uno de los anteriores.

Descargar direcciones de correo electrónico de usuario a través de JSON

Antes de comenzar, tenga en cuenta que estoy configurando esto para que funcione cada vez que un usuario haga clic en un submenú en el  menú Herramientas en WordPress.

La forma en que configura sus ganchos puede variar. Comencé a usar un poco de un tipo particular de arquitectura que se está volviendo cada vez más estándar en los proyectos que uso tanto para mí como para los que usamos en Pressware, pero estoy divagando sobre eso para esto (tal vez proporcione alguna información en esto más tarde).

Agregar un submenú

De todos modos, así es como se ve el código para agregar el submenú.

<?php
public function addSubmenuPage()
{
    add_submenu_page(
        'tools.php',
        'Export Emails',
        'Export Emails',
        'manage_options',
        'acme-export-emails',
        'exportEmails'
    );
}

Es exactamente lo que esperarías, ¿verdad? Si está usando código orientado a objetos, puede (o no, dependiendo de cómo haya diseñado su solución) necesitar usar una matriz para especificar una instancia de la clase actual y su método.

Tenga en cuenta también que no me voy a preocupar por la internacionalización en el contexto de esta publicación. No es que no se pueda hacer; no es que no sea importante. Es cuestión de tratar de mantener la publicación lo más magra posible.

Registrando el JavaScript

Voy a suponer que tiene un  archivo exportEmail.js ubicado en su perfil y este es el archivo que será responsable de consultar el lado del servidor y devolver el archivo para su descarga.

Lo primero que debe hacer es registrar de forma segura el JavaScript en el lado del servidor utilizando las funciones API estándar :

<?php

public function addJavaScript()
{
    if (!current_user_can('manage_options')) {
        return;
    }

    wp_enqueue_script(
        'acme-email-export-admin',
        $this->plugin_url. 'Emails/assets/scripts/exportEmail.js',
        array('jquery')
    );

    wp_localize_script(
        'acme-email-export-admin',
        'acme_email_export',
        array(
            'ajax_url' => admin_url('admin-ajax.php'),
            'security' => wp_create_nonce('acme-email-export-nonce')) );
}

Una vez hecho esto, puede escribir el JavaScript que llamará al lado del servidor. Pero este es un paso de dos partes: incluye JavaScript y luego más código del lado del servidor.

El lado del cliente llamando al lado del servidor

Dado que los conceptos básicos están establecidos para llamar al lado del servidor, ahora es posible configurar JavaScript.

Primero, está el controlador de clics :

$('a[href="tools.php?page=acme-export-emails"]').on('click', function(evt){
    evt.preventDefault();
    _getEmailAddresses($(this));
});

La llamada get inicial debería verse así :

var _getEmailAddresses = function($elem) {
    $.get(acme_email_export.ajax_url, {
        security:  acme_email_export.security,
        action:    'getEmailAddresses'
    }, function(response) {

        if ('' === response) {
            return;
        }
        // TODO...
    });
};

Tenga en cuenta que usa el valor de seguridad que creamos anteriormente y luego usa el nombre de otra función, a saber , getEmailAddresses, que está llamando en el lado del servidor.

Esta función es responsable de ejecutar una consulta, obtener las direcciones de correo electrónico y escribir un archivo JSON temporal para devolverlo al usuario.

1 Obtenga las direcciones de correo electrónico de los usuarios

Primero, WP_User_Query permitirá retirar a todos los usuarios para ciertos criterios.

<?php
private function getUserResults()
{
    $query   = new WP_User_Query(
        array(
            'role_in' => array('administrator','subscriber')) );
    return $query->get_results();
}

Para los propósitos de este ejemplo, obviamente estoy aclarando los argumentos.

2 Analice el correo electrónico a partir de los resultados

A continuación, repetiré los resultados y almacenaré las direcciones de correo electrónico en una matriz (que eventualmente convertiré a JSON).

<?php

private function getUserInfo($results)
{
    $user_info = array();
    foreach ($results as $result) {
        if (isset($result->user_email)) {
            array_push($user_info, $result->user_email);
        }
    }

    return $user_info;
}

Tenga en cuenta que hay otras formas de hacer esto. Esta es solo una forma de hacerlo para un conjunto de datos más pequeño, pero si está trabajando para algo un poco más grande, le recomiendo una alternativa (que está más allá del alcance de esta publicación).

Hasta la próxima

Obviamente, esta es solo la primera parte de cómo conectar todo esto.

En la próxima publicación, cubriré:

  • convertir la información devuelta en JSON,
  • escribir ese archivo en el disco,
  • y cómo unir el resto usando JavaScript.

El paso final incluirá la creación de un elemento y luego la activación de su evento de clic para que al usuario se le presente el cuadro de diálogo de descarga en lugar del texto real en una ventana del navegador.

Fuente de grabación: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More