Estoy trabajando con Elementor en WordPress. Muestro mi tipo de publicación personalizada con el widget de publicaciones. Creé un filtro AJAX que además filtra mis publicaciones por diferentes valores, lo que funciona hasta ahora.
Ahora me enfrento al problema de que no puedo volver a renderizar el elemento o el widget de publicación. Esto es obligatorio para obtener los resultados filtrados dentro del widget porque elementor solo permite el filtrado del sitio del servidor de forma predeterminada.
Estoy usando el filtro de consulta personalizado (https://developers.elementor.com/custom-query-filter/) para insertar los resultados del filtro en el widget elementor post.
Básicamente, mi pregunta es si hay una función elementor a la que pueda llamar con ajax para volver a renderizar los widgets elementor.
micropote
Me tomó un tiempo resolver esto, pero tengo un método que funciona:
- Debe pasar la ID de la publicación actual y la ID del widget a su método AJAX:
ID del widget: Se puede encontrar en el contenedor div de su widget en el data-id
atributo.
ID del mensaje: Elementor en realidad ya almacena esto en un javascript global: window.elementorFrontendConfig.post.id
- Dentro de su acción AJAX, use la siguiente función para representar un widget desde la ID de publicación y la ID de widget especificadas:
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,
];
}
hola, tal vez
ajax_render_widget
: code.elementor.com/methods/… puede ser de ayuda para eso, pero realmente no lo he usado, así que no puedo dar una respuesta adecuada.– Andreas Myriounis
16 de noviembre de 2020 a las 16:54