• ResueltoModerador almendron

    (@almendron)


    El error se produce muy de vez en cuando en https://www.almendron.com/tribuna/archivo-por-autores/

    No ocasiona la caída de la página ni parece afectar a su funcionamiento salvo el hecho de que aparece en los logs de errores.

    PHP Fatal error: Uncaught Error: Object of class WP_Error could not be converted to string in .../page-templates/autores.php (115)

    El código arranca en:

    $terms = get_terms( array( 'taxonomy' => 'autor', 'orderby' => 'slug', 'number' => $per_page, 'offset' => $offset, 'paged' => $paged ) );

    Seguidamente hay un «foreach» y el error se produce dentro de esta estructura en la siguiente línea:

    $tag_left .= '<li><a href="'. get_term_link($term->slug, 'autor') . '" title="' . $term->count . ' artículos">'. $term->name . '</a></li>' . "\n";

    No puedo precisar si el error proviene de «get_term_link($term->slug, ‘autor’)», «$term->count» o de «$term->name». Lo que he hecho ha sido añadir una condición:

    $value1 = get_term_link($term->slug, 'autor');
    $value2 = $term->count;
    $value3 = $term->name;
    if ( (!is_wp_error($value1)) and (!is_wp_error($value2)) and (!is_wp_error($value3)) ) {
    .....
    }

    ¿Es adecuada esta solución? Esa es la cuestión que planteo.

    • Este debate fue modificado hace 2 meses, 1 semana por almendron.
    • Este debate fue modificado hace 2 meses, 1 semana por almendron.
Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)
  • Moderador Sergio

    (@kallookoo)

    Hola @almendron

    Mejor así:


    $tag_left = ''; // Definicion (vacia) para no crear un
    ul o ol vacio.
    if ( $terms && is_array( $terms ) ) {
    foreach ( $terms as $term ) {
    // Comprueba que es un term (clase WP_Term).
    if ( ! is_a( $term, '\WP_Term' ) ) {
    continue;
    }
    $term_link = get_term_link( $term );
    // Comprueba que se genero correctamente.
    if ( is_wp_error( $term_link ) || empty( $term_link ) ) {
    continue;
    }

    // Uso sprintf() para un mejor entendimiento, se puede cambiar por la version original.
    $tag_left .= sprintf(
    '<li><a href="%s" title="%s artículos">%s</a></li>',
    esc_url( $term_link ),
    esc_attr( $term->count ),
    esc_html( $term->name )
    ); // Eliminado el salto de linea, (basura en HTML)
    }
    }
    // Comprobacion final y se crea el ul o lo que uses.
    if ( ! empty( $tag_left ) ) {
    // Modifica el ul al gusto.
    $tag_left = '<ul>' . $tag_left . '</ul>';
    }
    • Esta respuesta fue modificada hace 2 meses por almendron.
    Moderador almendron

    (@almendron)

    Muchas gracias, Sergio.

Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)

Debes estar registrado para responder a este debate.