Cómo comprobar la compatibilidad de los productos WordPress con PHP

Por qué es importante conocer la compatibilidad con la versión de PHP, dónde encontrar información sobre actualizaciones de la versión de PHP y cómo probar sus plugins y temas para ver si son compatibles con la última versión de PHP de dos maneras.

¿Por qué debo comprobar la compatibilidad con la versión de PHP?

Cómo comprobar la compatibilidad de los productos WordPress con PHP


WordPress está escrito en el lenguaje PHP, lo que significa que necesita funcionar sin problemas en una versión de PHP que sea compatible con su alojamiento web. Aunque WordPress recomendará un requisito mínimo de versión de PHP, las versiones antiguas de PHP dejarán gradualmente de actualizarse o incluso de proporcionar parches de seguridad.

Por ejemplo, la versión de PHP mínima recomendada para WordPress ahora mismo es la 7.4, pero esta versión dejó de actualizarse el 28 de noviembre de 2022.

El código del núcleo de WordPress funciona con PHP 8.0 y PHP 8.1 y también es compatible con las versiones PHP 8.2 y PHP 8.3. Sin embargo, no se garantiza que todos los plugins funcionen correctamente en estas versiones más recientes de PHP.

Por lo tanto, si usted es un desarrollador de plugins, es muy importante comprobar regularmente la compatibilidad de su plugin con diferentes versiones de PHP.

Dónde encontrar información sobre los cambios de versión de PHP

Para saber cuándo y cómo cambian las versiones de PHP, lo mejor es visitar el sitio web oficial de PHP en https://www.php.net/.

existe"Versiones compatibles"encontrará información sobre las versiones compatibles actualmente, el nivel de compatibilidad y las versiones descatalogadas.

Al momento de escribir esto, todas las versiones de PHP 7.x están al final de su vida útil, y PHP 8.0 sólo soporta correcciones de seguridad y soporta activamente PHP 8.1 así como PHP 8.2 y 8.3, lo que significa que los errores y fallas de seguridad serán corregidos. Tenga en cuenta que PHP 8.0 sólo soportará correcciones de seguridad hasta noviembre de 2023, más o menos cuando se lance PHP 8.3, y entonces PHP 8.0 se considerará al final de su vida útil.

En la sección Apéndice de la documentación de PHP, puede encontrar una guía para migrar desde versiones antiguas de PHP, que enumera los cambios más importantes entre la versión antigua y la nueva. Por ejemplo.Migración de PHP 7.4.x a PHP 8.0.xLa guía enumera los cambios más importantes entre PHP 7.4 y PHP 8.0.

Cómo comprobar la compatibilidad de los productos WordPress con PHP

Plug-ins de muestra

<?php
/**
 * Plugin Name: WP Learn Compatibility
 * Description: Learn to test a plugin for PHP Version Compatibility
 * Version: 1.0.1
 *
 * @package wp-learn-compatibility
 */

/**
 * Posts fetcher class
 */
class Post_Fetcher {

    /**
     * Array posts
     *
     * @var array
     */
    protected $posts;

    /**
     * Fetch the WordPress posts
     */
    public function post_fetcher() {
        $this->posts = get_posts();
    }

    /**
     * Obtiene los posts y devuelve el HTML formateado
     * @return string
     * @return string
     */
    public function fetch_posts() {
        $post_html = '<div class="post">';
        foreach ( $this-&gt;posts as $post ) {
            if ( property_exists( $post, 'post_title' ) ) {
                $post_html . = sprintf(
                    '<h4><a href="/es/%s/">%s</a></h4>',
                    get_permalink( $post-&gt;ID ),
                    $post-&gt;título_post
                );
            }
        }
        $post_html . = '</div>';
        return $post_html.
    }
}

add_shortcode( 'wp_learn_php_compatibility', 'wp_learn_php_compatibility_shortcode_render' );

/**
 * Función de devolución de código corto para el código corto wp_learn_php_compatibility
 shortcode shortcode_render' ); /** * @return string
 * @return string
 */
function wp_learn_php_compatibility_shortcode_render() {
    $post_fetcher = new post_fetcher();
    $post_html = $post_fetcher-&gt;fetch_posts();
    return $post_html;
}

