it-swarm.com.de

So erstellen Sie ein benutzerdefiniertes Divi-Modul

Wie kann ich ein benutzerdefiniertes Modul für das Divi Wordpress-Design hinzufügen? http://www.elegantthemes.com/gallery/divi/

Originalmodule werden in main-modules.php erstellt.

Beispiel:

class ET_Builder_Module_Gallery extends ET_Builder_Module { .... }

Die ET_Builder_Module-Klasse ist jedoch nicht in meinem Plugin oder im Theme functions.php verfügbar.

17
Kiss Bálint

Die meisten anderen Lösungen sind hier viel zu komplex. Am einfachsten ist es, Ihr benutzerdefiniertes Modul in den divi-spezifischen Aktionshook et_builder_ready zu laden, wie folgt:

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;

            // ...

        }
    }
}

Den vollständigen Demo-Code finden Sie auf github. Zusammen mit einigen Anweisungen, wie man es im neuen Divi 3 Frontend Builder zum Laufen bringt:

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

11
Philipp

Platzieren Sie unten in Ihrer Datei "functions.php". Die Include-Datei (ich habe es custom-modules.php genannt) ist eine Klasse, die ET_Builder_Module erweitert (was WP_Widget sehr ähnlich ist). Öffnen Sie einfach die Datei aus Divi >> enthält >> Builder >> Main-modules.php. Verwenden Sie eines der bereits vorhandenen Module als Beispiel oder Grundlage für Ihr neues. Kopieren Sie und fügen Sie sie in Ihre custom-modules.php ein. Neue Klassennamen, Änderungen nach Bedarf vornehmen usw.

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

Wichtiger Hinweis: Der Slug für Ihr benutzerdefiniertes Modul muss die Zeichenfolge et_pb_ enthalten, oder er wird von der Funktion et_pb_allowed_modules_list() ausgefiltert.

Ich konnte ein neues Divi-Modul mit folgendem Code hinzufügen (erfordert PHP 5.3+ für die anonyme Funktion):

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

Kopieren und fügen Sie in der enthaltenen Datei eine class aus der wp-content/themes/Divi/includes/builder/main-modules.php-Datei ein, und ändern Sie sie entsprechend Ihren Anforderungen. Sehen Sie sich das Beispiel unten an (kopieren Sie eine tatsächliche Klasse aus der genannten Datei, um den Inhalt der einzelnen unten aufgelisteten Methoden zu erhalten… Ich mag die ET_Builder_Module_Code-Klasse der Einfachheit halber):

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

Der obige Code hat nicht funktioniert. Die Funktion muss auch aufgerufen werden. 

Hier ein Beispiel mit Arbeitscode aus 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

Ich möchte versuchen, die kleine Debatte hier zu regeln . Klasse ET_Builder_Module_Custom_Module erweitert ET_Builder_Module {} funktioniert tatsächlich und main-modules.php kann frei geändert werden WENN ein Child Theme verwendet wird. Ich habe kürzlich ein Divi Theme ajaxifiziert und nach dem Update funktionierte alles wie ein Zauber.

Hinweis: Es ist immer eine gute Idee, zu prüfen, ob Aktualisierungen der von Ihnen verwendeten Dateien im untergeordneten Design vorhanden sind, da Sie unter Umständen auch die untergeordneten Dateien aktualisieren müssen.

Ich hoffe, dass dies allen zukünftigen Lesern dieses Beitrags geholfen hat. 

HFGL mit den neuen Modulen, die Sie gerade erstellen werden;)

2

Um benutzerdefinierte Module zu erstellen, würde ich vorhandene Module verwenden, um ein Design (Layout) zu erstellen, dieses Design in der Divi-Bibliothek speichern, Text- oder Code-Module verwenden und den gesamten HTML-/Jquery-Code dort schreiben. 

Wie hier: https://github.com/Skaidrius/Divi/tree/master/Layouts/Preisliste

0
Skaidrius