it-swarm-eu.dev

Jak mohu zjistit, které části šablony jsou volány pro zobrazení zobrazitelné stránky?

Mám téma, kde vývojář hodně používal get_tempalate_part (), a tyto části jsou roztroušeny v podadresářích témat i v adresářích v zásuvném modulu, který byl vytvořen pro pomoc s tématem.

Zde je kód, který používám, abych pochopil, že primární šablona je volána (nadřazená šablona pro nedostatek lepších slov):

add_action('wp_head', 'show_template');
function show_template() {
    global $template;
    print_r($template);
}

show_template();

To funguje dobře, ale zobrazuje pouze umístění nadřazeného souboru šablony. Jaký kód mohu použít, abych zjistil, co a kde z částí šablony se volá?

1
user658182

Použijte tento řádek pozdě v footer.php:

echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\\', '/', get_included_files()), (array_search(str_replace('\\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\\', '/', get_included_files())) + 1)))).'</li></ul>';

Napsáno na:

Jak zjistíte, která stránka šablony slouží aktuální stránce?

pokud je admin-bar stuff cesta zobrazena nahoře, nebo jakýkoli jiný soubor, změňte název souboru template-loader.php v tomto řádku kódu na: bez ohledu na název souboru, který potřebujete přerušit.

pokud to potřebujete v admin baru,použijte pravou priotitu(nejdříve), aby se na koncitohoto seznamu nezadaly žádné soubory. Například:

add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);

priorita -5 provede nejprve načtení shure. Klíčem je vykreslit tento řádek ve správný okamžik.

Proveďte některé změny, pokud váš server používá duplicitní lomítka.

Více na: Jak zjistíte, která stránka šablony slouží aktuální stránce?

1
Jonas Lundman

Část šablony můžete zobrazit pomocí tlačítek get_template_part($slug) Je to jeden z těch skrytých drahokamů v aplikaci WordPress, které nezajímá pozornost, kterou si zaslouží. Funkce get_template_part je v podstatě PHP zahrnovat nebo vyžadovat na steroidech:

Už ví, kde se vaše téma nachází a bude hledat požadovaný soubor v adresáři daného tématu

Pokud požadovaný soubor neexistuje, nevydá varování ani fatální situaci

Pokud není požadovaný soubor nalezen, může vyhledat jiné vhodné soubory

Ví o dětských tématech a rodičovských tématech

Dlouhý příběh krátký, funkce get_template_part vám umožňuje rozdělit vaše téma do menších šablon (nebo částí šablony), které lze znovu použít v jiných šablonách.

Například:

get_template_part( 'navigation', get_post_type() );

Kde get_post_type() vrátí název typu příspěvku, který je aktuálně zobrazen, takže pokud se nacházíme v příspěvku, pokusí se načíst navigaci-post.php a vrátit se na navigation.php. Pokud jsme na stránce, navigation-page.php a navigation.php. Pokud se podíváme na vlastní typ příspěvku, řekneme Knihu, bude hledat navigační-book.php a vrátí se zpět na navigation.php.

Skutečná síla get_template_part pochází z funkce nazvané locate_template, která provádí celé vyhledávání v nadřazených tématech a podřízených složkách motivů a návratu do jiných šablon v zásobníku. Funkce get_template_part jednoduše vytvoří pole šablon pro locate_template, které chcete vyhledat. Zde je rychlý příklad:

get_template_part( 'one', 'two' );

Vytvoří pole „one-two.php“ a „one.php“ (v tomto specifickém pořadí) a předá je do souboru locate_template, který pak prochází tímto polem a hledá soubory v adresářích podřízených a nadřazených motivů. Objednávka je zde opravdu důležitá, je to důvod, proč mají názvy souborů přednost před jejich umístěním (nadřazené téma nebo podřízený motiv) a vysvětluje důvod vyhledávací sekvence.

Za zmínku stojí také to, že funkce jako get_header, get_sidebar a get_footer jsou velmi podobné get_template_part s nějakým pevným prvním argumentem.

get_template_part se nachází v wp-includes/general-template.php a locate_template je v wp-includes/template.php.

1
TBI Infotech

