2012-08-27 3 views
5

Sto provando a creare una funzione nel mio tema che si basa sul fare le cose prima che vengano inviate le intestazioni. Così, naturalmente, ho agganciato nel gancio Init in questo modo:Versione solo front-end del gancio Init?

add_action('init', 'my_function'); 

Ma il problema è che io voglio solo my_function da eseguire se l'utente non sta guardando la sezione di amministrazione o la pagina di login.

Quindi, quale hook posso utilizzare è solo front-end ma viene eseguito prima che le intestazioni vengano inviate. Looking at the API reference, non sembra esserci alcun, e ovviamente i condizionali non funzionano così presto nel runtime.

Quindi, oltre alla ricerca dell'URL per/wp-admin/e/wp-login/(che mi sembra goffo) non riesco a capirlo.

risposta

2

Ecco come lo faccio. L'uso del hook di azione wp è sufficientemente tardivo da consentire l'accesso alla query e quindi ai condizionali, ma avviene comunque prima che il modello sia impostato.

<?php 
function my_function() { 
    if (! is_admin() && ! is_login_page()) { 
     // Enqueue scripts, do theme magic, etc. 
    } 
} 

add_action('wp', 'my_function'); 

function is_login_page() { 
    return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php')); 
} 

Edit: ho frainteso ciò che si intende per le intestazioni (Stavo pensando a wp_head ... troppo tema codifica ultimamente!). Ora sto supponendo che si sta cercando di battere l'azione send_headers:

function my_function() { 
    if ('index.php' == $GLOBALS['pagenow']) { 
     // Pre-header processing on the front-end 
    } 
} 

add_action('wp_loaded', 'my_function'); 

Non è super-elegante, ma almeno è concisa. E it seems likely it will continue to work, che è sempre una buona notizia.

+0

Il WP viene chiamato dopo che le intestazioni vengono inviate, quindi non funzionerà per quello che sto cercando di fare. –

6

avvolgere ganci e la funzione della vostra azione in un if(!is_admin()){}

Come così:

if(!is_admin()) { 
    //Style 
    add_action('init', 'style'); 

    function style() 
    { 
     wp_enqueue_style('style', THEMEROOT . '/css/your.css'); 
    } 
} 
1

ecco alcune soluzioni fine e fresco, spero che tutti vi piacerà.

function my_func(){ 
if (!is_admin()) 
{ 

// add code here for show only in front-end or create another function outside this block and call that function here. 
} 
else 
{ 
// add code here for show only in admin or create another function outside this block and call that function here. 
}}add_action ('init', 'my_func'); 

che è tutto, utilizzare e vedere la magia.