web-dev-qa-db-fra.com

Utiliser un thème dans un répertoire de plugin

Je construis un plugin convivial pour les mobiles et mets le répertoire theme dans le répertoire du plugin.

Si c'est un navigateur mobile, comment puis-je rediriger vers le thème dans le répertoire du plugin?

  /wp-content/plugins/mobview/theme/

J'ai réussi à utiliser la redirection suivante:

wp_redirect( plugins_url('/mobview/theme/index.php') );
exit ;

Mais je suis un peu perdu dans la redirection de répertoire dans la structure de WordPress.

3
Hamza

Bonjour @ Hamza:

Je pense que ce que vous cherchez à faire est que votre plugin raccorde 'template_include' pour lui dire de charger un fichier depuis votre répertoire plugin. Voici le code de démarrage de votre plugin:

<?php
/*
Plugin Name: Mobile View Plugin
*/

if (is_mobile_user()) // YOU NEED TO DEFINE THIS FUNCTION
  class MobileViewPlugin {
    static function on_load() {
      add_filter('template_include',array(__CLASS__,'template_include'));
    }
    function template_include($template_file) {
      return dirname( __FILE__) . '/theme/index.php';
    }
  }
  MobileViewPlugin::on_load();
}

Bien sûr, cela nécessitera que vous filtriez d'une manière ou d'une autre quand ce n'est pas un utilisateur mobile en définissant la fonction is_mobile_user() (ou similaire) et cela signifie également que votre /theme/index.php devra tout gérer , inclus toutes les URL car vous avez pratiquement contourné le routage par défaut des URL en procédant de la sorte (ou vous pouvez inspecter les valeurs de template_file et réutiliser la logique en effectuant un routage vers des fichiers équivalents dans votre répertoire de plugin.) Bonne chance.

P.S. Cela ne fournit pas une solution mobile pour l'administrateur. Ce serait 10 fois plus impliqué.

3
MikeSchinkel

Vous comprenez mal la mécanique du fonctionnement du thème. Il a le modèle index.php, mais la demande est toujours traitée par le index.php principal de WordPress à la racine du site. Cela n'a aucun sens de rediriger le visiteur vers le dossier du thème, car les thèmes ne doivent pas être visités directement (ils s'attendent à ce que WP core soit chargé pour eux, etc.).

Je ne maîtrise pas bien ces plugins, mais j'imagine qu'ils utilisent probablement le hook template_redirect pour charger leurs modèles au lieu de ceux du thème actif correspondant au navigateur mobile.

Je pense qu'ils sont assez nombreux plugins sur ce sujet dans le référentiel officiel, vous pouvez consulter leur code pour obtenir une idée des techniques couramment utilisées.

4
Rarst

si je ne me trompe pas, essayez ce code

$includes_path = TEMPLATEPATH . '/your folder name/';

alors écris ceci

require_once ($includes_path . 'file name');

2
Niraj Chauhan

bien ,

je pense que j'ai mal expliqué ma question, mais j'ai expliqué plus en détail dans les sous-commentaires:

Tout ce dont j'avais besoin: pour activer un autre thème, dans un répertoire différent, et pour faire ce genre de chose

premier :

enregistrer le nouveau répertoire de thèmes:

register_theme_directory( WP_PLUGIN_DIR . '/mobview/theme' );

2ème:

ajouter un filtre pour utiliser ce thème:

function loading_mobv_template() {
    return 'hamzamob';
}

function loading_mobv_style() {
    return 'hamzamob';

 }

dd_filter('stylesheet','loading_mobv_style');
add_filter('template','loading_mobv_template'); 

Il ne me reste plus qu'à choisir si le navigateur est un mobile ou non, puis activez l'action.

Je vous remercie .


update: voici la réponse à ma première question. Je vous remercie :)

0
Hamza