1

no tengo muchos conocimientos y estoy creando mi primer thema de wordpress, al intentar crear una página nueva me sale el siguiente error: Ha fallado la actualizacion, Las respuesta no es una respuesta JSON válida. En la consola me da dos errores:

Uncaught (in promise) SyntaxError: Unexpected token < post.php:1 in JSON at position 8.

Uncaught (in promise)
Object
code: "invalid_json"
message: "Las respuesta no es una respuesta JSON válida.

No me funciona ni en local ni en red. Me di cuenta del problema cuando creaba un formulario de contacto y un shortcode para este mismo formulario.

Esto es lo que dice el DEBUG.

PHP Notice:  Undefined variable: header_text_color in /opt/lampp/htdocs/faster/wp-content/themes/TheFaster/inc/custom-header.php on line 35.

La linea 35 dice esto, que veo que no están numerados: color:#<?php echo esc_attr($header_text_color)

Este es el archivo al que se refiere, pero me extrañaría que fuera eso.

Gracias por vuestro tiempo.

<?php 

if(!function_exists('fwpt_custom_header')):

    function fwpt_custom_header(){

        //Activamos la cabecera configurable
        // Más informacion en https://developer.wordpress.org/themes/functionality/custom-headers/

            add_theme_support('custom-header', apply_filters('fwpt_custom_header_args',
            array(
                'default-image'=>get_template_directory_uri().'/img/header-image.jpg',
                'default-text-color'=>'F60',
                'width'=>1400,
                'height'=>720,
                'flex-width'=>true,
                'flex-height'=>true,
                'video'=>true,
                'wp-head-callback'=>'fwpt_wp_header_style'
            )));
    }
endif;

add_action('after_setup_theme','fwpt_custom_header');

if(!function_exists('fwpt_wp_header_style')):

    function fwpt_wp_header_style(){
        $header_text_color = get_header_textcolor();
    }
    ?>
        <style>

            .WP-Header-branding *{
                color:#<?php echo esc_attr($header_text_color);?>
            }
        </style>

    <?php 

endif;

Pongo aquí el código donde esta el WP-header-branding, por si hace falta.

<header class="WP-Header">

        <?php 
        if(has_custom_header()):
            the_custom_header_markup();
        endif;
        ?>
        
    <div class="WP-Header-branding">

        <h1 class="WP-Header-title">
            <a href="<?php echo esc_url(home_url('/'));?>">
            <?php bloginfo('name');?>
            </a>
        </h1>

        <p class="WP-Header-description">
            <?php echo bloginfo('description');?>
        </p>

    </div>
    
</header>
fredyfx
  • 11,989
  • 10
  • 30
  • 58
jbort
  • 402
  • 1
  • 9
  • El archivo `post.php` lo has creado tú o es parte de Wordpress? En la línea 1 de ese archivo estaría saliendo contenido que rompe el JSON según dice el mensaje de error. – A. Cedano Aug 13 '21 at 17:49
  • El archivo post.php es del wordpress, yo no lo he tocado ni creado nada de ahí, No lo he mirado si quiera pues el error esta en mi código. Lo he probado en dos Wordpress distintos y me salia lo mismo. – jbort Aug 13 '21 at 17:52
  • He descubierto que las páginas si que las crea a pesar de dar el error, pero el shortcode no funciona. Yo he puesto estos archivos, pues creo que el error esta por ahí. – jbort Aug 13 '21 at 17:54
  • 1
    Ambos errores ocurren cuando se espera un JSON y sale por pantalla otra cosa aparte de ese JSON, o cuando ese JSON no se crea correctamente debido a problemas de codificación, de estar mal formateado, etc. Ahora bien, con todo lo que aportas es complicado decirte dónde está el problema (tendríamos primero que adivinar la lógica, lo que quieres hacer, etc y luego tratar de encontrar el problema). Sugiero que actives el modo DEBUG de Wordpress y sigas la traza del código para encontrar con mayor facilidad el lugar exacto del error. Si no lo encuentras nos puedes dar esos detalles en la pregunta – A. Cedano Aug 13 '21 at 17:58
  • Puse el resultado del debug.log al final de la pregunta, solo arroja un resultado. – jbort Aug 13 '21 at 18:36
  • 1
    ¿Por qué descartas que sea esa la causa del problema cuando en realidad es casi seguro que lo sea. Observa que estás queriendo usar la variable fuera de la función `fwpt_wp_header_style` que es quien la recibe en parámetro. Ese error podría ser el que está rompiendo el JSON. Prueba a poner el bloque `` dentro de la función. – A. Cedano Aug 13 '21 at 21:59
  • Esto me soluciona el problema de las paginas, gracias Cedano, eres un crack. Por otra parte, el shortcode me da el mismo error al intentar ponerlo, voy a intentar encontrarle solución, si no la encuentro, haré una pregunta nueva para no mezclar temas. Por cierto, descartaba esa causa del problema por inexperiencia y por seguir mi intuición, A veces hasta me funciona. :). – jbort Aug 14 '21 at 08:14

1 Answers1

1

En primer lugar conviene activar el modo debug de Wordpress para poder seguir con mayor facilidad la traza del error.

El Undefined variable: header_text_color viene provocado porque estás intentando usar la variable $header_text_color fuera del contexto donde ésta existe.

Intenta corregir el código de esta manera:

if(!function_exists('fwpt_wp_header_style')):

    function fwpt_wp_header_style(){
        $header_text_color = get_header_textcolor();
    ?>
        <style>

            .WP-Header-branding *{
                color:#<?php echo esc_attr($header_text_color);?>
            }
        </style>

    <?php 
    }    
endif;

De este modo la variable quedará dentro del contexto de la función.

Para más detalles sobre cómo funciona el ámbito de las variables en PHP puedes consultar la pregunta: ¿Cuál es el ámbito y el ciclo de vida «real» de una variable global en PHP? y también esta otra pregunta: ¿Cual es el ámbito de visibilidad de una variable declara en PHP?.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221