it-swarm.dev

Come creare un modulo Divi personalizzato?

Come posso aggiungere un modulo personalizzato per il tema Divi Wordpress? http://www.elegantthemes.com/gallery/divi/

I moduli originali sono creati in main-modules.php

Esempio:

class ET_Builder_Module_Gallery extends ET_Builder_Module { .... }

Ma la classe ET_Builder_Module non è accessibile nel mio plugin, o in theme functions.php

17
Kiss Bálint

La maggior parte delle altre soluzioni qui sono troppo complesse. Il modo più semplice è caricare il modulo personalizzato nel gancio di azione specifica divi et_builder_ready, in questo modo:

add_action( 'et_builder_ready', 'evr_initialize_divi_modules' );

function evr_initialize_divi_modules() {
    if ( ! class_exists( 'ET_Builder_Module' ) ) { return; }

    class EVR_Builder_Module_Testimonial extends ET_Builder_Module {
        function init() {
            $this->name       = esc_html__( 'Testimonial', 'evr' );
            $this->slug       = 'evr_pb_testimonial';
            $this->fb_support = true;

            // ...

        }
    }
}

Puoi trovare il codice demo completo su github. Insieme ad alcune istruzioni su come farlo funzionare nel nuovissimo costruttore di frontend Divi 3:

https://github.com/stracker-phil/divi3-vb-custom-modules/

11
Philipp