Pokud se podíváte na kód funkce get_tempalate_part(), uvidíte, že můžete zavést do akce get_template_part_{$slug}". Vzhledem k tomu, že proměnná $slug je neznámá, musíte proměnnou získat ze samotného souboru šablony.

Další příklad dostane soubor šablony motivu, který se použije pro aktuální stránku s filtrem template_include . Pak používá tokenizer k načtení $ slug (y) z get_template_part() funkce uvnitř souboru. Se známými slug (y) se akce get_template_part_{$slug} používá k získání cesty šablony. Cesty šablon jsou vytištěny v zápatí motivu.

Poznámka: Složky používané v souboru get_template_part() uvnitř souborů šablony motivů musí být řetězec. Pokud téma používá jinou metodu přidání parametru do funkce (proměnná, konstanta atd.), Nenajde se slug (a tedy cesta). Nepoužívejte tento příklad ve výrobě.

Display_Get_Template_Part_Path_In_Footer::on_load();

class Display_Get_Template_Part_Path_In_Footer {

    static $templates = array();

    public static function on_load() {
        add_filter( 'template_include',  array( __CLASS__, 'read_theme_template' ), 99 );
        add_action( 'wp_footer', array( __CLASS__, 'wp_footer' ), 100 );
    }

    public static function wp_footer() {
        // print templates in footer
        if ( !empty( self::$templates ) ) {
            echo '<pre>';
            print_r( array_unique( self::$templates ) );
            echo '</pre>';
        } else {
            echo "<p>no get_template_part() found</p>";
        }
    }

    public static function read_theme_template( $template ) {

        $tokens = token_get_all( file_get_contents( $template ) );

        foreach ( $tokens as $index => $token ) {

            $name = is_array( $token ) ? token_name( $token[0] ): '';
            $value = is_array( $token ) ? $token[1] : $token;

            if ( !( ( 'T_STRING' ===  $name ) && ( 'get_template_part' === $value ) ) ) {
                continue;
            }

            // function name 'get_template_part' found, get next tokens
            $next = isset( $tokens[ $index + 1 ] ) ? $tokens[ $index + 1 ] : '';
            $next_id = isset( $tokens[ $index + 1 ][0] ) ? $tokens[ $index + 1 ][0] : '';
            $second_next = isset( $tokens[ $index + 2 ] ) ? $tokens[ $index + 2 ] : '';

            if ( '(' === $next || ( T_WHITESPACE === $next_id ) && ( '(' === $second_next ) ) {

                $slug = self::get_template_slug( $tokens, $index+1 );
                if ( !empty( $slug ) ) {
                    add_action( "get_template_part_{$slug}", array( __CLASS__, 'get_template_part' ), 15, 2 );
                }
            }
        }

        return $template;
    }

    // get's first T_CONSTANT_ENCAPSED_STRING ($slug argument)
    public static function get_template_slug( $tokens, $index ) {

        $slug = '';
        $brackets = 0;
        $function_tokens = array_slice( $tokens, $index );

        foreach ( $function_tokens as $key => $token ) {

            $name = isset( $token[0] ) ? token_name( $token[0] ) : '';

            if ( $token === '(' ) {
                ++$brackets;
                continue;
            }

            if ( $brackets === 0 ) {
                continue;
            }

            if ( ( ( $token === ')' ) && ( --$brackets === 0 ) ) || ( ',' === $token ) ) {
                break;
            }

            if ( ( 'T_CONSTANT_ENCAPSED_STRING' === $name ) ) {
                $slug = sanitize_title( $token[1] );
                break;
            }
        }

        return $slug;
    }

    // function copied from WP Core (returns template path)
    public static function get_template_part( $slug, $name = null ) {
        $templates = array();
        $name = (string) $name;
        if ( '' !== $name )
            $templates[] = "{$slug}-{$name}.php";

        $templates[] = "{$slug}.php";

        // get template without loading the file
        self::$templates[] = locate_template( $templates, false, false );
    }

}
0
keesiemeijer

Snadný způsob je přidat nějaké echo do každého souboru šablony. Jako <!--folder/filename.php-->

Nejlepší zábal, který je uvnitř, takže je zobrazen pouze během ladění.

0
Christoph Daum