En este tutorial, vamos a ir a través de un plugin de ejemplo. Este plugin crea un shortcode especial que, cuando lo usas en una página, muestra una lista de entradas, incluyendo el título de cada entrada. Un shortcode llamadopost_fetcheres responsable de obtener esta información.

Cuando pruebes este shortcode en un servidor con PHP versión 7.4, podrás ver que funciona correctamente, mostrando la lista de posts como esperamos.

Cómo comprobar la compatibilidad de los productos WordPress con PHP

Cómo comprobar la compatibilidad de la versión PHP

Para comprobar la compatibilidad de versiones de PHP, existen varias formas de realizar pruebas, que pueden implicar el uso de diferentes versiones de PHP y algunas herramientas especiales. En este tutorial, presentaremos dos métodos de prueba y exploraremos las ventajas y posibles deficiencias de cada uno.

Prueba de compatibilidad manual

El método de prueba manual requiere que configures la versión de PHP que quieres probar en tu entorno WordPress y luego pruebes tu plugin en ese entorno.

Hay algunas maneras diferentes de configurar un entorno de este tipo, la forma más común es utilizar una herramienta de desarrollo local que hace que sea fácil cambiar entre versiones de PHP, como Mamp, Laragon, LocalWP, o DevKinsta.

En este tutorial, por ejemplo, elegiremos la versión 8.1 de PHP para las pruebas.

Para confirmar rápidamente qué versión de PHP utiliza su WordPress, puede crear un archivo llamado info.php en el directorio de instalación de WordPress y rellenarlo con un fragmento de código específico.

<?php
phpinfo();

A continuación, vaya al archivo info.php en su navegador y debería ver la versión de PHP mostrada.

Después de configurar su entorno de pruebas, debe activar la depuración de WordPress.

Para ello, edite el archivowp-config.phpy actualice la línea que define la constanteWP_DEBUG, ajústelo enverdadero

define( 'WP_DEBUG', true );

Además, añadaWP_DEBUG_DISPLAYy ponerla a false, luego añadir la constanteWP_DEBUG_LOGy ponerla a true para registrar los errores en el directoriodebug.logen el documentowp-contenido.

define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );

También puedeWP_DEBUG_LOGEstablezca las constantes en una ubicación personalizada especificando la ruta del archivo. Ejemplo:

define( 'WP_DEBUG_LOG', '/home/ubuntu/wp-local-env/sites/learnpress/logs/debug.' . date( 'A-m-d' ) . '.log' );

A continuación, pruebe el plugin actualizando la página. Tenga en cuenta que la funcionalidad de código corto está roto.

Si miras en debug.log, verás que se muestra el siguiente error:

[24-Nov-2023 12:59:49 UTC] PHP Warning: El argumento foreach() debe ser de tipo array|object, null given en /home/ubuntu/wp-local-env/sites/learnpress /wp-content/plugins/wp-learn-php-compatibility/wp-learn-php-compatibility.php en la línea 36

Ahora, si vas a la línea 36 del archivo plugin, verás el siguiente código, y verás que está tratando de bucle a través de eso$this->postsque es nulo por alguna razón. La razón puede no ser obvia, por lo que es posible que desee profundizar en el atributoMigración de PHP 7.4.x a PHP 8.0.xGuía.

En la sección Cambios incompatibles con versiones anteriores, verá los siguientes cambios:

Los métodos con el mismo nombre que la clase ya no se interpretan como constructores. En su lugar debe utilizarse el método __construct().

Así que en este caso, el método constructor de nuestra clase necesita ser actualizado.

Una vez corregido, actualice la página y verá que el plugin vuelve a funcionar como es debido.

Aunque las pruebas manuales funcionan, pueden ser un proceso tedioso. Afortunadamente, también puedes automatizar la mayoría de las pruebas usando una herramienta llamada PHPUnit. Esto te permitirá proteger continuamente tu código de bugs y problemas de compatibilidad con PHP, pero eso está más allá del alcance de este tutorial.

Cómo comprobar la compatibilidad de los productos WordPress con PHP

Escaneando su código con PHPCompatibilityWP

También puede utilizar una serie de herramientas para comprobar la compatibilidad con PHP, la más útil de las cuales es la apropiadamente denominadaherramienta PHPCompatibility, que esPHP_CodeSnifferUn conjunto de reglas para las herramientas.

