it-swarm-pt.tech

Como obtenho o URL do tema em PHP?

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

38
Michael Crenshaw

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

get_bloginfo('template_directory');

Alternativamente, esta função irá echo o URL do diretório do tema para o navegador:

bloginfo('template_directory');

Então, um exemplo para uma imagem na pasta themes images/headers seria:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
45
EAMann

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

No entanto, há uma ressalva e que caveat é com o mais recentetemas para crianças. Se você estiver usando um tema filho, 'template_directory' provavelmente não será o que você deseja, a menos que você esteja realmente tentando se referir a uma imagem que esteja no diretório do tema pai. Em vez disso, para temas infantis, o que você provavelmente quer é passar stylesheet_directoryeu sei, eu sei, os nomes não dizem o que eles são, mas hey, é assim que é!) Pegando emprestado um pouco da resposta de Eric usando stylesheet_directory pareceria isso (eu encurtei o exemplo para que ele não fosse quebrado):

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

Para ilustrar o ponto em que escrevi um arquivo rápido e autônomo, você pode inserir a raiz do seu site como test.php e executá-la para ver o resultado. Primeiro, corra com um tema regular como TwentyTen e corra 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ê perceber coisas, poderá notar que há muito mais no que você pode passar para bloginfo() e get_bloginfo(); Estude o código e a imagem abaixo para obter ideias.

Olhando para a imagem você pode ver que stylesheet_directory retorna a mesma coisa que 'template_directory' para um tema regular, mas um valor diferente, e provavelmente o valor que você precisa para um tema filho.

_ ( The return values of get_bloginfo() with and without a Child Theme in WordPress
(fonte: mikeschinkel.com )

Para esclarecer essa captura de tela, wp30.dev é um domínio que é executado apenas no meu computador local. É atualmente uma instância do WordPress 3.0.1 e é configurado em 127.0.0.1o mesmo que localhost) no meu laptop e eu usá-lo para testar exemplos ad-hoc como este. Eu usei _ (VirtualHostX como uma conveniência no Mac OS X para me ajudar a configurar esses domínios privados .dev 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 comTemas para criançasonde estão outras duas respostas do WordPress que podem ajudar:

32
MikeSchinkel

Toda a estrutura do tema é construída sobre 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, estes são os mesmos.

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

Agora, a única coisa que falta é combinar aqueles com a localização da pasta de temas. Isto 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_directory ou stylesheet_directory os argumentos simplesmente envolvem estes e há poucos motivos para usá-lo dessa maneira. Eu diria que é apenas confuso por ter argumento dizendo diretório (comumente se relaciona com os caminhos locais), mas retornando URLs.

Sumary:

  • use get_template_directory_uri() para se referir a only ou parent theme
  • use get_stylesheet_directory_uri() para only ou child theme
12
Rarst