get_template_directory_uri() e altri tag URL non funzionano nel tema

20 mar 2012, 23:23:35
Visualizzazioni: 36.5K
Voti: 3

Quindi, sto cercando di aggiungere get_template_directory_uri o bloginfo() al mio file header.php per creare percorsi relativi per i file CSS e JS nel tema.

Ad esempio,

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

In teoria questo dovrebbe mostrare

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

Il problema è che quando visualizzo il tag <head> nel sorgente vedo solo:

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

Tutti gli altri template tag funzionano nei miei file (get_permalink(), the_title(), ecc.), ma questo no. Anche echo get_bloginfo('url') funziona.

Stavo pensando di modificare il file wp-config.php e fare qualcosa del tipo:

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

...ma non sono sicuro che sia la migliore pratica per riscrivere l'URL.

Mi sta sfuggendo qualcosa?

0
Tutte le risposte alla domanda 5
6

Quello che hai:

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

dovrebbe funzionare bene. L'ho copiato e incollato nel mio header.php e ha funzionato.

Ma questo non è il modo corretto per includere file CSS o JavaScript. Il metodo appropriato è utilizzare l'hook wp_enqueue_scripts. Ad esempio, supponiamo che tu abbia un file JavaScript che vuoi caricare e che richiede jQuery per funzionare, puoi accodare lo script e indicare jQuery come dipendenza. WordPress farà il resto:

<?php
function my_scripts_method() {
   // registra la posizione del tuo script e le dipendenze
   wp_register_script('custom_script',
       get_template_directory_uri() . '/js/custom_script.js',
       array('jquery')
    );
   // accoda lo script
   wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>

Per gli stili (si usa lo stesso hook):

function my_styles_method() {  
    // Registra lo stile in questo modo per un tema:  
    wp_register_style( 'my-custom-style', get_template_directory_uri().'/css/custom-style.css');  

    // accoda lo stile  
    wp_enqueue_style( 'my-custom-style' );  
}  
add_action( 'wp_enqueue_scripts', 'my_styles_method' ); 

Ti consiglio di leggere queste pagine del Codex su wp_enqueue_script() e wp_enqueue_style().

Potrebbe non sembrare importante, ma specialmente per il caricamento degli script, potresti scoprire che caricarli "manualmente" potrebbe rompere il tuo tema e/o i plugin.

21 mar 2012 00:55:31
Commenti

Non sapevo nemmeno che esistesse. Migrerò sicuramente il mio codice a questo metodo a breve. Il mio problema attuale è cercare di capire perché <?php get_template_directory_uri() ?> restituisce vuoto.

aboutaaron aboutaaron
21 mar 2012 01:32:11

Hai provato a fare var_dump?

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

Purtroppo non ho familiarità con var_dump in WordPress. Potresti chiarire?

aboutaaron aboutaaron
21 mar 2012 01:37:11

Non è WordPress: var_dump(get_template_directory_uri());

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

Scusa, quello che intendevo dire è che non so come fare var_dump e leggere l'output in WordPress. Presumo che chiamarlo semplicemente in header.php non mi darà ciò che cerco. Apprezzo comunque il tuo aiuto.

aboutaaron aboutaaron
21 mar 2012 02:42:19

Sì, stamperà il contenuto. Se lo fai nell'header probabilmente dovrai cercarlo nell'html della pagina (potrebbe essere dentro <head>)

Stephen Harris Stephen Harris
21 mar 2012 03:22:31
Mostra i restanti 1 commenti
1

Un po' in ritardo su questo, ma mi sono appena imbattuto nello stesso problema. Il mio problema era che avevo sostituito tutti i file del tema con un tema modello vuoto e non avevo seguito i passaggi di installazione del tema, quindi non ottenevo la directory corretta. Riattivare il tema potrebbe essere un primo passo appropriato per trovare una soluzione a questo problema.

25 lug 2013 20:27:52
Commenti

Mi è capitata la stessa cosa prima - nel mio caso, get_template_directory_uri() restituiva il tema figlio, non quello genitore, che è ovviamente l'esatto opposto di quello che dovrebbe fare. Passando al tema genitore e poi tornando nuovamente a quello figlio ha risolto completamente il problema per me.

Matt Lohkamp Matt Lohkamp
29 set 2014 02:14:23
9

hai provato la versione semplice di bloginfo, cioè:

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

oppure puoi usare la tua versione (cioè get_bloginfo) ma penso che
dovresti assegnarla a una variabile e poi stamparla..

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

...

Spero che questo aiuti a risolvere il tuo problema...

Saluti, Sagive.

20 mar 2012 23:54:21
Commenti

Ciao Sagive,

Grazie per la risposta.

Sfortunatamente, nessuna delle tue soluzioni funziona. Sta ancora creando URL relativi a "mysite.com" invece di "mystie.com/wp-content/themes/myTheme/"

Continuerò a provare e vedrò se riesco a trovare una soluzione.

aboutaaron aboutaaron
21 mar 2012 00:39:06

Figurati - hai risolto?

Sagive Sagive
21 mar 2012 00:40:30

In realtà, get_bloginfo( 'template_url' ) stesso chiama semplicemente get_template_directory_uri(), quindi il metodo più semplice è usare direttamente get_template_directory_ur().

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

@ChipBennett Sono d'accordo. È solo che, per qualche motivo, il mio sito su questa installazione non chiama correttamente get_template_directory_uri(). Speravo che qualcuno avesse avuto un'esperienza simile.

aboutaaron aboutaaron
21 mar 2012 01:13:29

non vedo differenze :) - bloginfo è sulla mia lista di snippet quindi... lo preferisco... dici @aboutaaron Vuoi dire che ancora non funziona?

