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 wpHaken verwenden und das global $wp_queryObjekt 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: wpin codex.wordpress.org und wpin developer.wordpress.org
after_setup_themeund setup_theme, ist also nur für die Plugins B) inside zugänglich WP :: main(), die aus der wp-settings.php aufgerufen werden.
wpHook nicht nach dem after_setup_themeHook und unmittelbar davor ab und macht ihn template_redirectdaher wpsowohl über Themes als auch über Plugins zugänglich? (Nur zur Klarstellung?)
Verwenden Sie template_redirectden 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
}
wpnach dem after_theme_setupHook läuft , so ist es nicht nur für Plugins zugänglich, was es sicherer macht, es in Themes zu verwenden.
wpläuft nach after_theme_setup. Aber ich brauche es für mein Plugin. Also wpso gut wie template_redirectbeides 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 initHaken läuft auf beiden Seiten.