PHP_CodeSniffer es una herramienta de línea de comandos que puede ser usada para escanear código en busca de errores y advertencias, mientras que la herramienta PHPCompatibility es un conjunto de reglas que pueden ser usadas con PHP_CodeSniffer para escanear código en busca de compatibilidad con versiones de PHP.

Para los desarrolladores de WordPress, hay una nueva función llamadaPHPCompatibilidadWPque es un conjunto de reglas específico para el conjunto de reglas PHPCompatibility del proyecto WordPress.

La belleza de PHPCompatibility/PHPCompatibilityWP es que no necesita configurar una versión diferente de PHP para usarlo. Puedes usarlo con una versión existente de PHP y comprobará tu código contra las reglas de la versión de PHP que especifiques.

Para instalar y utilizar PHPCompatibilityWP, necesita instalar Composer, que es un gestor de dependencias para proyectos PHP.

Para que Composer funcione, también necesitarás tener PHP instalado en tu ordenador para poder utilizar el binario PHP CLI, que te permite ejecutar scripts PHP en el terminal, no sólo en tu navegador.

La instalación de Composer está fuera del alcance de este curso, pero puede encontrarla en la secciónPágina web del compositorAverigüe cuál es la mejor manera de utilizar elmacOS/Linuxresponder cantandoWindows (ordenador)Descripción del sistema operativo.

Puede encontrar una lista de todos los sitios PHP en el sitio web de PHPDescubra cómo instalar PHP en su sistema en la sección "Instalación y configuración".

Después de instalar PHP, asegúrese de añadir la ruta al binario PHP CLI a la ruta del sistema operativo de su ordenador para que pueda ejecutar comandos PHP desde cualquier parte de su ordenador.

Puede comprobar si PHP está instalado ejecutando el siguiente comando en un terminal:

php -v

Del mismo modo, puede comprobar si Composer está instalado ejecutando el siguiente comando en un terminal:

compositor -V

Después de instalar Composer, puede inicializar el proyecto Composer ejecutando el siguiente comando en el directorio del plugin. Si ya está utilizando Composer en un plugin, puede omitir este paso.

compositor init

Esto inicializará un nuevo proyecto Composer en tu directorio de plugins. Puedes aceptar los valores por defecto para la mayoría de las preguntas, pero cuando te pregunte si quieres definir las dependencias interactivamente (require) y definir tus dependencias de desarrollo interactivamente (require-dev)? debes responder "No". También puede omitir la asignación automática de PSR-4.

Una vez hecho esto, tendrá uncomposer.jsonque Composer utiliza para gestionar las dependencias del proyecto.

A continuación, debe instalar el plugin Composer y gestionar la configuración de la ruta de instalación para PHP_CodeSniffer ejecutando el siguiente comando desde el comando. Si ya tienes instalado este plugin, puedes ignorarlo.

composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true

A continuación, puede instalar el plug-in instalador Composer y la herramienta PHPCompatibilityWP ejecutando el siguiente comando:

composer require --dev dealerdirect/phpcodesniffer-composer-installer:"^1.0"
composer require --dev phpcompatibility/phpcompatibility-wp: "*"

Esto configurará e instalará las dependencias necesarias en su archivo composer.json.

Cómo comprobar la compatibilidad de los productos WordPress con PHP

Notas sobre las versiones PHPCompatibility y PHPCompatibilityWP.

Actualmente, la versión estable de PHPCompatibility es9.3.5Olfateos recientesforma parte de la próxima versión 10.0.0. Versión. La versión estable actual de PHPCompatibilityWP es2.1.4

Cuando se publique la versión 10.0 de PHPCompatibility, también se publicará la versión 3.0 de PHPCompatibilityWP, que dependerá de la versión 10.0 de PHPCompatibility.

Mientras tanto, puede instalar la rama dev-develop de PHPCompatibility para ejecutar PHPCS y añadir la vanguardia de PHP 8 sniffing antes del lanzamiento de la versión 10.0.0 de PHPCompatibility, cuyos detalles puede encontrar aquíDocumentación de WordPress VIP.

Para ello, ejecute el siguiente comando para especificar un alias para la rama dev-develop de PHPCompatibility:

composer config minimum-stability dev
composer require --dev phpcompatibilidad/php-compatibilidad-wp:"^2.1"
composer require --dev phpcompatibility/php-compatibility: "dev-develop as 9.99.99"

