Ich muss eine Funktion ausführen, wenn ein bestimmter Beitrag oder eine bestimmte Seite geladen wird. Gibt es einen Haken, mit dem ich überprüfen kann, ob ein Beitrag während des Ladens der Seite angezeigt wird?
Ich muss eine Funktion ausführen, wenn ein bestimmter Beitrag oder eine bestimmte Seite geladen wird. Gibt es einen Haken, mit dem ich überprüfen kann, ob ein Beitrag während des Ladens der Seite angezeigt wird?
Antworten:
Sie können den wp
Haken verwenden und das global $wp_query
Objekt oder eine beliebige Bedingung überprüfen .
add_action( 'wp', 'wpse69369_special_thingy' );
function wpse69369_special_thingy()
{
if (
'special_cpt' === get_post_type()
AND is_singular()
)
return print "Yo World!";
return printf(
'<p>Nothing to see here! Check the object!<br /></p><pre>%s</pre>',
var_export( $GLOBALS['wp_query'], true )
);
}
Siehe: wp
in codex.wordpress.org und wp
in developer.wordpress.org
after_setup_theme
und setup_theme
, ist also nur für die Plugins B) inside zugänglich WP :: main()
, die aus der wp-settings.php aufgerufen werden.
wp
Hook nicht nach dem after_setup_theme
Hook und unmittelbar davor ab und macht ihn template_redirect
daher wp
sowohl über Themes als auch über Plugins zugänglich? (Nur zur Klarstellung?)
Verwenden Sie template_redirect
den Aktions-Hook, der vor dem Rendern der Vorlage ausgelöst wird.
add_action('template_redirect', 'hooker');
function hooker(){
//I load just before selecting and rendering the template to screen
}
wp
nach dem after_theme_setup
Hook läuft , so ist es nicht nur für Plugins zugänglich, was es sicherer macht, es in Themes zu verwenden.
wp
läuft nach after_theme_setup
. Aber ich brauche es für mein Plugin. Also wp
so gut wie template_redirect
beides funktioniert für mich. Ich wünschte, ich könnte hier zwei Antworten akzeptieren! :)
Ich habe das Folgende ziemlich oft verwendet, um benutzerdefinierte Meta-Boxen auf Seiten zu laden (anstatt benutzerdefinierte Posts).
add_action('admin_init','how_we_do_it_meta');
function how_we_do_it_meta() {
if ( $_SERVER['SCRIPT_NAME'] == '/wp-admin/post.php' ) {
$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
$template_file = get_post_meta($post_id,'_wp_page_template',TRUE);
if ($template_file == 'page-how-we-do-it.php') {
add_meta_box('how_we_do_it_who-meta', 'Who we work with...', 'how_we_do_it_who', 'page', 'normal', 'high');
add_action('save_post', 'save_how_we_do_it_meta');
}
}
}
to add_action('init', // etc)
funktioniert dies beim Laden der Seite und nicht nur im Admin-Bereich.
! is_admin()
, denn der init
Haken läuft auf beiden Seiten.