web-dev-qa-db-fra.com

Remplace les fichiers de plug-in sur les thèmes WordPress

J'ai développé un plugin pour utiliser tous les thèmes WordPress. Maintenant, en fonction de la configuration requise pour les thèmes, je dois modifier certains fichiers sur certains fichiers. Mais je ne veux pas toucher mon plugin. J'ai utilisé

add_theme_support ('jeweltheme-core');

Exemple: nous remplaçons les modèles "WooCommerce" à l'aide de la copie du répertoire "modèles" sur notre thème et le renommons "woocommerce". Je veux exact comme cette solution.

Merci

1
Liton Arefin

J'ai fait ma solution comme ceci:

 
 function jeweltheme_core_get_template_path ($ template) {
 $ local = ''; 
 
 $ template_slug = rtrim ($ template, '.php' ); 
 $ template = $ template_slug. '.php'; 
 
 $ this_plugin_dir = WP_PLUGIN_DIR. '/'. str_replace (basename (__FILE__), "", plugin_basename (__FILE__)); 
 
 if ($ template) {
 if (file_exists (get_stylesheet_directory (). '/ jeweltheme-core /'. $ template))) {
 $ local = get_stylesheet_directory (). '/ jeweltheme-core /'. $ template; 
} else if (file_exists (get_template_directory (). '/ jeweltheme-core /'. $ template)) {{.____.] $ local = get_template_directory (). '/ jeweltheme-core /'. $ template; 
} else if (file_exists ($ this_plugin_dir. $ template)) {
 $ local = $ this_plugin_dir. $ modèle; 
} 
} 
 
 renvoie $ local; 
} 
2
Liton Arefin

Si vous avez écrit le plugin, alors je vous suggère d'ajouter quelque chose comme ceci:

    // 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;
      }
    }

Tout d’abord, vous définissez certaines constantes (faites cela une fois dans votre fichier init du plugin principal), que vous possédez peut-être déjà.

Ensuite, la fonction vous permet d’appeler des fichiers (dans mon exemple, des fichiers de modèle dans/plugins/votre nom de plugin/templates).

Par exemple, vous pouvez utiliser

get_template_part(your_plugin_name_get_template_part_location('widget'));

Votre plugin examinera d'abord dans le thème de l'utilisateur pour voir si un remplacement est en place.

Si cela N'EXISTE PAS, il regardera dans votre plugin.

Bien sûr, vous pouvez le modifier pour l'adapter à votre propre structure de répertoire et à vos besoins.

1
Doug Belchamber