get_template_directory_uri() e altri tag URL non funzionano nel tema
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?

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.

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.

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

Non è WordPress: var_dump(get_template_directory_uri());

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.

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.

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.

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.

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.

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

@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.

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

@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.

@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.)

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

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?

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.
