Soporte » Diseño – Temas y plantillas » Menús personalizados

  • ResueltoModerador almendron

    (@almendron)


    Estoy probando en local el tema stargazer ( https://es.wordpress.org/themes/stargazer/ ) y he surgido un pequeño problema cuando añado en el archivo functions.phpun código que hace que la primera imagen de una entrada se marque automáticamente como destacada.
    El código es cuestión es:

    //primera imagen como destacada
    function auto_post_thumbnail() {
              global $post;
              $already_has_thumb = has_post_thumbnail($post->ID);
                  if (!$already_has_thumb)  {
                  $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" );
                              if ($attached_image) {
                                    foreach ($attached_image as $attachment_id => $attachment) {
                                    set_post_thumbnail($post->ID, $attachment_id);
                                    }
                               } else {
                                    set_post_thumbnail($post->ID, 'ID_imagen_por_defecto');
                               }
                            }
          }
     //Ahora añadimos la función al loop
    add_action('the_post', 'auto_post_thumbnail');
    add_action('save_post', 'auto_post_thumbnail');
    add_action('draft_to_publish', 'auto_post_thumbnail');
    add_action('new_to_publish', 'auto_post_thumbnail');
    add_action('pending_to_publish', 'auto_post_thumbnail');
    add_action('future_to_publish', 'auto_post_thumbnail');

    Pues bien, al ir a «Apariencia > Menús» y modificar alguno de ellos, me salta el siguiente aviso:
    Notice: Trying to get property of non-object in ... on line...
    Este aviso se repite para las siguientes líneas:
    1.- $already_has_thumb = has_post_thumbnail($post->ID);
    2.- $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" );
    3.- set_post_thumbnail($post->ID, $attachment_id);

    Lo más curioso del caso es que, si modifico el menú desde el personalizador, entonces no me aparece el aviso.

    Es seguro que se trata de un problema con el tema porque ese mismo código con otro tema no da el error.

    Ya se que es complicado saber por qué sucede pero me gustaría solucionarlo. Gracias.

Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • Moderador LGrusin

    (@lgrusin)

    Pregunto, ¿por qué no usas?
    if ( !has_post_thumbnail() )
    en vez de
    if (!$already_has_thumb)
    , o al revés
    if ( has_post_thumbnail() )
    o en todo caso
    if ($already_has_thumb === false)

    Un saludo

    Moderador almendron

    (@almendron)

    Creo que me he explicado mal.
    Como ya lo habrás visto, el código que he puesto sirve para añadir de forma automática un imagen destacada cuando publico un post. Funciona perfectamente.

    El problema es que, por motivos que desconozco, intenta ejecutarse cuando voy a Apariencia > Menús, e intento modificar uno de los menús. Al guardar los cambios es cuando se produce el error. Y es por el tema. Eso es seguro pero no se por qué lo hace.

    He probado a sacar el código del functions.php y ponerlo en un plugin pero el error se sigue produciendo.

    Es como si, al guardar el menú, estuviera en un post e intentará definir la imagen destacada. Como es obvio, al faltarle el id del post es cuando salta el aviso.

    Moderador almendron

    (@almendron)

    Bueno… vamos avanzando.
    He descubierto que el error se produce al intentar ejecutar «save_post». De hecho, si deshabilito la línea add_action('save_post', 'auto_post_thumbnail');, el error desaparece.

    Moderador LGrusin

    (@lgrusin)

    Eso es lo que te he querido decir, desde la versión 4.0 la función has_post_thumbnail() acepta un entero o un objeto.

    Puede que a la hora de actualizar el menú no tenga claro cuál es el parámetro de has_post_thumbnail().

    Por otro lado, si un elemento (objeto) del menú es un ID de un post o página es posible que muestre ese aviso si llamas a alguna de las acciones al guardar los cambios, como por ejemplo ‘save_post’. Que es la misma conclusión a la que has llegado al final.

    Un saludo

    Moderador almendron

    (@almendron)

    Me parece a mi que no nos estamos entendiendo:
    1.- El código funciona perfectamente cuando guardo, actualizo o publico un post. No da ningún mensaje de error.
    2.- Además del que he puesto, tengo otra función que también se ejecuta al guardar un post. También funciona perfectamente. No da ningún mensaje de error.
    3.- El error se produce exclusivamente cuando voy a «Apariencia > Menús» e intento guardar un cambio de cualquier menú personalizado.
    Y solo me aparece el error con el tema «stargazer».
    En teoría, «guardar un menú personalizado» no tiene nada que ver con «guardar o publicar un post».
    No se si ahora me he explicado bien.

    Moderador almendron

    (@almendron)

    Parece ser que he encontrado la solución. El error definitivamente viene de que no obtiene el valor adecuado de $post->ID.
    Por algún motivo, esta plantilla interfiere con tal función y no es capaz de utilizarla.
    Para solucionarlo he puesto
    $postid = get_the_ID (); y luego he sustituido $post->ID por $postid.

Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • El debate ‘Menús personalizados’ está cerrado a nuevas respuestas.