Soporte » Guías – Resolución de problemas » Cómo validar php antes de cambiar archivos

  • Estoy personalizando un tema y quiero modificar algunos archivos .php en el tema-hijo, en concreto functions.php

    Tengo poca experiencia y al copiar códigos de modificación sugeridos en blogs sobre WP de confianza, he tenido problemas que han corrompido las bases de datos impidiendo el acceso al panel Administrador de WP.

    Afortunadamente, con el soporte de mi hosting (chapeau!) he recuperado un backup previo y vuelvo a tener acceso al estado original de functions.php

    Necesito volver a modificarlo, pero busco una manera de validar código (y corregirlo) a versiones actuales 7.0 o 7.1 de PHP.

    Tipo de errores aparecidos:

    PHP Parse error: syntax error, unexpected ‘;’ in /…/functions.php on line 35
    PHP Parse error: syntax error, unexpected ‘$posts_array’ (T_VARIABLE) in /…/functions.php on line 36
    PHP Parse error: syntax error, unexpected ‘;’ in /…/functions.php on line 35
    PHP Parse error: syntax error, unexpected ‘;’ in /…/functions.php on line 35
    PHP Parse error: syntax error, unexpected ‘=>’ (T_DOUBLE_ARROW) in /…/functions.php on line 16

    que parece ser han generado problemas de acceso.

    Alguna ayuda, por vuestra parte?
    Gracias

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • No parece que tenga que ver con compatibilidad con diferentes versiones de PHP, parece más bien que hay algún error en el código.

    Si quieres déjanos por aquí el código y le echamos un vistazo.

    Copiar y pegar sin saber lo que se hace (no me lo tomes mal) tiene muchos riesgos. Además, la mayoría de código que encuentres en blogs y tutoriales online, por mucha confianza que te den, se deben tomar en general como ejemplos ilustrativos y no como código listo para usar.

    Dicho eso, ninguno de los mensajes de error que has puesto parece deberse a problemas con la versión de PHP 7 o 7.1, pero sin ver el código, no te podemos decir mucho más de lo que dicen los propios mensajes de error. Por ejemplo, el mensaje:

    PHP Parse error: syntax error, unexpected ‘;’ in /…/functions.php on line 35

    Significa exactamente eso, que se ha encontrado el carácter ; (punto y coma) en un sitio donde no debería estar. En PHP ; tiene un significado especial, y su ausencia o presencia donde no debe genera errores fatales como el que has tenido. Un solo ; mal puesto hace que el motor PHP no entienda el código y no pueda ejecutarlo.

    Existen muchos editores de código que comprueban este tipo de fallos de sintaxis en el código. Aquí puedes ver unos cuantos: https://en.wikipedia.org/wiki/List_of_PHP_editors

    Moderador LGrusin

    (@lgrusin)

    Pues son errores de sintaxis, es decir, por equivocaciones al escribir. Nos ha pasado a todos, sobre todo los novatos. La solución pasa por andar con cuidado y fijarse bien antes y ver mucho código en caso de dudas.

    Un saludo

    Iniciador del debate GasparGG

    (@gaspargg)

    Gracias por vuestras respuestas, tan rápidas. Y sí, (@cybmeta), esos son los riesgos de la ignorancia que trato de corregir (no te lo tomo mal, valoro la franqueza, pero soy inexperto, ya lo he dicho)

    La última versión del código que quiero incluir en functions.php aún me da un error en línea 3:

    Parse error: syntax error, unexpected ‘Divi’ (T_STRING), expecting ‘,’ or ‘)’ in […][…] on line 3)

    Éste es el código:

    <?php
    /* Modificar CPT, slug y taxonomías en Divi */
    function child_et_pb_register_posttypes() { $labels = array( ‘add_new’ => __( ‘Añadir nuevo’, ‘Divi’ ),
    ‘add_new_item’ => __( ‘Añadir nuevo artista’, ‘Divi’ ),
    ‘all_items’ => __( ‘Todos los artistas’, ‘Divi’ ),
    ‘edit_item’ => __( ‘Editar artista’, ‘Divi’ ),
    ‘menu_name’ => __( ‘Artistas’, ‘Divi’ ),
    ‘name’ => __( ‘Artistas’, ‘Divi’ ),
    ‘new_item’ => __( ‘Nuevo artista’, ‘Divi’ ),
    ‘not_found’ => __( ‘No hallado’, ‘Divi’ ),
    ‘not_found_in_trash’ => __( ‘Nada en la papelera’, ‘Divi’ ),
    ‘parent_item_colon’ => »,
    ‘search_items’ => __( ‘Buscar artistas’, ‘Divi’ ),
    ‘singular_name’ => __( ‘Artista’, ‘Divi’ ),
    ‘view_item’ => __( ‘Ver artista’, ‘Divi’ ),
    );

    $args = array(
    ‘can_export’ => true,
    ‘capability_type’ => ‘post’,
    ‘has_archive’ => true,
    ‘hierarchical’ => false,
    ‘labels’ => $labels,
    ‘menu_icon’ => ‘dashicons-art’,
    ‘menu_position’ => 5,
    ‘public’ => true,
    ‘publicly_queryable’ => true,
    ‘query_var’ => true,
    ‘show_in_nav_menus’ => true,
    ‘show_ui’ => true,
    ‘rewrite’ => apply_filters( ‘et_project_posttype_rewrite_args’, array(
    ‘feeds’ => true,
    ‘slug’ => ‘artistas’,
    ‘with_front’ => false,
    )),
    ‘supports’ => array( ‘title’, ‘editor’, ‘thumbnail’, ‘excerpt’, ‘comments’, ‘revisions’, ‘custom-fields’ ),
    );

    register_post_type( ‘project’, apply_filters( ‘et_project_posttype_args’, $args ) );

    $labels = array(
    ‘name’ => _x( ‘Categorías’, ‘Nombre de categoría de artistas’, ‘Divi’ ),
    ‘singular_name’ => _x( ‘Categoría’, ‘Nombre en singular de la categoría de artistas’, ‘Divi’ ),
    ‘search_items’ => __( ‘Buscar categorías’, ‘Divi’ ),
    ‘all_items’ => __( ‘Todas las categorías’, ‘Divi’ ),
    ‘parent_item’ => __( ‘Categoría superior’, ‘Divi’ ),
    ‘parent_item_colon’ => __( ‘Categoría superior:’, ‘Divi’ ),
    ‘edit_item’ => __( ‘Editar categoría’, ‘Divi’ ),
    ‘update_item’ => __( ‘Actualizar categoría’, ‘Divi’ ),
    ‘add_new_item’ => __( ‘Añadir nueva categoría’, ‘Divi’ ),
    ‘new_item_name’ => __( ‘Nombre de la nueva categoría’, ‘Divi’ ),
    ‘menu_name’ => __( ‘Categorías’, ‘Divi’ ),
    );

    register_taxonomy( ‘project_category’, array( ‘project’ ), array(
    ‘hierarchical’ => true,
    ‘labels’ => $labels,
    ‘show_ui’ => true,
    ‘show_admin_column’ => true,
    ‘query_var’ => true,
    ) );

    $labels = array(
    ‘name’ => _x( ‘Etiquetas’, ‘Nombre de etiqueta de artistas’, ‘Divi’ ),
    ‘singular_name’ => _x( ‘Etiqueta’, ‘Nombre en singular de la etiqueta de artista’, ‘Divi’ ),
    ‘search_items’ => __( ‘Buscar etiquetas’, ‘Divi’ ),
    ‘all_items’ => __( ‘Todas las etiquetas’, ‘Divi’ ),
    ‘parent_item’ => __( ‘Etiqueta superior’, ‘Divi’ ),
    ‘parent_item_colon’ => __( ‘Etiqueta superior:’, ‘Divi’ ),
    ‘edit_item’ => __( ‘Editar etiqueta’, ‘Divi’ ),
    ‘update_item’ => __( ‘Actualizar etiqueta’, ‘Divi’ ),
    ‘add_new_item’ => __( ‘Añadir nueva etiqueta’, ‘Divi’ ),
    ‘new_item_name’ => __( ‘Nombre de la nueva etiqueta’, ‘Divi’ ),
    ‘menu_name’ => __( ‘Etiquetas’, ‘Divi’ ),
    );

    register_taxonomy( ‘project_tag’, array( ‘project’ ), array(
    ‘hierarchical’ => false,
    ‘labels’ => $labels,
    ‘show_ui’ => true,
    ‘show_admin_column’ => true,
    ‘query_var’ => true,
    ) );

    $labels = array(
    ‘name’ => _x( ‘Diseños’, ‘Nombre general del tipo de diseño’, ‘Divi’ ),
    ‘singular_name’ => _x( ‘Diseño’, ‘Nombre en singular del tipo de diseño’, ‘Divi’ ),
    ‘add_new’ => _x( ‘Añadir nuevo’, ‘Layout item’, ‘Divi’ ),
    ‘add_new_item’ => __( ‘Añadir nuevo diseño’, ‘Divi’ ),
    ‘edit_item’ => __( ‘Editar diseño’, ‘Divi’ ),
    ‘new_item’ => __( ‘Nuevo diseño’, ‘Divi’ ),
    ‘all_items’ => __( ‘Todos los diseños’, ‘Divi’ ),
    ‘view_item’ => __( ‘Ver diseño’, ‘Divi’ ),
    ‘search_items’ => __( ‘Buscar diseños’, ‘Divi’ ),
    ‘not_found’ => __( ‘No encontrado’, ‘Divi’ ),
    ‘not_found_in_trash’ => __( ‘Nada en la papelera’, ‘Divi’ ),
    ‘parent_item_colon’ => »,
    );

    $args = array(
    ‘labels’ => $labels,
    ‘public’ => false,
    ‘can_export’ => true,
    ‘query_var’ => false,
    ‘has_archive’ => false,
    ‘capability_type’ => ‘post’,
    ‘hierarchical’ => false,
    ‘supports’ => array( ‘title’, ‘editor’, ‘thumbnail’, ‘excerpt’, ‘comments’, ‘revisions’, ‘custom-fields’ ),
    );

    register_post_type( ‘et_pb_layout’, apply_filters( ‘et_pb_layout_args’, $args ) );
    }

    function remove_et_pb_actions() {
    remove_action( ‘init’, ‘et_pb_register_posttypes’, 15 );
    }

    add_action( ‘init’, ‘remove_et_pb_actions’);
    add_action( ‘init’, ‘child_et_pb_register_posttypes’, 20 );

    ?>

    Moderador LGrusin

    (@lgrusin)

    @gaspargg usa el botón code para añadir código, asi es muy difícil ver el problema.

    De todas formas te recuerdo que no todas las funciones del tema padre se pueden reescribir en el tema hijo, no pueden duplicarse. Si están en el tema padre debe existir una forma de modificarlas en el tema hijo, mediante hooks o similar.

    ¿Qué tema quieres modificar?

    Un saludo

    • Esta respuesta fue modificada hace 5 años, 9 meses por LGrusin.
    Iniciador del debate GasparGG

    (@gaspargg)

    Disculpas ;-(

    <?php
    /* Modificar CPT, slug y taxonomías en Divi */
    function child_et_pb_register_posttypes() { $labels = array( 'add_new' => __( 'Añadir nuevo’, 'Divi' ),
            'add_new_item'       => __( 'Añadir nuevo artista’, 'Divi' ),
            'all_items'          => __( 'Todos los artistas’, 'Divi' ),
            'edit_item'          => __( 'Editar artista', 'Divi' ),
            'menu_name'          => __( ‘Artistas’, 'Divi' ),
            'name'               => __( ‘Artistas’, 'Divi' ),
            'new_item'           => __( 'Nuevo artista', 'Divi' ),
            'not_found'          => __( 'No hallado’, 'Divi' ),
            'not_found_in_trash' => __( 'Nada en la papelera', 'Divi' ),
            'parent_item_colon'  => '',
            'search_items'       => __( 'Buscar artistas’, 'Divi' ),
            'singular_name'      => __( ‘Artista’, 'Divi' ),
            'view_item'          => __( 'Ver artista', 'Divi' ),
        );
     
        $args = array(
            'can_export'         => true,
            'capability_type'    => 'post',
            'has_archive'        => true,
            'hierarchical'       => false,
            'labels'             => $labels,
            'menu_icon'          => 'dashicons-art',
            'menu_position'      => 5,
            'public'             => true,
            'publicly_queryable' => true,
            'query_var'          => true,
            'show_in_nav_menus'  => true,
            'show_ui'            => true,
            'rewrite'            => apply_filters( 'et_project_posttype_rewrite_args', array(
                'feeds'          => true,
                'slug'           => 'artistas',
                'with_front'     => false,
            )),
            'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments', 'revisions', 'custom-fields' ),
        );
     
        register_post_type( 'project', apply_filters( 'et_project_posttype_args', $args ) );
     
        $labels = array(
            'name'              => _x( 'Categorías', 'Nombre de categoría de artistas', 'Divi' ),
            'singular_name'     => _x( 'Categoría', 'Nombre en singular de la categoría de artistas', 'Divi' ),
            'search_items'      => __( 'Buscar categorías', 'Divi' ),
            'all_items'         => __( 'Todas las categorías', 'Divi' ),
            'parent_item'       => __( 'Categoría superior', 'Divi' ),
            'parent_item_colon' => __( 'Categoría superior:', 'Divi' ),
            'edit_item'         => __( 'Editar categoría', 'Divi' ),
            'update_item'       => __( 'Actualizar categoría', 'Divi' ),
            'add_new_item'      => __( 'Añadir nueva categoría', 'Divi' ),
            'new_item_name'     => __( 'Nombre de la nueva categoría', 'Divi' ),
            'menu_name'         => __( 'Categorías', 'Divi' ),
        );
     
        register_taxonomy( 'project_category', array( 'project' ), array(
            'hierarchical'      => true,
            'labels'            => $labels,
            'show_ui'           => true,
            'show_admin_column' => true,
            'query_var'         => true,
        ) );
     
        $labels = array(
            'name'              => _x( 'Etiquetas', 'Nombre de etiqueta de artistas', 'Divi' ),
            'singular_name'     => _x( 'Etiqueta', 'Nombre en singular de la etiqueta de artista', 'Divi' ),
            'search_items'      => __( 'Buscar etiquetas', 'Divi' ),
            'all_items'         => __( 'Todas las etiquetas', 'Divi' ),
            'parent_item'       => __( 'Etiqueta superior', 'Divi' ),
            'parent_item_colon' => __( 'Etiqueta superior:', 'Divi' ),
            'edit_item'         => __( 'Editar etiqueta', 'Divi' ),
            'update_item'       => __( 'Actualizar etiqueta', 'Divi' ),
            'add_new_item'      => __( 'Añadir nueva etiqueta', 'Divi' ),
            'new_item_name'     => __( 'Nombre de la nueva etiqueta', 'Divi' ),
            'menu_name'         => __( 'Etiquetas', 'Divi' ),
        );
     
        register_taxonomy( 'project_tag', array( 'project' ), array(
            'hierarchical'      => false,
            'labels'            => $labels,
            'show_ui'           => true,
            'show_admin_column' => true,
            'query_var'         => true,
        ) );
     
        $labels = array(
            'name'               => _x( 'Diseños', 'Nombre general del tipo de diseño', 'Divi' ),
            'singular_name'      => _x( 'Diseño', 'Nombre en singular del tipo de diseño', 'Divi' ),
            'add_new'            => _x( 'Añadir nuevo', 'Layout item', 'Divi' ),
            'add_new_item'       => __( 'Añadir nuevo diseño', 'Divi' ),
            'edit_item'          => __( 'Editar diseño', 'Divi' ),
            'new_item'           => __( 'Nuevo diseño', 'Divi' ),
            'all_items'          => __( 'Todos los diseños', 'Divi' ),
            'view_item'          => __( 'Ver diseño', 'Divi' ),
            'search_items'       => __( 'Buscar diseños', 'Divi' ),
            'not_found'          => __( 'No encontrado', 'Divi' ),
            'not_found_in_trash' => __( 'Nada en la papelera', 'Divi' ),
            'parent_item_colon'  => '',
        );
     
        $args = array(
            'labels'             => $labels,
            'public'             => false,
            'can_export'         => true,
            'query_var'          => false,
            'has_archive'        => false,
            'capability_type'    => 'post',
            'hierarchical'       => false,
            'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments', 'revisions', 'custom-fields' ),
        );
     
        register_post_type( 'et_pb_layout', apply_filters( 'et_pb_layout_args', $args ) );
    }
     
    function remove_et_pb_actions() {
        remove_action( 'init', 'et_pb_register_posttypes', 15 );
    }
     
    add_action( 'init', 'remove_et_pb_actions');
    add_action( 'init', 'child_et_pb_register_posttypes', 20 );
    
    ?>
    Moderador LGrusin

    (@lgrusin)

    Por de pronto hay errores con las comillas, fijate que no todas son iguales. La correcta es la que va a la derecha de la tecla del cero.

    Saludos

    Iniciador del debate GasparGG

    (@gaspargg)

    Reviso las comillas simples. Gracias @lgrusin

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • El debate ‘Cómo validar php antes de cambiar archivos’ está cerrado a nuevas respuestas.