2015-07-22 14 views

risposta

-2

Si può fare modificando i file del tema Divi (che è male)

Ad esempio, è possibile modificare principale modules.php per aggiungere un nuovo modulo:

class ET_Builder_Module_Custom_Module extends ET_Builder_Module { 
    function init() { 
     $this->name = __('My Module', 'et_builder'); 
     $this->slug = 'et_pb_custom_module'; 

Dopo di che è necessario aggiungere il pannello per la personalizzazione in functions.php:

/* Section: Custom Module */ 
$wp_customize->add_section('et_pagebuilder_custom_module', array(
    'priority'  => 220, 
    'capability'  => 'edit_theme_options', 
    'title'   => __('My Module', 'Divi'), 
    // 'description' => '', 
)); 

Se fai una ricerca in functions.php troverai dove aggiungerlo facilmente;)

+0

Nessuno deve toccare quei file che avete specificato qui. Gli ami ci sono per farlo. – Alice

2

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 adificato un tema Divi e dopo l'aggiornamento tutto ha funzionato come un fascino.

Nota: è sempre consigliabile 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 si sta per creare;)

+0

Ti capita di avere codice di esempio o un tutorial che puoi condividere? –

+0

Ciao, immagino che la risposta sia un po 'in ritardo, ma puoi effettivamente usare ciò che Oterox ha come codice ma all'interno di un tema secondario main-modules.php –

6

Luogo di seguito nel 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 classe, fanno modifiche a seconda delle necessità, 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(); 
} 
+0

Questo potrebbe essere fatto in un plugin separato invece che in un tema? Ho provato tempo fa senza fortuna. – Oterox

+0

Sì, certo. Un tema figlio o un plugin funzionerà in modo identico. Assicurati di avere un file che crea i moduli personalizzati reali. Il codice sopra è solo per includere quel file. Ho notato (sopra il codice) dove trovare il codice del modulo preesistente per Divi. Basta copiare e incollare i moduli che si desidera personalizzare o utilizzare come modello per il proprio. –

+0

Non sembra funzionare per me ... Penso che non sembra funzionare per me non è chiamato ... Dove si suppone che la funzione prepareCustomModule() sia chiamata? –

3

Il codice di cui sopra non ha funzionato La funzione deve essere chiamato pure.

Ecco un esempio con il codice di lavoro 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(); 
+1

Vale la pena menzionare ... il tuo slug personalizzato nel file "ds-custom-modules.php" DEVE contenere la stringa "et_pb_", o verrà filtrato dalla funzione et_pb_allowed_modules_list(). Questo non è menzionato nell'esempio e mi ci sono voluti ore per capire !! –

2

Nota importante: La lumaca per il vostro modulo personalizzato must contengono la stringa et_pb_, oppure saranno filtrati dalla funzione et_pb_allowed_modules_list().

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

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

All'interno del file incluso, copiare e incollare un class dal file wp-content/themes/Divi/includes/builder/main-modules.php, quindi modificare in base alle proprie esigenze. Vedere l'esempio di seguito (copiare una classe reale dal file citato per ottenere il contenuto di ciascun metodo elencato di seguito ... mi piace la classe ET_Builder_Module_Code per 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; 
9

La maggior parte delle altre soluzioni qui sono troppo complesse. Il modo più semplice è quello di caricare il modulo personalizzato nel gancio azione divi specifica 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; 

      // ... 

     } 
    } 
} 

È possibile trovare il demo-codice completo su GitHub. Insieme con alcune istruzioni su come farlo funzionare in tutto il nuovo Builder 3 frontend Divi:

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

Problemi correlati