So rendern Sie Elementor-Posts-Widget mit einem Ajax-Aufruf neu

Lesezeit: 2 Minuten

Ich arbeite mit Elementor in WordPress. Ich zeige meinen benutzerdefinierten Beitragstyp mit dem Beitrags-Widget an. Ich habe einen AJAX-Filter erstellt, der meine Beiträge zusätzlich nach verschiedenen Werten filtert – was bisher funktioniert.

Jetzt stehe ich vor dem Problem, dass ich das Elementor-Post-Widget nicht erneut rendern kann. Dies ist obligatorisch, um die gefilterten Ergebnisse innerhalb des Widgets zu erhalten, da elementor standardmäßig nur eine serverseitige Filterung zulässt.

Ich verwende einen benutzerdefinierten Abfragefilter (https://developers.elementor.com/custom-query-filter/), um die Filterergebnisse in das Element- oder Post-Widget zu verschieben.

Grundsätzlich ist meine Frage, ob es eine Elementor-Funktion gibt, die ich mit Ajax aufrufen kann, um Elementor-Widgets neu zu rendern.

  • Hallo, vielleicht ajax_render_widget: code.elementor.com/methods/… kann dabei hilfreich sein, habe es aber nicht wirklich benutzt, daher kann ich keine richtige Antwort geben.

    – Andreas Myriounis

    16. November 2020 um 16:54 Uhr

Benutzeravatar von Mikepote
Mikepote

Ich habe eine Weile gebraucht, um das herauszufinden, aber ich habe eine Methode, die funktioniert:

  1. Sie müssen die aktuelle Beitrags-ID und die ID des Widgets an Ihre AJAX-Methode übergeben:

ID des Widgets: Kann im Wrapper-Div Ihres Widgets in der gefunden werden data-id Attribut.

Beitrags-ID: Elementor speichert dies tatsächlich bereits in einem Javascript-Global: window.elementorFrontendConfig.post.id

  1. Verwenden Sie in Ihrer AJAX-Aktion die folgende Funktion, um ein Widget aus der angegebenen Post-ID und Widget-ID zu rendern:
function render_element($postid, $elementid)
{
    $document = \Elementor\Plugin::$instance->documents->get( $postid );

    if ( ! $document ) {
        return new \WP_Error(
            'document_not_exist',
            __( 'Document doesn\'t exist', 'elementor-pro' ),
            [ 'status' => 404 ]
        );
    }

    $element_data = $document->get_elements_data();
    $widget = \Elementor\Utils::find_element_recursive( $element_data, $elementid );

    if ( empty( $widget ) ) {
        return new \WP_Error(
            'Element_not_exist',
            __( 'Posts widget doesn\'t exist', 'elementor-pro' ),
            [ 'status' => 404 ]
        );
    }

    // Override the global $post for the render.
    query_posts(
        [
            'p' => $postid,
            'post_type' => 'any',
        ]
    );

    \Elementor\Plugin::$instance->documents->switch_to_document( $document );
    $html = $document->render_element($widget);

    //Not sure if this is needed in AJAX context:
    // \Elementor\Plugin::$instance->documents->restore_document();
    // \wp_reset_query();

    return [
        'content' => $html,
    ];
}

1437930cookie-checkSo rendern Sie Elementor-Posts-Widget mit einem Ajax-Aufruf neu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy