Como obtenho o URL do tema em PHP?

38

Preciso obter o URL do meu diretório de temas para fazer referência a uma imagem no diretório image / headers do tema. Como isso é feito em PHP?

Michael Crenshaw
fonte

Respostas:

47

Esta função retornará o URL do diretório de temas para que você possa usá-lo em outras funções:

get_bloginfo('template_directory');

Como alternativa, esta função fará eco do URL do diretório de temas para o navegador:

bloginfo('template_directory');

Portanto, um exemplo para uma imagem na images/headerspasta de temas seria:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
EAMann
fonte
NOTA: isso fornecerá o caminho para o tema pai se você estiver usando um tema filho no momento, e não o tema filho ativo. Uma resposta mais longa abaixo explica isso com mais detalhes.
19416 Jason
2
Você pode simplesmente usarget_template_directory_uri()
Pei
32

O que @EAMann disse, com uma ressalva. Eric está certo sobre a abordagem geral, como as funções bloginfo()e o get_bloginfo()trabalho e sobre como passar o parâmetro 'template_directory'para obter o valor necessário para a maioria dos temas.

No entanto, há uma ressalva e essa ressalva é com os Temas filho mais recentes . Se você estiver usando um tema filho, 'template_directory'provavelmente não é o que deseja, a menos que esteja realmente tentando se referir a uma imagem que esteja no diretório do tema pai. Em vez disso, para temas filhos, o que você provavelmente quer é passar stylesheet_directory(eu sei, eu sei, os nomes não dizem o que são, mas ei, é assim que as coisas são!) stylesheet_directory. Abreviei o exemplo para que não fosse quebrado):

<img src="<?php bloginfo('stylesheet_directory'); ?>/images/header.jpg" />

Para ilustrar o ponto em que escrevi um arquivo autônomo rápido, você pode soltar na raiz do seu site test.phpe executar para ver o que ele gera. Primeiro, execute com um tema regular como o TwentyTen e, em seguida, execute com um tema filho:

<?php
/*
* test.php - Test the difference between Regular and Child Themes
*
*/

include "wp-load.php";

$bloginfo_params = array(
    'admin_email',
    'atom_url',
    'charset',
    'comments_atom_url',
    'comments_rss2_url',
    'description',
    'home',
    'html_type',
    'language',
    'name',
    'pingback_url',
    'rdf_url',
    'rss2_url',
    'rss_url',
    'siteurl',
    'stylesheet_directory',
    'stylesheet_url',
    'template_directory',
    'template_url',
    'text_direction',
    'url',
    'version',
    'wpurl',
);

echo '<table border="1">';
foreach($bloginfo_params as $param) {
    $info = get_bloginfo($param);
    echo "<tr><th>{$param}:</th><td>{$info}</td></tr>";
}
echo '</table>';

Se você notar coisas, pode perceber que há muito mais para o que você pode passar bloginfo()e get_bloginfo(); estude o código e a captura de tela abaixo para obter idéias.

Observando a captura de tela, você pode ver que stylesheet_directoryretorna a mesma coisa que 'template_directory'para um tema comum, mas com um valor diferente e provavelmente o valor necessário para um tema filho.

Os valores de retorno de get_bloginfo () com e sem um tema filho no WordPress
(fonte: mikeschinkel.com )

Para maior clareza nesta captura de tela, wp30.devé um domínio que roda apenas no meu computador local. Atualmente, é uma instância do WordPress 3.0.1 e está configurada no 127.0.0.1(igual a localhost) no meu laptop e eu a uso para testar exemplos ad-hoc como este. Usei o VirtualHostX como uma conveniência no Mac OS X para me ajudar a configurar .devdomínios privados não roteáveis , mas qualquer um pode fazê-lo manualmente editando o arquivo hosts do computador e o? arquivo httpd.conf.

A propósito, caso você não esteja familiarizado com os Temas filho, há outras duas respostas do WordPress que podem ajudar:

MikeSchinkel
fonte
Uau, ótima resposta. Fiquei preguiçoso com o tema em que estou trabalhando agora e não criei um tema infantil, mas isso será muito útil no futuro. Parabéns por esse script também. Bem codificado. Obrigado!
Michael Crenshaw
Oi, boa resposta! Eu costumo usar get_stylesheet_directory_uri(). Devo estar usando simples ol ' get_stylesheet_directory()?
djb
13

Toda a estrutura do tema se baseia em duas opções - template(mantendo o nome da pasta do tema pai) e stylesheet(mantendo o nome da pasta do tema filho). Se não houver um tema filho usado, eles serão os mesmos.

Para ter flexibilidade de filtros, em vez de acessar a opção diretamente, existem get_template()e get_stylesheet().

Agora, a única coisa que falta é combiná-los com o local da pasta dos temas. Isso pode ser feito com get_theme_root_uri()e novamente convenientemente envolvido em get_template_directory_uri()e get_stylesheet_directory_uri().

[get_]bloginfo()com template_directoryou stylesheet_directoryargumentos apenas os envolve e há poucas razões para usá-lo assim. Eu diria que é apenas confuso ter argumento dizendo diretório (geralmente relacionado a caminhos locais), mas retornando URLs.

Sumário:

  • use get_template_directory_uri()para se referir apenas ao tema ou pai
  • use get_stylesheet_directory_uri()para tema único ou filho
Rarst
fonte
-1

Eu uso isso (dirname(get_bloginfo('stylesheet_url')))

fja3omega
fonte
1
Nenhuma explicação por que isso é melhor do que as outras soluções?
fuxia