How to filter my shortcode?
-
Hello everyone.
I created a custom shortcode for my Vikinger theme that displays achievements with a filter for the type of achievement. I did it this way so that it displays using the existing theme template. However, I need it to display only the achievements that the user has and not all the achievements on the site. How can I do this?
Code:
/* * Shortcode para Menu Mochila */ function my_achievements_shortcode( $atts ) { // Recebe os atributos do shortcode $atts = shortcode_atts( array( 'type' => 'mascotes', 'id' => '' ), $atts ); // Define a variável $achievement_type $achievement_type = $atts['type']; // Exibe as conquistas $all_achievements = vikinger_gamipress_get_logged_user_achievements($achievement_type); // Define o número de itens por página $items_per_page = 12; // Obtém o número total de conquistas $total_items = count($all_achievements); // Calcula o número total de páginas $total_pages = ceil($total_items / $items_per_page); // Obtém o número da página atual $paged = isset($_GET[$atts['id']]) ? intval($_GET[$atts['id']]) : 1; // Define o início e o fim dos itens a serem exibidos na página atual $start = ($paged - 1) * $items_per_page; $end = $start + $items_per_page; // Define o link da paginação $page_link_base = add_query_arg($atts['id'], '', get_permalink()); // Define os argumentos para a exibição das conquistas na página atual $achievement_args = [ 'user_points' => vikinger_gamipress_get_logged_user_points(), 'achievement_complete_info' => false, ]; if ($achievement_type === 'quest') { $achievement_args['achievement_image_wrap'] = true; } // Definir o número máximo de páginas a serem exibidas na paginação $max_pages = 5; // Exibe as conquistas da página atual ob_start(); // inicia o buffer de saída ?> <?php if (empty($all_achievements)) : ?> <p id="vazio">🪰 Tudo vazio por aqui, volte mais tarde.</p> <?php else : ?> <div class="grid grid-3-3-3-3 medium-space centered-on-mobile grid-stretched grid-items uniquegrid"> <?php foreach (array_slice($all_achievements, $start, $items_per_page) as $achievement) : $achievement_args['achievement'] = $achievement; get_template_part('template-part/achievement/achievement', 'item-box', $achievement_args); endforeach; ?> </div> <?php endif; ?> <?php if ($total_pages > 1) : ?> <div class="pagination"> <ul> <?php if ($paged > 1) { ?> <li> <a href="<?php echo add_query_arg($atts['id'], ($paged - 1), $page_link_base); ?>" class="prev">«</a> </li> <?php } ?> <?php $start_page = max(1, $paged - floor($max_pages / 2)); $end_page = min($total_pages, $start_page + $max_pages - 1); for ($i = $start_page; $i <= $end_page; $i++) : // Adiciona o número da página à URL base $page_link = add_query_arg($atts['id'], $i, $page_link_base); ?> <li> <?php if ($paged === $i) : ?> <span class="current active"><?php echo $i; ?></span> <?php else : ?> <a href="<?php echo esc_url($page_link); ?>"><?php echo $i; ?></a> <?php endif; ?> </li> <?php endfor; ?> <?php if ($paged < $total_pages) { ?> <li> <a href="<?php echo add_query_arg($atts['id'], ($paged + 1), $page_link_base); ?>" class="next">»</a> </li> <?php } ?> </ul> </div> <?php endif; ?> <?php return ob_get_clean(); // retorna o conteúdo do buffer de saída e limpa ele } add_shortcode( 'my_achievements', 'my_achievements_shortcode' );
Viewing 1 replies (of 1 total)
Viewing 1 replies (of 1 total)
The topic ‘How to filter my shortcode?’ is closed to new replies.