Haken zum Laden von Posts und Seiten

17

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?

Poulomi Nag
quelle
public oder admin side / facing?
Kaiser
Für das Frontend. Grundsätzlich möchte ich, dass es nur ausgelöst wird, wenn ein bestimmter benutzerdefinierter Beitragstyp angezeigt wird.
Poulomi Nag

Antworten:

24

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

Kaiser
quelle
Kannst du mir bitte sagen, wann der 'wp'-Haken läuft?
Poulomi Nag
A) Läuft vor 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.
Kaiser
1
@kaiser Feuert der 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?)
Adam
13

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
}
Adam
quelle
@PoulomiNag Kein Problem, ich bin froh, dass Sie oben Ihre Antwort gefunden haben. Obwohl ich denke, dass ein kleiner Hinweis ist, dass 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.
Adam
Ich habe gerade nachgesehen und ja; 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! :)
Poulomi Nag
Das ist in Ordnung, nicht notwendig, um beide zu akzeptieren, wollte nur die Reihenfolge klären, in der sie feuern. Stellen Sie sicher, dass ich nicht verrückt werde, wissen Sie. Viel Glück mit deinem Plugin ...
Adam
1

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');

            }
        }
    }
Darronz
quelle
Danke Darronz. Aber ich brauche einen Haken, um während des Ladens einer Seite am vorderen Ende zu arbeiten. Irgendwelche Ideen?
Poulomi Nag
Wenn Sie die oben genannten Einstellungen geändert haben, to add_action('init', // etc)funktioniert dies beim Laden der Seite und nicht nur im Admin-Bereich.
Darronz
2
@darronz Und dann musst du reinschauen ! is_admin(), denn der initHaken läuft auf beiden Seiten.
Kaiser