get_template_directory_uri() și alte tag-uri URL nu funcționează în temă

20 mar. 2012, 23:23:35
Vizualizări: 36.5K
Voturi: 3

Încerc să adaug get_template_directory_uri sau bloginfo() în fișierul meu header.php pentru a crea căi relative pentru fișierele CSS și JS din temă.

De exemplu,

    <link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/style.css">

Teoretic, ar trebui să afișeze

    <link rel="stylesheet" href="http://mysite.com/wp-content/themes/myTheme/css/style.css">

Problema este că atunci când vizualizez tag-ul <head> în codul sursă, tot ce văd este:

    <link rel="stylesheet" href="/css/style.css">

Toate celelalte tag-uri template funcționează în fișierele mele (get_permalink(), the_title(), etc.), dar acesta nu. echo get_bloginfo('url') Funcționează și el.

Mă gândeam să modific fișierul wp-config.php și să fac ceva de genul:

define('WP_HOME','http://example.com/blog');
define('WP_SITEURL','http://example.com/blog');

...dar nu sunt sigur dacă aceasta este cea mai bună practică pentru rescrierea URL-ului.

Am omis ceva?

0
Toate răspunsurile la întrebare 5
6

Ce ai:

 <link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/style.css">

ar trebui să funcționeze bine. Am copiat și lipit în header.php și a funcționat.

Dar acesta nu este modul corect de a include fișiere CSS sau JavaScript. Metoda corectă este să folosești cârligul wp_enqueue_scripts. De exemplu, să presupunem că ai un fișier JavaScript pe care dorești să-l încarci și care necesită jQuery pentru a funcționa, încarci scriptul și listezi jQuery ca o dependență. WordPress se ocupă de rest:

