Elementor Cutom Query czyli niestandardowe zapytanie podczas filtracji wpisów i produktów.

Custom query to niestandardowe zapytanie do bazy danych WordPressa. Jest to zapytanie, które nie jest generowane automatycznie przez WordPress, ale zostało napisane przez programistę lub użytkownika, aby uzyskać dostęp do określonych danych w bazie danych.

W WordPressie, custom query może zostać wykonane za pomocą funkcji WP_Query() lub get_posts(). Custom query daje programiście większą kontrolę nad tym, jakie dane są pobierane z bazy danych i w jaki sposób są wyświetlane na stronie.

Custom query może być użyte do wyświetlenia postów, stron, produktów Woocommerce, niestandardowych typów postów lub innych typów danych z bazy danych WordPressa. Custom query może być również filtrowane, sortowane i paginowane według różnych kryteriów, takich jak kategorie, tagi, daty, autorzy, atrybuty niestandardowe itp.

Custom query może być stosowane w różnych częściach WordPressa, takich jak strona główna, szablony stron, archiwa, szablony kategorii, wyniki wyszukiwania i wiele innych. Dzięki temu programiści i użytkownicy WordPressa mają większą kontrolę nad wyświetlaniem treści na stronie i mogą dostosować ją do swoich potrzeb.

W popularnym Elementorze również można korzystać z custom query, aby uzyskać większą kontrolę nad wyświetlanymi danymi na stronie. Można to zrobić za pomocą tzw. Custom Query Filter w polu Query ID, które umożliwia filtrowanie wyświetlanych postów na podstawie określonych kryteriów.

Użycie Custom Query Filter w Elementorze jest szczególnie przydatne, gdy chcemy wyświetlić tylko wybrane posty lub produkty Woocommerce na stronie, które spełniają określone kryteria. Dzięki temu mamy większą kontrolę nad tym, co i w jaki sposób jest wyświetlane na stronie i możemy dostosować wygląd strony do swoich potrzeb.

Kod custom query można umieścić w plikach szablonów WordPressa lub w pliku functions.php w katalogu aktywnego motywu.

Niestety aby stworzyć własne zapytanie potrzeba jest wiedza programistyczna. Poniżej prezentujemy klika najczęściej używanych zapytań które mogą być pomocne:

Wyświetlanie produktów z tej samej kategorii

function custom_query_callback( $query ) {
    if ( $query->get( 'post_type' ) == 'product' ) { // Sprawdź, czy zapytanie dotyczy produktów
        $queried_object = get_queried_object(); // Pobierz obiekt bieżącego zapytania
        if ( isset( $queried_object->term_id ) ) {
            $tax_query = array(
                array(
                    'taxonomy' => 'product_cat', // Określ, że chcesz przefiltrować według kategorii produktów
                    'field' => 'term_id', // Określ, że chcesz szukać po identyfikatorze kategorii
                    'terms' => array( $queried_object->term_id ), // Określ identyfikator kategorii, dla której chcesz wyświetlić produkty
                    'operator' => 'IN',
                ),
            );
            $query->set( 'tax_query', $tax_query ); // Ustaw tax_query na wartość ustaloną powyżej
        }
    }
}
add_action( 'elementor/query/custom_filter', 'custom_query_callback' );

W powyższym kodzie sprawdzamy, czy zapytanie dotyczy produktów, a następnie pobieramy obiekt bieżącego zapytania, aby uzyskać identyfikator kategorii produktów, dla której chcemy wyświetlić produkty.

