web-dev-qa-db-fra.com

Création d'un plugin wordpress où les utilisateurs peuvent remplacer les modèles

Je vois des plugins où les utilisateurs peuvent remplacer les modèles de plugins en créant des fichiers dans leur propre dossier de thème, comment cela fonctionne-t-il?

Est-ce une partie intégrante de wordpress ou faut-il l'écrire?

2
redconservatory

Vous devez l'écrire vous-même. Découvrez comment WP le commerce électronique le fait:

Tout d’abord, la fonction "enregistrer" les fichiers de thème.

function wpsc_register_theme_file( $file_name ) {
    global $wpec_theme_files;

    if ( !in_array( $file_name, (array)$wpec_theme_files ) )
        $wpec_theme_files[] = $file_name;
}

Et puis la fonction pour trouver un fichier de thème:

/**
 * Checks the active theme folder for the particular file, if it exists then return the active theme directory otherwise
 * return the global wpsc_theme_path
 * @access public
 *
 * @since 3.8
 * @param $file string filename
 * @return PATH to the file
 */
 function wpsc_get_template_file_path( $file = '' ){

     // If we're not looking for a file, do not proceed
     if ( empty( $file ) )
         return;

     // No cache, so find one and set it
     if ( false === ( $file_path = get_transient( WPEC_TRANSIENT_THEME_PATH_PREFIX . $file ) ) ) {
         // Look for file in stylesheet
         if ( file_exists( get_stylesheet_directory() . '/' . $file ) ) {
             $file_path = get_stylesheet_directory() . '/' . $file;

         // Look for file in template
         } elseif ( file_exists( get_template_directory() . '/' . $file ) ) {
             $file_path = get_template_directory() . '/' . $file;

         // Backwards compatibility
         } else {
             // Look in old theme path
             $selected_theme_check = WPSC_OLD_THEMES_PATH . get_option( 'wpsc_selected_theme' ) . '/' . str_ireplace( 'wpsc-', '', $file );

             // Check the selected theme
             if ( file_exists( $selected_theme_check ) ) {
                 $file_path = $selected_theme_check;

             // Use the bundled file
             } else {
                 $file_path = WPSC_CORE_THEME_PATH . '/' . $file;
             }
         }
         // Save the transient and update it every 12 hours
         if ( !empty( $file_path ) )
             set_transient( WPEC_TRANSIENT_THEME_PATH_PREFIX . $file, $file_path, 60 * 60 * 12 );

     }elseif(!file_exists($file_path)){
         delete_transient(WPEC_TRANSIENT_THEME_PATH_PREFIX . $file);
         wpsc_get_template_file_path($file);
     }

     // Return filtered result
     return apply_filters( WPEC_TRANSIENT_THEME_PATH_PREFIX . $file, $file_path );
 }

Dans un hook init, le plugin enregistre tous les fichiers de thème dont il a besoin à l'aide de wpsc_register_theme_file ():

wpsc_register_theme_file( 'wpsc-single_product.php' );
wpsc_register_theme_file( 'wpsc-grid_view.php' );
wpsc_register_theme_file( 'wpsc-list_view.php' );
wpsc_register_theme_file( 'wpsc-products_page.php' );
wpsc_register_theme_file( 'wpsc-shopping_cart_page.php' );
wpsc_register_theme_file( 'wpsc-transaction_results.php' );
wpsc_register_theme_file( 'wpsc-user-log.php' );
wpsc_register_theme_file( 'wpsc-cart_widget.php' );
wpsc_register_theme_file( 'wpsc-featured_product.php' );
wpsc_register_theme_file( 'wpsc-category-list.php' );
wpsc_register_theme_file( 'wpsc-category_widget.php' ); 

Et puis, quand le fichier est réellement nécessaire, ils appellent wpsc_get_template_file_path ():

switch ( $display_type ) {
        case "grid":
            include( wpsc_get_template_file_path( 'wpsc-grid_view.php' ) );
            break; // only break if we have the function;

        case "list":
            include( wpsc_get_template_file_path( 'wpsc-list_view.php' ) );
            break; // only break if we have the file;
        default:
            include( wpsc_get_template_file_path( 'wpsc-products_page.php' ) );
            break;
    }

Évidemment, le code serait différent pour votre plugin, mais les principes devraient être les mêmes.

4
Devin Humbert