<?php
function my_scripts_method() {
   // înregistrează locația scriptului și dependențele
   wp_register_script('custom_script',
       get_template_directory_uri() . '/js/custom_script.js',
       array('jquery')
    );
   // încarcă scriptul
   wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>

Pentru stiluri (se folosește același cârlig):

function my_styles_method() {  
    // Înregistrează stilul astfel pentru o temă:  
    wp_register_style( 'my-custom-style', get_template_directory_uri().'/css/custom-style.css');  

    // încarcă stilul  
    wp_enqueue_style( 'my-custom-style' );  
}  
add_action( 'wp_enqueue_scripts', 'my_styles_method' ); 

Te rugăm să citești aceste pagini din Codex despre wp_enqueue_script() și wp_enqueue_style()

Poate nu pare important, dar mai ales cu încărcarea scripturilor, vei descoperi probabil că încărcarea lor 'manuală' va strica tema și/sau plugin-urile tale.

21 mar. 2012 00:55:31
Comentarii

Nici măcar nu știam că există asta. Cu siguranță voi migra codul meu la această metodă în curând. Problema mea actuală este încercarea de a înțelege de ce <?php get_template_directory_uri() ?> returnează gol.

aboutaaron aboutaaron
21 mar. 2012 01:32:11

Ai încercat cu var_dump?

Stephen Harris Stephen Harris
21 mar. 2012 01:34:03

Din păcate, nu sunt familiarizat cu var_dump în WordPress. Poți să clarifici?

aboutaaron aboutaaron
21 mar. 2012 01:37:11

Nu este WordPress: var_dump(get_template_directory_uri());

Stephen Harris Stephen Harris
21 mar. 2012 01:39:01

Scuze, ceea ce voiam să spun este că nu știu cum să folosesc var_dump și să citesc rezultatul în WordPress. Presupun că doar să-l apelez în header.php nu îmi va oferi ceea ce caut. Totuși, apreciez ajutorul tău.

aboutaaron aboutaaron
21 mar. 2012 02:42:19

Da, va afișa conținutul. Dacă faci asta în header, probabil va trebui să cauți în html-ul paginii (poate fi în interiorul <head>)

Stephen Harris Stephen Harris
21 mar. 2012 03:22:31
Arată celelalte 1 comentarii
1

Puțin întârziat cu asta, dar tocmai am întâmpinat aceeași problemă. Problema mea a fost că am înlocuit toate fișierele temei cu un șablon de pornire gol și nu am parcurs pașii de instalare a temei, așa că nu obțineam directorul corect. Reactivarea temei ar putea fi un prim pas adecvat în găsirea unei soluții pentru această problemă.

25 iul. 2013 20:27:52
Comentarii

Am întâlnit aceeași problemă înainte - în cazul meu, get_template_directory_uri() returna tema copil, nu cea părinte, ceea ce bineînțeles este exact opusul a ceea ce ar trebui să facă. Schimbarea la tema părinte și apoi revenirea la tema copil a rezolvat complet problema pentru mine.

Matt Lohkamp Matt Lohkamp
29 sept. 2014 02:14:23
9

ai încercat versiunea simplă a bloginfo și anume:

<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo('template_url); ?>/css/style.css" />

sau poți folosi versiunea ta (adică get_bloginfo) dar cred că
ar trebui să o atribui unei variabile și apoi să o afișezi..

<link rel="stylesheet" type="text/css" media="all" href="<?php $turl = get_bloginfo('template_url); echo tulr; ?>/css/style.css" />

...

Sper că acest lucru te ajută să rezolvi problema ta...

Cu stimă, Sagive.

20 mar. 2012 23:54:21
Comentarii

Salut Sagive,

Mulțumesc pentru răspuns.

Din păcate, niciuna din sugestiile tale nu funcționează. Încă creează URL-uri relative la "mysite.com" în loc de "mystie.com/wp-content/themes/myTheme/"

O să mai încerc și voi vedea dacă găsesc o soluție.

aboutaaron aboutaaron
21 mar. 2012 00:39:06

Cu plăcere - ai reușit să o rezolvi?

Sagive Sagive
21 mar. 2012 00:40:30

De fapt, get_bloginfo( 'template_url' ) în sine apelează get_template_directory_uri(), deci metoda mai simplă este să folosești direct get_template_directory_ur().

Chip Bennett Chip Bennett
21 mar. 2012 01:07:14

@ChipBennett Sunt de acord. Din anumite motive, site-ul meu pe această instalare nu apelează corect get_template_directory_uri(). Speram că cineva a întâmpinat ceva similar.

aboutaaron aboutaaron
21 mar. 2012 01:13:29

nu văd nicio diferență :) - bloginfo este pe lista mea de snippet-uri așa că... prefer această variantă... spui @aboutaaron Vrei să spui că încă nu funcționează?

Sagive Sagive
21 mar. 2012 01:16:43

@SagiveSEO Corect. <?php bloginfo('template_url'); ?> nu afișează nimic! Nu am mai văzut așa ceva. A funcționat perfect pe versiunea de dezvoltare, dar când am mutat tema, URL-urile s-au stricat și din nu știu ce motiv, acum nu mai funcționează.

aboutaaron aboutaaron
21 mar. 2012 01:29:58

@SagiveSEO acesta este ideea: dacă echo get_template_directory_uri() nu funcționează, atunci este imposibil ca bloginfo( 'template_url' ) să funcționeze ca alternativă. (Vezi referința din core pe care am trimis-o.)

Chip Bennett Chip Bennett
21 mar. 2012 03:14:03

@aboutaaron ai reușit să rezolvi? Am aceeași problemă. get_stylesheet_directory_uri() și get_template_directory_uri() returnează șir gol.

windyjonas windyjonas
25 nov. 2013 10:38:24

dacă primești șir gol, atunci pagina în care folosești comanda nu se află în interiorul WordPress... Aceasta este o comandă internă WP și ar trebui să funcționeze fără probleme: get_template_directory_uri() SAU get_bloginfo('template_url') - în ce fișier folosești această comandă?

Sagive Sagive
26 nov. 2013 00:55:31
Arată celelalte 4 comentarii
0

dacă funcția get_bloginfo('url') funcționează în header.php, atunci în loc să folosești get_template_directory_uri(); utilizează funcția bloginfo( 'stylesheet_url' ); care returnează URL-ul fișierului CSS principal (de obicei style.css) al temei active.

22 mar. 2012 07:03:13
0

Dezactivează tema curentă (adică activează o temă diferită, de exemplu TwentyFourteen) și apoi reactivează tema ta.

Când o temă este activată, WordPress trece prin unele configurații inițiale ale URL-urilor relative, etc., și există uneori cazuri (în special în dezvoltarea de teme noi) în care WordPress nu rulează acel cod de inițializare. Dezactivarea și reactivarea temei asigură că WordPress primește o altă șansă de a rula codul de inițializare al temei.

9 apr. 2014 21:06:26