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

Sobre escribir funciones legibles de WordPress

23

Una de las cosas que encuentro constantemente interesante (tanto desde el punto de vista de la programación como desde el punto de vista de WordPress), es esto:

Me gusta mantener el código separado, de modo que el código responsable de interactuar con WordPress se relegue a su espacio de nombres, mientras que el resto de nuestro código tiene un espacio de nombres apropiado en otro lugar.

Creo que esto es obvio, sin embargo.

Sin embargo, cuando se trata de escribir código, esto no significa que deba dejarse simplemente en cómo escribimos nuestras clases y luego las organizamos. ¿Qué pasa con las cosas a un nivel un poco más granular?

Es decir, ¿qué pasaría si consideráramos los métodos como parte de un todo más amplio y nos aseguráramos de que también están haciendo bien su trabajo? Claro, gente como Bob Martin ha estado escribiendo sobre este tipo de cosas durante la mayor parte de su carrera y predicándolo a personas como nosotros.

Pero estos conceptos son algo que simplemente comienzas a hacer y luego los aplicas para siempre. Los paradigmas cambian, somos mejores hoy que ayer, y puede haber múltiples formas de lograr el mismo tipo de cosas.

Entonces, cuando se trata de crear funciones legibles de WordPress para un dominio específico, ¿cómo sería eso?

Funciones legibles de WordPress

Para aquellos que están familiarizados con los principios SOLID o cualquier cosa que hable sobre escribir un buen código, una de las cosas sobre las que muchas de esas personas escriben es la longitud que debe tener un método.

Tiendo a tomarlos como reglas en lugar de leyes porque, a veces, los métodos no pueden ser tan breves. Quiero decir, supongo que podrían, pero en algún momento se siente como una microgestión del código, ¿verdad?

Y hacer algo por el hecho de hacerlo es una cosa, pero hacer algo por el bien de la programación significativa es otra. Elegiré lo último cada vez.

De todos modos, aquí hay un ejemplo: digamos que tiene un código que se llama a través de Ajax y antes de continuar con la operación, necesita saber si existe un tipo de publicación personalizada.

Los pasos para hacer algo como esto podrían ser los siguientes:

  • iniciar la llamada Ajax,
  • verifique el nonce de seguridad para verificar que sea una solicitud válida,
  • verifique si existen datos,
  • si lo hace, devuelva un mensaje de éxito; si no, devuelve un mensaje de error.

Todo esto se puede hacer dentro de un solo mensaje, claro, pero supongamos que queremos escribir esto en una serie de llamadas que son fáciles de leer donde el código se autodocumenta, hasta cierto punto (esto no significa que yo Estoy en contra de los comentarios, no lo estoy en absoluto, pero eso no significa que queramos que nuestro código no sea claro, ¿o sí?).

Primero, la llamada Ajax :

$.get(ajaxurl, {
    'action': 'getDetails',
    'security': $('input[name="acme-security-nonce"]').val()
}, function(response) {
    if (false === response.success) {
        // Handle the case when the request wasn't successful.
    }

    // Work with the information that was returned in the response.data property.
});

Luego tenemos una función en el lado del servidor para verificar explícitamente el nonce de seguridad (esto, por supuesto, asume que lo está configurando correctamente en el front-end):

<?php
/**
 * @return bool true if we're able to make Ajax requests; otherwise, false
 */
private function verifyRequest()
{
    return
        isset($_GET['security']) &&
        wp_verify_nonce(strip_tags(stripslashes($_GET['security'])), 'getDetails');
}

Después de eso, queremos comprobar si existen datos:

<?php

/**
 * @return bool true if there are details; false, otherwise
 *
 * @access private
 */
private function doDetailsExist()
{
    return (new WP_Query([
        'post_type' => 'acme_post_type',
        'post_status' => 'publish',
    ]))->have_posts();
}

Desde aquí, podemos trabajar con el objeto de respuesta de Ajax evaluando su propiedad de éxito y reaccionando en consecuencia.

Yendo un paso más allá

Sin embargo, llevemos esto un paso más allá y digamos que los productos existen y queremos recuperar todos sus ID de publicación. Hacer esto con WP_Query es bastante fácil pero digamos, por diversión, queremos interactuar directamente con la base de datos.

Tenga en cuenta que esto es más un ejercicio para mostrar una forma de hacer algo en lugar de argumentar a favor del uso de $wpdb sobre WP_Query. Eso es contenido para otra publicación.

Sobre escribir funciones legibles de WordPress

De todos modos, hemos determinado que los datos existen. Entonces, tomemos una matriz de todas las ID de publicación y devolvámosla o una matriz vacía. Tal vez esto sería algo como esto:

<?php
/**
 * @return array a numerically indexed array of all detail IDs
*/
private function getDetailIds(): array
{
    global $wpdb;
    $results = $wpdb->get_results(
        $wpdb->prepare("
        SELECT meta_value
        FROM $wpdb->postmeta
        WHERE meta_key = %s
        ORDER BY meta_value ASC
        ", 'acme_detail_number'),
        ARRAY_N
    );

    $detailIds = [];
    array_push($detailIds, array_map(function ($result) {
        return $result[0];
    }, $results));

    return $detailIds[0] ?? $detailIds;
}

Una vez que se devuelven los valores, podemos operar con ellos como mejor nos parezca.

¿Cuál es el propósito de todo esto?

En términos generales, es para ayudarnos a pensar en el código de tal manera que podamos leerlo casi tan cerca como sea posible de la palabra escrita. Es decir, podemos señalar un fragmento de código como, por ejemplo:

Primero, veremos si algo existe. Si no, enviaremos un error; de lo contrario, tomaremos los datos y luego trabajaremos en ellos.

De acuerdo, estoy hablando en términos menos concretos aquí, pero eso es porque no necesariamente sé con qué estás trabajando más de lo que sabes sobre mi trabajo. Pero entiendes la idea, ¿verdad?

Y además, si está buscando un código de prueba de unidad que esté desacoplado de WordPress, esto se puede hacer mediante el uso de interfaces que simulan las funciones o incluso que ejecutan consultas directas en la base de datos sin necesidad de usar WordPress.

Pero, al igual que con algunos de los puntos mencionados anteriormente, ese es un tema para otra publicación.

Actualmente estoy escribiendo un libro electrónico (junto con una variedad de otro contenido premium). Si estás interesado, echa un vistazo a lo que obtienes.

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