Estos comandos fijarán eldesarrollarLa rama PHPCompatibility hace alias a la versión 9.x dentro del rango permitido por PHPCompatibility y establece PHPCompatibilityWP para instalar la última versión estable 2.1.

Una vez que PHPCompatibility 10 y PHPCompatibilityWP 3 sean liberados, debería ser posible actualizar la restricción de versión PHPCompatibilityWP a "^3.0", lo cual dependerá de la versión 10 de PHPCompatibility Esto dependerá de la versión 10 de PHPCompatibility.

Después de instalar todo esto, puede ejecutar la herramienta PHPCompatibilityWP en el archivo del plugin.

El enfoque recomendado es ejecutar PHPCompatibilityWP para una versión base específica de PHP. en este ejemplo se puede hacer esto estableciendo el parámetrotestVersionLas variables de tiempo de ejecución están configuradas para ejecutarlo para PHP 7.4 y superior.7.4-.

. /vendor/bin/phpcs --runtime-set testVersion 7.4- -p wp-learn-php-compatibility.php --standard=PHPCompatibilityWP

Verás esta salida:

W 1 / 1 (100%)



ARCHIVO: /Users/jonathanbossenger/wp-local-env/sites/learnpress/wp-content/plugins/wp-learn-php-compatibility/wp-learn-php- compatibility.php
---------------------------------------------------------------------------------------------------------------------------------- -------
ENCONTRADO 0 ERRORES Y 1 ADVERTENCIA QUE AFECTA A 1 LÍNEA
---------------------------------------------------------------------------------------------------------------------------------- -------
 15 | WARNING | El uso del constructor de clase estilo PHP4 no está soportado desde PHP 7.
---------------------------------------------------------------------------------------------------------------------------------- -------

Tiempo: 33ms; Memoria: 8MB

Observe cómo se informa del mismo error que en el método manual, pero esta vez es más específico. Nos dice exactamente en qué línea se produjo el error y cuál fue el error.

Ahora podemos arreglar el error del constructor de la clase.

advertencia

Una de las consideraciones al utilizar una herramienta como PHPCompatibilityWP es que no puede detectar todos los errores de compatibilidad.

Por ejemplo, uno de los otros cambios de PHP 7.4 a PHP 8.0 fue la eliminación de la funcionalidad utilizada con el objetoarray_key_exists()En cambio, espropiedad_existe()Debe utilizarse una función similar.

Sin embargo, la herramienta PHPCompatibilityWP no conoce las variables que se pasan al métodoarray_key_exists()es un array o un objeto, por lo que no puede avisar de ello.

Aquí es donde las pruebas manuales automatizadas resultarán útiles. Cuando ejecute una prueba en un nuevo entorno PHP, la prueba fallará, permitiéndole encontrar posibles problemas. Con el registro activado, verá los errores registrados en el archivo de registro.

En última instancia, la combinación de una herramienta como PHPCompatibility con los procesos de pruebas automatizadas y pruebas manuales que hemos discutido le permitirá asegurarse de que su plugin es compatible con las versiones actuales y futuras de PHP.


Póngase en contacto con nosotros
¿No puede leer el artículo? Póngase en contacto con nosotros para obtener una respuesta gratuita. Ayuda gratuita para sitios personales y de pequeñas empresas
Teléfono: 020-2206-9892
QQ咨询:1025174874
(iii) Correo electrónico: info@361sale.com
Horario de trabajo: de lunes a viernes, de 9:30 a 18:30, días festivos libres
Publicado por photon fluctuations, retweeted with attribution:https://www.361sale.com/es/6550/

Como (1)
Anterior Miércoles, 27 de marzo de 2024, 17.05 horas.
Siguiente Miércoles, 28 de marzo de 2024 a las 10:22 a.m.

Recomendado

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Póngase en contacto con nosotros

020-2206-9892

QQ咨询:1025174874

Correo electrónico: info@361sale.com

Horario de trabajo: de lunes a viernes, de 9:30 a 18:30, días festivos libres

Servicio de atención al cliente WeChat
Para facilitar el registro y el inicio de sesión de los usuarios en todo el mundo, hemos anulado la función de inicio de sesión por teléfono. Si tiene problemas para iniciar sesión, póngase en contacto con nuestro servicio de atención al cliente para que le ayuden a vincular su dirección de correo electrónico.