it-swarm.com.de

WordPress "include TEMPLATEPATH" oder?

Ich habe so etwas gebaut:

Bereich für Indexcontainer-Widgets

und ich habe ein Widget dafür erstellt -

Kategorien Widget - Index Container .php

mit diesem in:

<?php include (TEMPLATEPATH . '/includes/containers/container-grid-categories.php'); ?>
<?php ///include (TEMPLATEPATH . '/includes/containers/container-list-categories.php'); ?>

und zum Beispiel in den /includes/containers/container-grid-categories.php

ist das:

<?php   //include (TEMPLATEPATH . '/includes/containers/container-grid-categories/grid-thumbs.php'); ?>
<?php  include (TEMPLATEPATH . '/includes/containers/container-grid-categories/grid-tumbs-details.php'); ?>

Also, meine Fragen, damit alles gut funktioniert, ist die Frage, ob dies ein guter Weg ist, um das zu machen, was ich getan habe (einschließlich TEMPLATEPATH)? Oder auf andere Weise, und wenn ja, auf welche Weise? Vielen Dank

1
Fnarp

Lange Antwort kurz: Die absolut beste Antwort für Vorlagenteildateien in einem Unterverzeichnis ist die Verwendung von locate_template()

Ich würde empfehlen, auf den Stylesheet -Pfad für Vorlagendateien zu verweisen, damit diese Vorlagenteiledateien leicht von untergeordneten Themen überschrieben werden können. Idealerweise sollten Sie also get_stylesheet_directory_uri() verwenden.

Einige Unterschiede/Erklärungen zu allen von @kaiser aufgelisteten Funktionen:

  • get_stylesheet_directory_uri()/get_template_directory_uri() gibt eine URL zurück
  • get_stylesheet_directory()/get_template_directory() gibt einen Dateipfad zurück
  • Alle vier *get_*_directory_*()-Funktionen führen eine SSL-Prüfung durch
  • TEMPLATEPATH/STYLESHEETHATH sind einfache Konstanten, geben einen Dateipfad zurück und führen keine SSL-Prüfung durch

Daher werden die vier get_*_directory_*() -Funktionen der Verwendung von TEMPLATEPATH/STYLESHEET vorgezogen. Sie sind jedoch nicht wirklich zum Auffinden von Vorlagenteiledateien in Unterverzeichnissen gedacht. In diesem Fall ist es am besten, locate_template() direkt zu verwenden. ( Hier finden Sie eine Übersicht und einen Vergleich aller oben genannten Optionen. )

5
Chip Bennett

Es gibt verschiedene Möglichkeiten, dies zu erreichen:

    TEMPLATEPATH // Path to your (parent) themes root dir
    STYLESHEETPATH // Path to your parent/child - if present - dir
    get_template_directory_uri();
    get_template_directory();
    get_stylesheet_directory();
    get_stylesheet_directory_uri();

    // to load a file: path_and_file_name.php which searches in child dir first, then parent themes dir
    get_template_part( 'path_and_file_name' ); // appends .php automagically
    get_template_part( 'path_and_file_name', 'suffix' ); // loads: path_and_file_name-suffix.php

/**
 * Directoy structure
 * @return (array) $dir_struct | directory structure
 */
function wpse21093_get_dir_struct()
{
    $dir_base  = get_template_directory().'/includes/';
    $dirs[] = 'containers';
    // add more folders
    // $dirs[] = 'widgets';
    foreach ( $dirs as $dir )
    {
        $dir_struct[ $dir ] = trailingslashit( $dir_base.$dir );
    }
    return $dir_struct;
}

/**
 * Loading files for larger structures the *smart* way ...
 * Searches in all folders supported by the theme, defined by the user
 * Allows a {$suffix} to be appended to mimic the get_template_part(); behavior
 */
function wpse21093_load_file( $file_name, $suffix = '' )
{
    $dirs = wpse21093_get_dir_struct();
    foreach ( $dirs as $supported => $dir )
    {
        if ( empty ( $suffix ) )
        {
            if ( file_exists( $dir.$file_name.'.php' ) )
               require_if_theme_supports( $supported, $dir.$file_name.'.php' );
        }
        else
        {
            if ( file_exists( $dir.$file_name.'-'.$suffix.'.php' ) )
               require_if_theme_supports( $supported, $dir.$file_name.'-'.$suffix.'.php' );
        }
    }
    return;
}

// Then call it like this:
add_theme_support( 'containers' ); // add support for folder
wpse21093_load_file( 'container-grid-categories' );
1
kaiser