Inserisci qui sotto il tuo file functions.php. Il file include (l'ho chiamato custom-modules.php) sarà una classe che estende ET_Builder_Module (che è molto simile a WP_Widget). Basta aprire il file da Divi >> include >> builder >> main-modules.php. Utilizzare uno dei moduli preesistenti come esempio o base per il nuovo. Copia e incolla il tuo custom-modules.php. Nuovi nomi di classi, apportare modifiche se necessario, ecc.

function doCustomModules(){
 if(class_exists("ET_Builder_Module")){
    include("custom-modules.php");
 }
}

function prepareCustomModule(){
 global $pagenow;

 $is_admin = is_admin();
 $action_hook = $is_admin ? 'wp_loaded' : 'wp';
 $required_admin_pages = array( 'edit.php', 'post.php', 'post-new.php', 'admin.php', 'customize.php', 'edit-tags.php', 'admin-ajax.php', 'export.php' ); // list of admin pages where we need to load builder files
 $specific_filter_pages = array( 'edit.php', 'admin.php', 'edit-tags.php' ); // list of admin pages where we need more specific filtering
 $is_edit_library_page = 'edit.php' === $pagenow && isset( $_GET['post_type'] ) && 'et_pb_layout' === $_GET['post_type'];
    $is_role_editor_page = 'admin.php' === $pagenow && isset( $_GET['page'] ) && 'et_divi_role_editor' === $_GET['page'];
    $is_import_page = 'admin.php' === $pagenow && isset( $_GET['import'] ) && 'wordpress' === $_GET['import']; // Page Builder files should be loaded on import page as well to register the et_pb_layout post type properly
    $is_edit_layout_category_page = 'edit-tags.php' === $pagenow && isset( $_GET['taxonomy'] ) && 'layout_category' === $_GET['taxonomy'];

 if ( ! $is_admin || ( $is_admin && in_array( $pagenow, $required_admin_pages ) && ( ! in_array( $pagenow, $specific_filter_pages ) || $is_edit_library_page || $is_role_editor_page || $is_edit_layout_category_page || $is_import_page ) ) ) {
    add_action($action_hook, 'doCustomModules', 9789);
 }
}
$theme_data = wp_get_theme();
$parent_data = $theme_data->parent();
if(version_compare((string)$parent_data->Version, "2.5.9", ">")) {
    add_action('et_builder_ready', 'doCustomModules');
} else {
    doCustomModule();
}
6
Aryan Duntley

Nota importante: Lo slug per il tuo modulo personalizzato must contiene la stringa et_pb_, o verrà filtrato dalla funzione et_pb_allowed_modules_list().

Sono stato in grado di aggiungere un nuovo modulo Divi usando il seguente codice (richiede PHP 5.3+ per la funzione anonima):

add_action(is_admin() ? 'wp_loaded' : 'wp', function() {
  require __DIR__ . '/custom-divi-module.php';
}, 20);

All'interno del file incluso, copia e incolla un class dal file wp-content/themes/Divi/includes/builder/main-modules.php, quindi modifica in base alle tue esigenze. Vedere l'esempio di seguito (copiare una classe reale dal file menzionato per ottenere il contenuto di ciascun metodo elencato di seguito ... Mi piace la classe ET_Builder_Module_Code per motivi di semplicità):

class YOUR_MODULE_NAME extends ET_Builder_Module {
  function init() {
    // Name, slug, and some other settings for the module go here
  }

  function get_fields() {
    // This method returns an array of fields that the module will
    // display as the module settings
  }

  function shortcode_callback($atts, $content = null, $function_name) {
    // This method returns the content the module will display
  }
}
new YOUR_MODULE_NAME;
3
thirdender

Il codice sopra non ha funzionato Anche la funzione deve essere chiamata. 

Ecco un esempio con codice funzionante da https://divi.space/blog/adding-custom-modules-to-divi/

function DS_Custom_Modules(){
 if(class_exists("ET_Builder_Module")){
 include("ds-custom-modules.php");
 }
}

function Prep_DS_Custom_Modules(){
 global $pagenow;

$is_admin = is_admin();
 $action_hook = $is_admin ? 'wp_loaded' : 'wp';
 $required_admin_pages = array( 'edit.php', 'post.php', 'post-new.php', 'admin.php', 'customize.php', 'edit-tags.php', 'admin-ajax.php', 'export.php' ); // list of admin pages where we need to load builder files
 $specific_filter_pages = array( 'edit.php', 'admin.php', 'edit-tags.php' );
 $is_edit_library_page = 'edit.php' === $pagenow && isset( $_GET['post_type'] ) && 'et_pb_layout' === $_GET['post_type'];
 $is_role_editor_page = 'admin.php' === $pagenow && isset( $_GET['page'] ) && 'et_divi_role_editor' === $_GET['page'];
 $is_import_page = 'admin.php' === $pagenow && isset( $_GET['import'] ) && 'wordpress' === $_GET['import']; 
 $is_edit_layout_category_page = 'edit-tags.php' === $pagenow && isset( $_GET['taxonomy'] ) && 'layout_category' === $_GET['taxonomy'];

if ( ! $is_admin || ( $is_admin && in_array( $pagenow, $required_admin_pages ) && ( ! in_array( $pagenow, $specific_filter_pages ) || $is_edit_library_page || $is_role_editor_page || $is_edit_layout_category_page || $is_import_page ) ) ) {
 add_action($action_hook, 'DS_Custom_Modules', 9789);
 }
}
Prep_DS_Custom_Modules();
3
Roy Toledo

Voglio provare a sistemare il piccolo dibattito qui. Classe ET_Builder_Module_Custom_Module estende ET_Builder_Module {} in realtà funziona e main-modules.php può essere modificato liberamente SE viene utilizzato un tema figlio . Recentemente ho ajaxificato un tema Divi e dopo l'aggiornamento tutto ha funzionato come un incantesimo.

Nota: è sempre una buona idea controllare se ci sono aggiornamenti sui file che si usano all'interno del tema figlio, perché a volte potrebbe essere necessario aggiornare anche i file secondari.

Spero che questo abbia aiutato tutti i futuri lettori di questo post. 

HFGL con i nuovi moduli che stai per creare;)

2

Per creare moduli personalizzati, userei i moduli esistenti per creare un disegno (layout), salverei quel progetto nella libreria Divi e userei i moduli Testo o Codice e scriverei tutto il codice HTML/jquery lì. 

Mi piace qui, https://github.com/Skaidrius/Divi/tree/master/Layouts/Price-list

0
Skaidrius