Soporte » Guías – Resolución de problemas » Nombre de autor no se muestra en la cabecera del post

  • Resuelto alenprei

    (@alenprei)


    Hola,

    Llevo tiempo trabajando sobre una hijo que he creado a partir de la plantilla Zerif.

    He modificado el single.php y el content-title.php para personalizar la estructura de los posts del blog de manera que en la cabecera aparezca debajo del título la categoría a la que pertenece, la fecha de publicación y el nombre del autor. El problema que por algún motivo el nombre del autor no se muestra. He probado con otra plantilla por defecto de WordPress y si se muestra. ¿Alguna idea?

    Código del single.php

    <?php
    /**
     * The Template for displaying all single posts.
     *
     * @package zerif-lite
     */
    get_header(); ?>
    
    <div class="clear"></div>
    
    </header> <!-- / END HOME SECTION  -->
    <?php zerif_after_header_trigger(); ?>
    
    <div id="content" class="site-content">
    
    	<div class="full-width-container">
    		<?php
    		get_template_part( 'content-title');
    		?>
    	</div>
    
    	<div class="container">
    		<?php zerif_before_single_post_trigger(); ?>
    		<div class="content-left-wrap col-md-12">
    			<?php zerif_top_single_post_trigger(); ?>
    			<div id="primary" class="content-area">
    				<main itemscope itemtype="http://schema.org/WebPageElement" itemprop="mainContentOfPage" id="main" class="site-main">
    				<?php
    				while ( have_posts() ) :
    					the_post();
    
    						get_template_part( 'content', 'single' );
    
    						the_post_navigation(
    							array(
    								'next_text' => _x( '%title <span class="meta-nav">&rarr;</span>', 'Next post link', 'zerif-lite' ),
    								'prev_text' => _x( '<span class="meta-nav">&larr;</span> %title', 'Previous post link', 'zerif-lite' ),
    							)
    						);
    
    						// If comments are open or we have at least one comment, load up the comment template
    					if ( comments_open() || '0' != get_comments_number() ) :
    						comments_template( '' );
    						endif;
    					endwhile; // end of the loop.
    					?>
    				</main><!-- #main -->
    			</div><!-- #primary -->
    			<?php zerif_bottom_single_post_trigger(); ?>
    		</div><!-- .content-left-wrap -->
    		<?php zerif_after_single_post_trigger(); ?>
    		
    	</div><!-- .container -->
    <?php get_footer(); ?>
    

    Código del content-title.php

    
    <?php
    /**
     * Content used in single.php
     *
     * @package zerif-lite
     */
    ?>
    <!--<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>-->
    
    	<header class="banner-image">
    
          	<?php the_post_thumbnail('banner-image'); ?>
               		
          	<div class="entry-title"> 
         		<h1><?php the_title(); ?></h1>
         		<p><?php the_category(', '); ?><p>
            	<p><?php zerif_posted_on(); ?></p>
    
    	</header><!-- .entry-header -->
    
    <!--</article>-->
    
    • Este debate fue modificado hace 3 años, 8 meses por alenprei.
    • Este debate fue modificado hace 3 años, 8 meses por alenprei.

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

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

    (@lgrusin)

    No tienes que hacer nada, el tema viene preparado para mostrar el autor.

    Pero por alguna razón no lo muestra, añade en Apariencia – Personalizar – CSS adicional

    .byline, .updated {
        display: initial;
    }

    Un saludo

    Iniciador del debate alenprei

    (@alenprei)

    Gracias por tu respuesta, LGrusin. Esto es algo que ya había probado anteriormente y funcionó. Sigue sin mostrarse el nombre del autor. Solamente la fecha de publicación del post 🙁

    Moderador LGrusin

    (@lgrusin)

    ¿Cargas la hoja de estilos del tema padre? Podrías ponerlo en el style.css del tema hijo.

    ¿Usas alguna caché? Vaciala y elimina temporales del navegador por si no te reflejara los cambios que haces.

    Saludos

    • Esta respuesta fue modificada hace 3 años, 8 meses por LGrusin.
    • Esta respuesta fue modificada hace 3 años, 8 meses por LGrusin.

    Es que en el archivo content-title.php no tienes ningún código que muestre el autor. Para mostrar el autor utiliza la etiqueta de plantilla the_author() para mostrar el autor directamente o la función get_the_author() para obtener el autor de la entrada que posteriormente puedes mostrar con un echo.

    Saludos.

    Iniciador del debate alenprei

    (@alenprei)

    @lgrusin Ok, he probado a vaciar el caché y nada, sigue sin aparecer. Por otro lado, si no me equivoco, cuando en la hoja de estilos del tema hijo se añade lo siguiente:

    /*
       Theme Name: Zerif Lite
       Description: This is a custom child theme I have created.
       Author: ThemeIsle
       URI: https://themeisle.com/themes/zerif-lite/ 
       Template: zerif-lite
       Version: 1.8.5.35
     */

    Entonces el tema hijo hereda toda la funcionalidad y estilos del tema padre, ¿no?

    Iniciador del debate alenprei

    (@alenprei)

    @edalzurc Efectivamente, en content-title.php no se hace referencia al autor porque se está usando la función zerif_posted_on() que a su vez llama a la del autor. Aquí va el código de dicha función:

    if ( ! function_exists( 'zerif_posted_on' ) ) :
    
    	/**
    	 * Prints HTML with meta information for the current post-date/time and author.
    	 */
    	function zerif_posted_on() {
    
    		$time_string = '<time class="entry-date published" datetime="%1$s">%2$s</time>';
    
    		if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) {
    
    			$time_string .= '<time class="updated" datetime="%3$s">%4$s</time>';
    
    		}
    
    		$time_string = sprintf(
    			$time_string,
    			esc_attr( get_the_date( 'c' ) ),
    			esc_html( get_the_date() ),
    			esc_attr( get_the_modified_date( 'c' ) ),
    			esc_html( get_the_modified_date() )
    		);
    
    			printf(
    				/* translators: 1 - Publish date, 2 - Author */
    				__( '<span class="posted-on">Posted on %1$s</span><span class="byline"> by %2$s</span>', 'zerif-lite' ),
    				sprintf(
    					'<a href="%1$s" rel="bookmark">%2$s</a>',
    					esc_url( get_permalink() ),
    					$time_string
    				),
    				sprintf(
    					'<span class="author vcard"><a class="url fn n" href="%1$s">%2$s</a></span>',
    					esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
    					esc_html( get_the_author() )
    				)
    			);
    
    	}
    Iniciador del debate alenprei

    (@alenprei)

    De hecho, esto es muy extraño. En la página principal del Blog, ahora de repente aparece el nombre del autor arriba encima de la palabra «Blog»…

    http://airefresco.co/new-site/blog/

    Vale, creía que la función zerif_posted_on() solo mostraba la fecha. Me acabo de dar cuenta de que en el archivo content-title.php el <div class="entry-title"> no lo tienes cerrado. Ciérralo que seguro que es por este motivo que no se muestra el autor correctamente.

    Saludos.

    Iniciador del debate alenprei

    (@alenprei)

    @edalzurc Uy, qué despiste. A veces de tanto mirar y mirar se me pasan estos detalles tan obvios, jeje Pues curiosamente lo que ha pasado al cerrar el div es ¡que aparece el tiempo de lectura y no es nombre del autor! Esto es de locos…

    En el código HTML de tu página los párrafos que deberían contener fecha y autor aparecen comentados y vacios. Si no los tienes comentados tú en el archivo content-title.php, es posible que algún plugin esté interfiriendo en la cabecera.

    Moderador LGrusin

    (@lgrusin)

    A ver, que nos estamos liando.

    1 – Las hojas de estilos del tema padre no se cargan en el tema hijo
    para eso debes hacer lo siguiente en el archivo functions.php del tema hijo poner:

    
    <?php
    add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );
    function my_theme_enqueue_styles() {
     wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    }
    ?>

    De esta forma usará los estilos del padre.
    A no ser que quieras usar tus propios estilos en el style.css del tema hijo.

    2 – Los estilos del tema padre a modificar en Apariencia – Personalizar – CSS adicional del tema hijo:

    .byline, .single .byline, .group-blog .byline {
        display: initial;
    }

    EDITO
    El enlace que has puesto tiene otros estilos totalmente diferentes, por tanto el CSS adicional que he puesto no funcionará. Habrá que empezar desde el principio para ver qué has modificado.

    Un saludo

    • Esta respuesta fue modificada hace 3 años, 8 meses por LGrusin.
    • Esta respuesta fue modificada hace 3 años, 8 meses por LGrusin.
    • Esta respuesta fue modificada hace 3 años, 8 meses por LGrusin.
    • Esta respuesta fue modificada hace 3 años, 8 meses por LGrusin.
    • Esta respuesta fue modificada hace 3 años, 8 meses por LGrusin.
    Iniciador del debate alenprei

    (@alenprei)

    @lgrusin De hecho el functions.php del hijo tienen ya un código muy similar al que has puesto donde, si no me equivoco, se llama a la hoja de estilos del padre.

    <?php
    add_action( 'wp_enqueue_scripts', 'child_enqueue_styles',99);
    function child_enqueue_styles() {
        $parent_style = 'parent-style';
        wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
        wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array( $parent_style ) );
    }
    if ( get_stylesheet() !== get_template() ) {
        add_filter( 'pre_update_option_theme_mods_' . get_stylesheet(), function ( $value, $old_value ) {
             update_option( 'theme_mods_' . get_template(), $value );
             return $old_value; // prevent update to child theme mods
        }, 10, 2 );
        add_filter( 'pre_option_theme_mods_' . get_stylesheet(), function ( $default ) {
            return get_option( 'theme_mods_' . get_template(), $default );
        } );
    }
    Iniciador del debate alenprei

    (@alenprei)

    @lgrusin He revertido el código del single.php a su estado original y ahora si se muestra el nombre del autor. Entonces debo de haber hecho algo mal cuando modifiqué dicho archivo: http://airefresco.co/new-site/articulo-destacado/

    Lo que trataba de hacer con esta personalización del php de los posts, es añadir una imagen de cabecera a toda pantalla, es decir full width, con el título del post, categoría, fecha de publicación, nombre del autor y tiempo de lectura en los posts.

    Para ello, edite el single.php y cree ese nuevo archivo content-title.php con el código que compartía más arriba.

    ¿Alguna idea de por qué esta fallando?

    Gracias por vuestros comentarios.

    Moderador LGrusin

    (@lgrusin)

    Hay dos cosas a tener en cuenta:
    1 – La función encargada de mostrar el autor zerif_posted_on debe ir dentro del bucle while. Muestra la fecha de la entrada y el autor de la misma.
    2 – Sin embargo, en el style.css la información del autor se ha ocultado.

    .byline,
    .updated {
     display: none;
    }
    .single .byline,
    .group-blog .byline {
     display: none;
    }

    Esto quiere decir que si no usas los estilos del tema padre la información del autor se muestra perfectamente. ¿Necesitas los estilos del tema padre?

    Saludos

    Iniciador del debate alenprei

    (@alenprei)

    LGrusin En base a las pruebas que he estado haciendo con el php, creo que no tiene nada que ver con la hoja de estilos. En cuanto cambio el contenido del content-single.php para que sea ahí donde se llame a la función zerif_posted_on() , es decir, la que contiene la información de la fecha de publicación, autor, etc, entonces SI se muestra el nombre del autor. En cuanto muevo dicha función a otro archivo php, deja de mostrarse.

    Lo que ocurre es que quiero aislar el contenido de la cabecera del post (imagen+titulo del post+datos de publicación) para que se muestre en un div con un ancho del 100%. Por eso me veía obligado a sacar la función zerif_posted_on() de su lugar original en el content-single.php e incluirlo en un nuevo php solamente con la cabecera del post para que después lo llamara single.php. Pero está visto que así no funciona.

    Recapitulando, si el código del single.php es este:

    <?php
    /**
     * The Template for displaying all single posts.
     *
     * @package zerif-lite
     */
    get_header(); ?>
    
    <div class="clear"></div>
    
    </header> <!-- / END HOME SECTION  -->
    <?php zerif_after_header_trigger(); ?>
    
    <div id="content" class="site-content">
    
    	<div class="container">
    		<?php zerif_before_single_post_trigger(); ?>
    		<div class="content-left-wrap col-md-9">
    			<?php zerif_top_single_post_trigger(); ?>
    			<div id="primary" class="content-area">
    				<main itemscope itemtype="http://schema.org/WebPageElement" itemprop="mainContentOfPage" id="main" class="site-main">
    				<?php
    				while ( have_posts() ) :
    					the_post();
    
    						get_template_part( 'content', 'single' );
    
    						the_post_navigation(
    							array(
    								'next_text' => _x( '%title <span class="meta-nav">&rarr;</span>', 'Next post link', 'zerif-lite' ),
    								'prev_text' => _x( '<span class="meta-nav">&larr;</span> %title', 'Previous post link', 'zerif-lite' ),
    							)
    						);
    
    						// If comments are open or we have at least one comment, load up the comment template
    					if ( comments_open() || '0' != get_comments_number() ) :
    						comments_template( '' );
    						endif;
    					endwhile; // end of the loop.
    					?>
    				</main><!-- #main -->
    			</div><!-- #primary -->
    			<?php zerif_bottom_single_post_trigger(); ?>
    		</div><!-- .content-left-wrap -->
    		<?php zerif_after_single_post_trigger(); ?>
    		<?php zerif_sidebar_trigger(); ?>
    	</div><!-- .container -->
    <?php get_footer(); ?>
    

    ¿Cómo/dónde puedo crear un div con un ancho del 100% con el contenido al que me refería anteriormente?

Viendo 15 respuestas - de la 1 a la 15 (de un total de 17)
  • El debate ‘Nombre de autor no se muestra en la cabecera del post’ está cerrado a nuevas respuestas.