Comment DOIT être structuré le répertoire d'un plugin?

9

J'obtiens le concept de plugin de base. J'ai lu l'article du Codex sur l' écriture d'un plugin

Cet article parle du "fichier plugin principal".

Comment Wordpress détermine-t-il "le fichier de plugin principal"?

Q1:
Est-il légal / pris en charge d'avoir un plugin qui est structuré comme ceci:

  • nom du plugin /
  • pluginname / mainfile.php
  • nom du plugin / supportcode-1.php
  • nom du plugin / supportcode-2.php
  • pluginname / Readme.txt
  • etc..

?

Q2:
Dans l'affirmative, comment wordpress détermine-t-il quel fichier php est le fichier plugin principal?


J'ai vu des recommandations qui disent "Je structure mon code de cette façon ":

  • nom du plugin /
  • pluginname / mainfile.php
  • pluginname / inc / supportcode-1.php
  • pluginname / inc / supportcode-2.php
  • pluginname / Readme.txt
  • etc..

Q3:
L'utilisation d'un sous-répertoire (comme inc/dans l'exemple ci-dessus) est-elle obligatoire lorsque le code PHP s'étend sur plusieurs modules?

Q4:
Est-il vrai qu'il devrait y avoir au maximum UN fichier php dans le répertoire principal du plugin?

Merci.

Cheeso
la source
Certes, votre première question `` Comment WordPress détermine-t-il le fichier PHP principal '' trouve-t-elle une réponse directe dans le guide principal `` Écriture d'un plugin '' sur les en
icc97

Réponses:

12

Comment Wordpress détermine-t-il "le fichier de plugin principal"?

C'est le fichier de votre plugin qui contient le commentaire d'en-tête du plugin

/**
 * Plugin Name: A fresh example
 * Plugin URI:  http://example.com
 * Description: Foo makes a bar
 * Version:     2012-06-14.1426
 * Author:      John Doe
 * Author URI:  http://example.com
 * TextDomain:  your_textdomain
 * License:     MIT
 * LicenseURI:  http://www.opensource.org/licenses/mit-license.php
 */

Q1: Est-il légal / pris en charge d'avoir un plugin qui est structuré comme ceci:

Oui. Chaque structure de répertoire (dans la mesure où elle est prise en charge par les serveurs) est légale.

Q2: Dans l'affirmative, comment wordpress détermine-t-il quel fichier php est le fichier plugin principal?

Voir ci-dessus ↑

Q3: L'utilisation d'un sous-répertoire (comme inc / dans l'exemple ci-dessus) est-elle obligatoire lorsque le code PHP s'étend sur plusieurs modules?

Exigence? Non. Plus agréable à lire: oui. Plus facile à entretenir: également oui.

Q4: Est-il vrai qu'il devrait y avoir au maximum UN fichier php dans le répertoire principal du plugin?

Non, tout simplement pas.

Résumé

La façon dont vous organisez complètement vos fichiers et répertoires dépend de vous, de vos préférences personnelles et de rien d'autre. Si vous souhaitez faciliter la maintenance et permettre aux autres développeurs de parcourir votre code, vous devez utiliser une sorte d'organisation de fichiers / répertoires.

Exemples

Personnellement, j'ajoute en .class.phptant qu'extension, quand j'ai obtenu un cours en elle. Je nomme également mes fichiers exactement comme la classe. La raison est simple: mon "fichier de plugin principal" - qui est ma bootstrapclasse, se soucie normalement de charger toutes les choses nécessaires.

// inside my PREFIX_bootstrap class:
public static $includes = array(
    'settings'          => false // Parent class - no need to hook
   ,'settings_extended' => true  // Extending class - hooks static init() on `init` hook
);

public function construct()
{
    // The prefix for every class in my plugin
    $prefix = 'my_class_prefix_';

    foreach ( $this->files as $handle => $hook )
    {
        require_once plugin_dir_path( __FILE__ )."{$handle}.class.php";

        if ( ! $hook )
            continue;

        $class = $prefix.$handle;
        class_exists( $class ) AND add_action( 'init', array( $class, 'init' ), 1 );
    }
}

Cela signifie que mes classes et fichiers sont nommés comme suit:

  • settings.class.php ET settings_extended.class.php
  • my_class_prefix_settings ET my_class_prefix_settings_extended

Je fais également une organisation de base des répertoires, comme le stockage de tous les js/css/imgfichiers dans des répertoires nommés comme ceci.

Certaines personnes utilisent (pour un plugin plus grand) des dossiers nommés inc/includes/assets/extensions/lib/etc.. Je recommanderais d'utiliser des sous-dossiers pour les gros plugins uniquement. Si vous avez des éléments supplémentaires comme des widgets, etc., vous pouvez utiliser des sous-dossiers spécifiques pour eux.

Dernier mot: non, rien de ce que vous avez trouvé n'est vrai , ceux-ci (comme les trucs que je vous ai montrés) ne sont que des recommandations.

kaiser
la source
1
Merci pour cette réponse. Ainsi, le commentaire d'en-tête est la façon dont wordpress trouve le "fichier plugin principal". Il ne charge que celui-là, n'est-ce pas? Et bien sûr, tous les autres fichiers php subsidiaires qui sont requis ou inclus par celui-ci. Correct? Je suppose que ce n'était tout simplement pas clair pour moi dans le codex. Je viens de le relire et je vois ce qu'il dit maintenant. J'aimerais qu'il dise quelque chose comme "Wordpress recherche le seul fichier dans votre zip qui a cet en-tête spécial; il ignore les autres fichiers dans le zip." Ou quelque chose de ce genre. de toute façon merci.
Cheeso
Oui, il charge uniquement les fichiers que vous spécifiez plus le fichier "principal". Sachez qu'il existe des crochets qui ont des parties spécifiques à la page, pour éviter de tout charger à chaque demande.
kaiser