Oferta SiteGround Black Friday

Tutorial Divi: Añadir compatibilidad con Sensei

El plugin LMS de creación de cursos online Sensei, del equipo de WooCommerce es una solución fantástica pero no todos los temas son compatibles con el plugin.

Y Divi no es una excepción, pues por defecto no es compatible con Sensei, aunque es muy fácil conseguirlo para, de este modo, usar el mejor tema con este sistema de creación de cursos y lecciones online.

De hecho, si activas Sensei en un sitio con Divi prácticamente son inutilizables las páginas de cursos y lecciones al usar contenedores que no se adaptan en absoluto.

Solo tienes que añadir el siguiente código al archivo functions.php del tema hijo y guardar los cambios para que Divi sea totalmente compatible con Sensei.

/**
 * Compatibilidad Divi + Sensei
 *
 * Esta parte es para ocultar el aviso de no compatible con Sensei en el admin.
 */
add_action( 'after_setup_theme', 'divi_sensei_support' );
function divi_sensei_support() {
 add_theme_support( 'sensei' );
}
/**
 * Ahora quitamos los contenedores por defecto de Sensei
 */
global $woothemes_sensei;
remove_action( 'sensei_before_main_content', array( $woothemes_sensei->frontend, 'sensei_output_content_wrapper' ), 10 );
remove_action( 'sensei_after_main_content', array( $woothemes_sensei->frontend, 'sensei_output_content_wrapper_end' ), 10 );
/**
 * Y añadimos contenedores de contenido específicos de Divi
 */
add_action('sensei_before_main_content', 'divi_sensei_wrapper_start', 10);
add_action('sensei_after_main_content', 'divi_sensei_wrapper_end', 10);
function divi_sensei_wrapper_start() {
 echo '<div id="main-content">
 <div class="container">
 <div id="content-area" class="clearfix">
 <div id="left-area">';
 //<div id="content-area" class="clearfix">'
 //echo '<div id="primary" class="content-area"><main id="main" class="site-main" role="main">';
}
function divi_sensei_wrapper_end() {
 echo ' </div> <!-- #left-area -->';
 get_sidebar();
 echo ' </div> <!-- #content-area -->
 </div> <!-- div.container -->
 </div><!-- #main-content -->';
}

El código anterior hace varias cosas. Por un lado elimina el aviso de tema no compatible con Sensei para, a continuación, sustituir el código CSS de los contenedores de contenido por defecto de Sensei por  unos específicos para Divi, mucho mejor adaptados a su estructura.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 4.7 / 5. Total de votos: 15

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado. ¡Ah! ¿te funciona? pues entonces no he dicho nada :)

Sobre el autor

12 comentarios en “Tutorial Divi: Añadir compatibilidad con Sensei”

  1. Hola Fernando,
    esta modificación que comentas para añadir la compatibilidad con sensei crees que valdría para cualquier plantilla? O es solo para Divi?
    Muchas gracias y un saludo,
    David Hernanz

  2. Hola, ya puse el codigo mas otro que me permite usar la libreria en los curso y lecciones la pregunta es como hacer para que el teacher pueda usar el visual builder en el fron end eso aun no pude lograrlo aunque el admin si puede hacerlo, gracias

      1. Gracias Fernando , si esta todo habilitado como viene por default
        el gestor de roles ha incluido a Teachers como role y tengo en
        Interfaz Del Generador De:
        Usar Constructor visual habilitado, pero aun asi no me lo eja usar via front end , he incluido este codigo en el functions para que en el back end pueda usar la biblioteca:

        function sb_et_builder_post_types( $post_types ) {
        $post_types[] = ‘course’;
        $post_types[] = ‘lesson’;

        return $post_types;
        }
        add_filter( ‘et_builder_post_types’, ‘sb_et_builder_post_types’ );

        add_filter( ‘et_pb_show_all_layouts_built_for_post_type’, ‘sb_et_pb_show_all_layouts_built_for_post_type’ );

        function sb_et_pb_show_all_layouts_built_for_post_type() {
        return ‘page’;
        }

    1. Hola Alberto, ¿cómo te ha ido con esta integración?¿Podrías indicarme cuál es el otro código que permite usar la librería en los cursos? GRACIAS DE ANTEMANO!

  3. Hola Fernando.
    Este código lo he utilizado y a mi no me ha dado resultado.
    Es entendible con la cantidad de cambios sucedidos desde el 2017 hasta ahora, y Gutenberg por medio.
    Hasta pronto.
    Que tengas una excelente semana.

  4. Buenas tardes Fernando,
    Primeramente darte las gracias por brindarme un minuto de tu tiempo, tengo un problema con el Modul de sensei.
    me sale este problema

    Warning: in_array() expects parameter 2 to be array, null given in /home/iexminy/iexminy.cluster030.hosting.ovh.net/wp-content/plugins/woothemes-sensei/plugins/sensei-lms/includes/class-sensei-modules.php on line 2236
    public function append_teacher_name_to_module( $terms, $taxonomies, $args ) {
    		// only for admin users ont he module taxonomy
    		if ( empty( $terms ) || ! current_user_can( 'manage_options' ) || ! in_array( 'module', $taxonomies ) || ! is_admin() ) {
    			return $terms;
    		}
     
    		// in certain cases the array is passed in as reference to the parent term_id => parent_id
    		// In other cases we explicitly require ids (as in 'tt_ids' or 'ids')
    		// simply return this as wp doesn't need an array of stdObject Term
    		if ( isset( $args['fields'] ) && in_array( $args['fields'], array( 'id=>parent', 'tt_ids', 'ids' ) ) ) {
     
    			return $terms;
     
    		}
     
    		$users_terms = [];
     
    		// loop through and update all terms adding the author name
    		foreach ( $terms as $index => $term ) {
     
    			if ( is_numeric( $term ) ) {
    				// the term id was given, get the term object
    				$term = get_term( $term, 'module' );
    			}
     
    			$author = self::get_term_author( $term->slug );
     
    			if ( ! user_can( $author, 'manage_options' ) && isset( $term->name ) ) {
    				$term->name = $term->name . ' (' . $author->display_name . ') ';
    			}
     
    			// add the term to the teachers terms
    			$users_terms[] = $term;
     
    		}
     
    		return $users_terms;
    	}

    Como puedo solucionarlo.
    Un saludo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
- Responsable: Fernando Tellado ([email protected])
- Fin del tratamiento: Moderación de comentarios para evitar spam
- Legitimación: Tu consentimiento
- Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
- Derechos: Acceso, rectificación, portabilidad, olvido

 

Scroll al inicio