Site logo

Archived topic

GP 3.0 Alpha 4 and generate_do_post_meta_item( 'author' ) bug?

5 replies · Started by Espen on September 10, 2020

Viewing posts 1–6 of 6

Hi,

I'm building a custom element in GP 3.0 Alpha 4 to display the meta information and featured image full width below the header and above the content and sidebar.

I'm using the generate_after_header hook in the GPP elements section with the following code:

<?php 

if ( is_single() ) : ?>

    <div class="page-header-content generate-page-header generate-content-header">
        <div class="grid-container">
					<div class="heading_wrapper">
						
				<div class="nn-cat nn-single-cat">
					<?php echo generate_do_post_meta_item( 'categories' ); ?>
						</div>
           <div class="above-header-title entry-title">
						 <h1><?php the_title(); ?></h1>
						<span> <?php generate_do_post_meta_item( 'author' ); generate_do_post_meta_item( 'date' );?></span>
						</div>
						
							</div>
           <?php if ( has_post_thumbnail() ) { ?>
               <div class="featured-image-in-header">
                   <?php the_post_thumbnail(); ?>
               </div>
           <?php } ?>
        </div>
    </div>
<?php endif; ?>

It all works except the generate_do_post_meta_item( 'author' ) which does print out the surrounding classes but does not include the post author name itself.

Not sure if this is a bug or just me not doing it right but hoping you can help.

-Espen

Hi there,

You won't be able to get the author name outside the loop without some custom code.

Instead of using that function, try this:

global $post;
$author_id = $post->post_author;

printf(
    '<span class="author vcard" itemtype="http://schema.org/Person" itemscope="itemscope" itemprop="author"><a class="url fn n" href="%1$s" title="%2$s" rel="author" itemprop="url"><span class="author-name" itemprop="name">%3$s</span></a></span>',
    esc_url( get_author_posts_url( $author_id ) ),
    /* translators: author name */
    esc_attr( sprintf( __( 'View all posts by %s', 'gp-premium' ), get_the_author_meta( 'display_name', $author_id ) ) ),
    esc_html( get_the_author_meta( 'display_name', $author_id ) )
);

Aha, I see. Sorry about that. I considered whether it might be a loop thing but since it worked for comments, categories, and date I thought it would work for author as well.

Added your code and it works well. Thanks! :)

Just wondered if this is the recommended way to achieve the layout I am going for (see link in private information)?

The plan is to add the generate_after_header hook, to display meta information and header image.

Then use the new generate_before_do_template_part on is_single to filter the content and output only the_content.

add_filter( 'generate_do_template_part', function( $do ) {
    if ( is_single() ) {
        return false;
    }
    return $do;
} );

add_action( 'generate_before_do_template_part', function() {
    if ( is_single() ) :
			?>
        <article <?php post_class(); ?>>
          <?php the_content(); ?>
        </article>
    <?php endif;
} );

Does this sound like the best course of action or is there a different way you would recommend?

Thanks again!

-Espen

The author functions are a little different for some reason - it's tripped me up a few times before as well.

You can do that for sure.

Another way would be to just disable the default title and post meta - that way you're outputting the content only without having to filter it.

Thanks Tom,

Would there perhaps be a speed benefit to disabling the default title and post meta instead of filtering the loop?

I'm not quite sure how to disable the post title? I might be a little blind, but there seem to be options in the customizer for toggling off everything else in a blog post but not the title?

Thanks again!

-Espen

This archived topic is closed to new replies.