-
Jinigoe
I have implemented a shortcode, which can be found here, to display a 1-5 star rating based on a custom post_meta field created with ACF. I integrated this shortcode directly into my functions.php file by modifying the $rating = get_field(‘MY_ACF_CUSTOM_FIELD’) variable.
In order to showcase the star rating in my archive query loop element, I included the shortcode [star_bar]. However, it appears that the dynamic value retrieved is always coming from the first post. Please check my screenshots for more context.
What could be wrong?
Thanks.
-
Fernando
Hi Jinigoe,
Shortcodes will always return the get value of the page viewed on a Query Loop.
You’ll need to filter it in.
Can you try creating a Container Block and give it a class of:
cu-star-placeholder
. Adding Custom Classes: https://wordpress.com/support/wordpress-editor/adding-additional-css-classes-to-blocks/Then, add this snippet:
add_filter( 'render_block', function( $block_content, $block ) { if ( !is_admin() && ! empty( $block['attrs']['className'] ) && strpos( $block['attrs']['className'], 'cu-star-placeholder' ) !== false ) { $rating_term = get_field('rating'); $star_color = 'orange'; $prefix = 'star-bar-'; $uniqueClass = uniqid($prefix); $percentage = 100 * $rating_term / 5; $html = '<strong>'.$rating_term.'/5</strong> <span class="'.$uniqueClass.'">★★★★★</span> <style> .'.$uniqueClass.' { background: linear-gradient(90deg, '. $star_color . ' ' . $percentage .'%, rgba(0,0,0,1) '. $percentage.'%); color: rgba(0,0,0,0); background-clip: text; -webkit-background-clip: text; } </style> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Rating", "ratingValue": '.$rating_term.', "bestRating": "5", "worstRating": "1" } </script> '; return $html; } return $block_content; }, 10, 2 );
Adding PHP: https://docs.generatepress.com/article/adding-php/#code-snippets
-
Jinigoe
Thank you so much! Adding a filter did the trick!
-
Fernando
You’re welcome, Jinigoe!
- You must be logged in to reply to this topic.