Sagive Sagive
21 mar 2012 01:16:43

@SagiveSEO Esatto. <?php bloginfo('template_url'); ?> non stampa niente! Non l'ho mai visto prima. Funzionava perfettamente sulla mia versione di sviluppo e poi quando ho spostato il tema gli URL si sono rotti e per qualche motivo questo ora non funziona.

aboutaaron aboutaaron
21 mar 2012 01:29:58

@SagiveSEO questo è il punto: se echo get_template_directory_uri() non funziona, allora è impossibile che bloginfo( 'template_url' ) funzioni come alternativa. (Vedi il riferimento al core che ho linkato.)

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

@aboutaaron sei riuscito a risolvere? Ho lo stesso problema. get_stylesheet_directory_uri() e get_template_directory_uri() restituiscono una stringa vuota.

windyjonas windyjonas
25 nov 2013 10:38:24

se ricevi una stringa vuota, allora la pagina in cui stai usando il comando non è all'interno di WordPress... Questo è un comando interno di WP e dovrebbe funzionare senza problemi: get_template_directory_uri() OPPURE get_bloginfo('template_url') - in quale file stai usando questo comando?

Sagive Sagive
26 nov 2013 00:55:31
Mostra i restanti 4 commenti
0

se la funzione get_bloginfo('url') funziona in header.php, invece di usare get_template_directory_uri(); utilizza la funzione bloginfo( 'stylesheet_url' ); che restituisce l'URL del file CSS principale (solitamente style.css) del tema attivo.

22 mar 2012 07:03:13
0

Disattiva il tema corrente (cioè attiva un tema diverso, ad esempio TwentyFourteen) e poi riattiva il tuo tema.

Quando un tema viene attivato, WordPress esegue alcune configurazioni iniziali relative agli URI, ecc. e a volte ci sono casi (specialmente nello sviluppo di nuovi temi) in cui WordPress non esegue quel codice di inizializzazione. Disattivare e riattivare il tema garantisce che WordPress abbia un'altra opportunità di eseguire il codice di configurazione iniziale del tema.

9 apr 2014 21:06:26