Następnie tworzymy tablicę tax_query, która zawiera jeden warunek wyszukiwania, z określeniem, że chcemy filtrować według kategorii produktów (taxonomy 'product_cat’), według identyfikatora kategorii (field 'term_id’) i że szukamy identyfikatora kategorii, który jest równy identyfikatorowi kategorii bieżącego zapytania (terms array($queried_object->term_id), operator 'IN’).

W końcu ustawiamy tax_query w zapytaniu na wartość ustaloną powyżej, używając metody set().

Ostatni wiersz to dodanie hooka akcji elementor/query z ustawionym query_id na custom_filter, co jest potrzebne, aby Elementor wiedział, które zapytanie ma być modyfikowane przez nasz kod.

Wyświetlenie wpisów tej samej kategorii

function custom_query_callback( $query ) {
    if ( $query->get( 'post_type' ) == 'post' ) { // Sprawdź, czy zapytanie dotyczy wpisów
        $queried_object = get_queried_object(); // Pobierz obiekt bieżącego zapytania
        if ( isset( $queried_object->term_id ) ) { 
            $tax_query = array(
                array(
                    'taxonomy' => 'category', // Określ, że chcesz przefiltrować według kategorii wpisów
                    'field' => 'term_id', // Określ, że chcesz szukać po identyfikatorze kategorii
                    'terms' => array( $queried_object->term_id ), // Określ identyfikator kategorii, dla której chcesz wyświetlić wpisy
                    'operator' => 'IN',
                ),
            );
            $query->set( 'tax_query', $tax_query ); // Ustaw tax_query na wartość ustaloną powyżej
        }
    }
}
add_action( 'elementor/query/custom_filter', 'custom_query_callback' );

Wyświetlenie wpisów o tym samym tagu

function custom_query_callback( $query ) {
    if ( $query->get( 'post_type' ) == 'post' ) { // Sprawdź, czy zapytanie dotyczy wpisów
        $queried_object = get_queried_object(); // Pobierz obiekt bieżącego zapytania
        if ( isset( $queried_object->term_id ) ) { 
            $tag_query = array(
                array(
                    'taxonomy' => 'post_tag', // Określ, że chcesz przefiltrować według tagów wpisów
                    'field' => 'term_id', // Określ, że chcesz szukać po identyfikatorze tagu
                    'terms' => wp_get_post_tags( $queried_object->ID ), // Pobierz tagi wpisów dla bieżącej strony
                    'operator' => 'IN',
                ),
            );
            $query->set( 'tax_query', $tag_query ); // Ustaw tax_query na wartość ustaloną powyżej
        }
    }
}
add_action( 'elementor/query/custom_filter', 'custom_query_callback' );

Wyświetlanie postów na stronie archiwum dla danego zapytania

function custom_query_callback( $query ) {
    if ( is_archive() && $query->is_main_query() ) { // Sprawdź, czy jesteśmy na stronie archiwum i czy zapytanie jest główne
        if ( is_category() ) { // Sprawdź, czy jesteśmy na stronie kategorii
            $queried_object = get_queried_object(); // Pobierz obiekt bieżącej kategorii
            $tax_query = array(
                array(
                    'taxonomy' => 'category', // Określ, że chcesz przefiltrować według kategorii
                    'field' => 'term_id', // Określ, że chcesz szukać po identyfikatorze kategorii
                    'terms' => array( $queried_object->term_id ), // Określ identyfikator bieżącej kategorii
                ),
            );
            $query->set( 'tax_query', $tax_query ); // Ustaw tax_query na wartość ustaloną powyżej
        } elseif ( is_tag() ) { // Sprawdź, czy jesteśmy na stronie tagu
            $queried_object = get_queried_object(); // Pobierz obiekt bieżącego tagu
            $tax_query = array(
                array(
                    'taxonomy' => 'post_tag', // Określ, że chcesz przefiltrować według tagów
                    'field' => 'term_id', // Określ, że chcesz szukać po identyfikatorze tagu
                    'terms' => array( $queried_object->term_id ), // Określ identyfikator bieżącego tagu
                ),
            );
            $query->set( 'tax_query', $tax_query ); // Ustaw tax_query na wartość ustaloną powyżej
        }
    }
}
add_action( 'elementor/query/custom_filter', 'custom_query_callback' );

Powyższy kod sprawdza, czy jesteśmy na stronie archiwum (funkcja is_archive()) i czy zapytanie jest główne (funkcja $query->is_main_query()). Następnie, w zależności od tego, czy jesteśmy na stronie kategorii czy tagu, pobieramy bieżący obiekt kategorii lub tagu i tworzymy odpowiednią tablicę tax_query, którą ustawiamy w zapytaniu ($query->set( 'tax_query', $tax_query )). Dzięki temu zapytanie zwróci tylko posty z wybranej kategorii lub tagu.

Scroll to Top