Carregando arquivos de modelo de uma subpasta no meu tema?

4

Estou trabalhando em um site que terá até 30 modelos.

Eu não quero ter todos esses modelos na raiz da pasta do meu tema bagunçando tudo.

Eu sei como posso modificar a função get_page_templates() no arquivo wp-admin/includes/theme.php para fazer com que ele escaneie subdiruns na pasta do meu tema. Mas eu não quero alterar os arquivos principais manualmente - como posso aplicar um filtro a get_page_templates() com um filtro que eu coloquei em functions.php ?

Como o código que você vê abaixo é minha primeira tentativa, mas ainda não funciona quando coloco o código em function.php .

No entanto, posso colocar essas alterações no arquivo principal wp-admin/includes/theme.php , mas isso não é uma boa prática e sempre deve ser evitado, pois a atualização automática pode eliminá-lo.

function get_page_templates_override() 
{
$themes = get_themes();
$theme = get_current_theme();
$templates = $themes[$theme]['Template Files'];
$page_templates = array();

if ( is_array( $templates ) ) {
    $base = array( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) );

    foreach ( $templates as $template ) {
        $basename = str_replace($base, '', $template);

        // modifide this by commenting it out so that sub dirs arent blocked
        // if ( false !== strpos($basename, '/') )
        //  continue;

        // modified this with FILE_USE_INCLUDE_PATH so sub dirs get scanned
        $template_data = implode( '', file( $template, FILE_USE_INCLUDE_PATH ));

        $name = '';
        if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name ) )
            $name = _cleanup_header_comment($name[1]);

        if ( !empty( $name ) ) {
            $page_templates[trim( $name )] = $basename;
        }
    }
}
return $page_templates;
}
add_filter('get_page_templates','get_page_templates_override', 1);
    
por MrStack 11.03.2011 / 21:59

3 respostas

1

Existem alguns ingressos para isso: # 13265 e #11216 .

Além disso, parece menos confuso se você prefixar cada modelo com uma string fixa:

template-a.php
template-b.php

etc.

    
por scribu 11.03.2011 / 22:42
0

Vale a pena mencionar que a partir do WP 3.4 (quase um ano atrás) agora é possível colocar os arquivos de modelo em um diretório abaixo da raiz do tema e o WordPress irá detectá-los e usá-los conforme necessário.

Conforme enlace .

    
por Grant Palin 14.02.2013 / 04:41