WordPress

Jak uzyskać zawartość widżetu w WordPress na podstawie jego identyfikatora?

  • 19 lutego, 2017
  • 3 min read
Jak uzyskać zawartość widżetu w WordPress na podstawie jego identyfikatora?


Właściwie w ten sposób nie można filtrować danych wszystkich widżetów. WordPress nie zapewnia żadnego natywnego sposobu filtrowania końcowego wyniku dowolnego widżetu. Istnieje jednak inny sposób modyfikowania dowolnej zawartości widżetu i są to:

1. Zmodyfikuj pliki źródłowe widżetu.

Oczywiście nie jest to dobra metoda, ponieważ Twoje modyfikacje zostaną utracone, jeśli WordPress lub wtyczka tworząca widżet zostanie zaktualizowana.

2. Skopiuj widżet do własnej wtyczki lub motywu i tam go zmodyfikuj.

3. Zastąp oryginalną funkcję wywołania zwrotnego wyświetlania widżetu funkcją niestandardową, która następnie uruchamia oryginalną funkcję wywołania zwrotnego wyświetlania, ale z filtrami.

Zasadniczo oryginalna funkcja wywołania zwrotnego wyświetlania widżetu jest zastępowana nową funkcją niestandardową, która uruchamia oryginalną funkcję wywołania zwrotnego widżetu, ale wykorzystuje buforowanie danych wyjściowych do przechwytywania danych wyjściowych i przepuszczania ich przez filtr przed wyświetleniem. Mam to tutaj Oto kod, którego można użyć w motywie lub wtyczce, który zapewni widget_output filtr wraz z typem widżetu i unikalnym identyfikatorem widżetu jako parametrami:

Najpierw musimy zastąpić oryginalną funkcję wywołania zwrotnego wyświetlania widżetu własną funkcją niestandardową:

function the_dramatist_filter_dynamic_sidebar_params( $sidebar_params ) {

    if ( is_admin() ) {
        return $sidebar_params;
    }

    global $wp_registered_widgets;
    $widget_id = $sidebar_params[0]['widget_id'];

    $wp_registered_widgets[ $widget_id ]['original_callback'] = $wp_registered_widgets[ $widget_id ]['callback'];
    $wp_registered_widgets[ $widget_id ]['callback'] = 'the_dramatist_custom_widget_callback_function';

    return $sidebar_params;

}
add_filter( 'dynamic_sidebar_params', 'the_dramatist_filter_dynamic_sidebar_params' );

Następnie musimy utworzyć funkcję, o której mowa w poprzednim bloku kodu, która z kolei uruchomi oryginalną funkcję wywołania zwrotnego wyświetlania widżetu, ale przechwyci jej dane wyjściowe przy użyciu buforowania wyjściowego PHP. A później widget_output filter zostanie uruchomiony na znacznikach HTML wygenerowanych przez widżet, zanim zostanie wyświetlony na stronie:

function the_dramatist_custom_widget_callback_function() {

    global $wp_registered_widgets;
    $original_callback_params = func_get_args();
    $widget_id = $original_callback_params[0]['widget_id'];

    $original_callback = $wp_registered_widgets[ $widget_id ]['original_callback'];
    $wp_registered_widgets[ $widget_id ]['callback'] = $original_callback;

    $widget_id_base = $wp_registered_widgets[ $widget_id ]['callback'][0]->id_base;

    if ( is_callable( $original_callback ) ) {

        ob_start();
        call_user_func_array( $original_callback, $original_callback_params );
        $widget_output = ob_get_clean();

        echo apply_filters( 'widget_output', $widget_output, $widget_id_base, $widget_id );

    }

}

Mając to na miejscu, możesz zrobić coś takiego w wtyczce lub motywie, aby zmodyfikować dane wyjściowe dowolnego widżetu:

function the_dramatist_widget_output_filter( $widget_output, $widget_id_base, $widget_id ) {

    /* To target a specific widget ID: */
    if ( 'target_widget_id' == $widget_id ) {
        // Apply your desired search and replace operations here
    }

    return $widget_output;

}
add_filter( 'widget_output', 'the_dramatist_widget_output_filter', 10, 3 );

Mam nadzieję, że powyższe pomoże.

Warto przeczytać!  Jak mogę uruchomić funkcję javascript po aktualizacji postu na ekranie edycji postu w panelu administracyjnym wordpress?


Źródło