Überschreibt Plugin-Dateien in WordPress-Designs

Ich habe ein Plugin für die Verwendung aller WordPress Themes entwickelt. Jetzt, abhängig von den Designanforderungen, muss ich einige Dateien in einigen Dateien ändern. Aber ich möchte mein Plugin nicht anfassen. Ich habe gebraucht

  add_theme_support ('jeweltheme-core'); 

Ich habe Plugins Dateien und Ordner auf die gleiche Weise auf Plugin kopiert. Ich muss “Widget” Dateien bearbeiten. Ich kann keinen Weg finden, dieses Problem zu lösen.

Beispiel: Wir überschreiben “WooCommerce” -Templates, indem wir das Verzeichnis “templates” verwenden, das auf unser Theme kopiert und in “woocommerce” umbenannt wird. Ich möchte genau wie diese Lösung.

Vielen Dank

Solutions Collecting From Web of "Überschreibt Plugin-Dateien in WordPress-Designs"

Wenn Sie das Plugin geschrieben haben, würde ich vorschlagen, dass Sie etwas wie folgt hinzufügen:

// Define these constants once in your main plugin init file define( 'YOUR_PLUGIN_SLUG', 'your-plugin-slug' ); define( 'YOUR_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'YOUR_PLUGIN_TEMPLATE_DIR', trailingslashit( YOUR_PLUGIN_DIR ) . 'templates' ); define( 'YOUR_PLUGIN_THEME_TEMPLATE_OVERRIDE_PATH_DIR', trailingslashit( get_stylesheet_directory() . '/' . YOUR_PLUGIN_SLUG ); // Define a function to locate template files function your_plugin_name_get_template_part_location( $part ) { $part = $part '.php'; // Look in the user's theme first for the file if ( file_exists( YOUR_PLUGIN_THEME_TEMPLATE_OVERRIDE_PATH_DIR . $part ) ) { $file = YOUR_PLUGIN_THEME_TEMPLATE_OVERRIDE_PATH_DIR . $part; } // Otherwise use the file from your plugin else { $file = YOUR_PLUGIN_TEMPLATE_DIR . $part; } } 

Zuerst definieren Sie einige Konstanten (tun Sie dies einmal in Ihrer Haupt-Plugin-Init-Datei), die Sie möglicherweise bereits haben.

Dann erlaubt die function den Aufruf von Dateien (in meinem Beispiel Template-Dateien in / plugins / your-plugin-name / templates).

Zum Beispiel könnten Sie verwenden

 get_template_part(your_plugin_name_get_template_part_location('widget')); 

Ihr Plugin sucht zuerst im Theme des Benutzers nach, ob eine Überschreibung vorhanden ist.

Wenn dies nicht existiert, wird es in Ihrem Plugin aussehen.

Natürlich können Sie dies ändern, um Ihre eigene Verzeichnisstruktur und Bedürfnisse anzupassen.

Ich habe meine Lösung so gemacht:


     function jeweltheme_core_get_template_path ($ template) {
         $ located = '';

         $ template_slug = rtrim ($ template, '.php');
         $ template = $ template_slug.  '.php';

         $ this_plugin_dir = WP_PLUGIN_DIR. '/'. str_replace (Basisname (__FILE__), "", plugin_basename (__ FILE__));

         if ($ Vorlage) {
             if (file_exists (get_stylesheet_directory (). '/ jeweltheme-core /'. $ template)) {
                 $ located = get_stylesheet_directory ().  "/ jeweltheme-core /".  $ Vorlage;
             } sonst if (file_exists (get_template_directory (). '/ jeweltheme-core /'. $ template)) {
                 $ located = get_template_directory ().  "/ jeweltheme-core /".  $ Vorlage;
             } sonst if (file_exists ($ this_plugin_dir. $ template)) {
                 $ located = $ this_plugin_dir.  $ Vorlage;
             }
         }

         Rückgabe $ lokalisiert;
     }