Hi Daniele,
Thank you for reaching out to us. Yes, this would be possible using custom development. However, as this would represent a customization of the theme rather than a problem with the native controls of the theme, it is beyond the scope of support.
With that being said I’ll point you in the right direction to get you started. Depending on the stack you’re using, you will need to go find the function for this in the stack specific functions file. You can find these at the following path in X (I’m assuming you’re using X):
/framework/functions/frontend
Once you are here, open up the file corresponding to the Stack you are using. For example, if you are using the Integrity Stack, you will need to open integrity.php .
To continue on with the Integrity example, you would then need to find the x_integrity_entry_meta() function. Next, copy this entire function into the functions.php file of your child theme.
This function renders the post meta and here you can add Yoast Estimated Reading Time feature globally for all posts. As an example , I’ll share the code with your so you can paste this in your child theme’s functions.php file:
if ( ! function_exists( 'x_integrity_entry_meta' ) ) :
function x_integrity_entry_meta() {
//
// Author.
//
$author = sprintf( '<span><i class="x-icon-pencil" data-x-icon-s=""></i> %s</span>',
get_the_author()
);
//
// Date.
//
$date = sprintf( '<span><time class="entry-date" datetime="%1$s"><i class="x-icon-calendar" data-x-icon-s=""></i> %2$s</time></span>',
esc_attr( get_the_date( 'c' ) ),
esc_html( get_the_date() )
);
//
// Categories.
//
if ( get_post_type() == 'x-portfolio' ) {
if ( has_term( '', 'portfolio-category', NULL ) ) {
$categories = get_the_terms( get_the_ID(), 'portfolio-category' );
$separator = ', ';
$categories_output = '';
foreach ( $categories as $category ) {
$categories_output .= '<a href="'
. get_term_link( $category->slug, 'portfolio-category' )
. '" title="'
. esc_attr( sprintf( __( "View all posts in: “%s”", '__x__' ), $category->name ) )
. '"><i class="x-icon-bookmark" data-x-icon-s=""></i> '
. $category->name
. '</a>'
. $separator;
}
$categories_list = sprintf( '<span>%s</span>',
trim( $categories_output, $separator )
);
} else {
$categories_list = '';
}
} else {
$categories = get_the_category();
$separator = ', ';
$categories_output = '';
foreach ( $categories as $category ) {
$categories_output .= '<a href="'
. get_category_link( $category->term_id )
. '" title="'
. esc_attr( sprintf( __( "View all posts in: “%s”", '__x__' ), $category->name ) )
. '"><i class="x-icon-bookmark" data-x-icon-s=""></i> '
. $category->name
. '</a>'
. $separator;
}
$categories_list = sprintf( '<span>%s</span>',
trim( $categories_output, $separator )
);
}
//
// Comments link.
//
if ( comments_open() ) {
$title = apply_filters( 'x_entry_meta_comments_title', get_the_title() );
$link = apply_filters( 'x_entry_meta_comments_link', get_comments_link() );
$number = apply_filters( 'x_entry_meta_comments_number', get_comments_number() );
$text = ( 0 == $number ) ? __( 'Leave a Comment', '__x__' ) : sprintf( _n( '%s Comment', '%s Comments', $number, '__x__' ), $number );
$comments = sprintf( '<span><a href="%1$s" title="%2$s" class="meta-comments"><i class="x-icon-comments" data-x-icon-s=""></i> %3$s</a></span>',
esc_url( $link ),
esc_attr( sprintf( __( 'Leave a comment on: “%s”', '__x__' ), $title ) ),
$text
);
} else {
$comments = '';
}
// Yoast snippet
$yoast = sprintf( '<span><i class="x-icon-clock" data-x-icon-s=""></i> %s</span>',
(string) YoastSEO()->meta->for_current_page()->estimated_reading_time_minutes. " minutes"
);
//
// Output.
//
if ( x_does_not_need_entry_meta() ) {
return;
} else {
printf( '<p class="p-meta">%1$s%2$s%3$s%4$s%5$s</p>',
$author,
$date,
$categories_list,
$comments,
$yoast
);
}
}
endif;
In the above code you’ll find this piece of code:
// Yoast snippet
$yoast = sprintf( '<span><i class="x-icon-clock" data-x-icon-s=""></i> %s</span>',
(string) YoastSEO()->meta->for_current_page()->estimated_reading_time_minutes. " minutes"
);
You can change this as you need, I’ve already added this for you so you can get started.
Please note that the code provided above serves as a guide only and is to help you in getting started so implementing it and maintaining the code will be out of our support scope and for further maintenance for new possible versions of the theme that may cause the customization to break, you will need to hire a developer.
Thank you for understanding!