Jeśli używasz motywu Blocksy i shortcode’u [ blocksy_posts ] do wyświetlania podobnych lub losowych projektów, możesz zauważyć, że lista pokazuje również projekt, który aktualnie oglądasz.
Można to naprawić jednym prostym snippetem PHP.
Shortcode Blocksy
Użyj standardowego shortcode’u:
[blocksy_posts post_type="project" limit="2" has_pagination="no" orderby="rand"]
Shortcode wyświetla 2 losowe wpisy typu project.
Jak wykluczyć aktualny projekt?
Dodaj poniższy kod PHP za pomocą wtyczki Code Snippets lub Fluent Snippets:
add_filter(
'blocksy:general:shortcodes:blocksy-posts:args',
function ($query_args, $shortcode_args) {
if (
isset($shortcode_args['post_type']) &&
$shortcode_args['post_type'] === 'project' &&
is_singular('project')
) {
$current_id = get_queried_object_id();
if ($current_id) {
$query_args['post__not_in'] = array($current_id);
}
}
return $query_args;
},
10,
2
);
Jak działa kod?
WordPress automatycznie rozpoznaje ID aktualnie oglądanego projektu i dodaje je do listy wpisów, których nie należy wyświetlać.
Dzięki temu:
- aktualny projekt nie pojawi się na liście,
- pozostałe projekty mogą być losowane,
- nie trzeba ręcznie wpisywać ID,
- shortcode pozostaje bez zmian.
Gotowe
PHP:
add_filter(
'blocksy:general:shortcodes:blocksy-posts:args',
function ($query_args, $shortcode_args) {
if (
isset($shortcode_args['post_type']) &&
$shortcode_args['post_type'] === 'project' &&
is_singular('project')
) {
$current_id = get_queried_object_id();
if ($current_id) {
$query_args['post__not_in'] = array($current_id);
}
}
return $query_args;
},
10,
2
);
Shortcode:
[blocksy_posts post_type="project" limit="2" has_pagination="no" orderby="rand"]
Po dodaniu kodu wyczyść cache WordPressa, jeśli korzystasz z wtyczki cache.
FAQ
Czy trzeba zmieniać shortcode [ blocksy_posts ]?
Nie. Shortcode pozostaje bez zmian:
[blocksy_posts post_type="project" limit="2" has_pagination="no" orderby="rand"]
Czy muszę podawać ID projektu?
Nie. ID aktualnego projektu jest pobierane automatycznie przez WordPress.
Gdzie wkleić kod PHP?
Najbezpieczniej użyć wtyczki Code Snippets. Alternatywnie można dodać kod do functions.php motywu potomnego.
Czy rozwiązanie działa z losowaniem projektów?
Tak. orderby="rand" nadal losuje projekty, ale aktualnie oglądany projekt zostaje wykluczony.

Dodaj swój pierwszy komentarz do tego posta