it-swarm.com.de

Wie kann ich eine PHP-Datei an einen beliebigen Slug anhängen und trotzdem auf die Funktionen von wp-core zugreifen?

Basierend auf einem Beispiel hier und mehreren anderen versuche ich, eine Nicht-WordPress-Seite von einer bestimmten URL zu laden, während ich Zugriff auf den WordPress-Kern habe.

Ich habe den folgenden Code (der wie erwartet zu funktionieren scheint), um mich in die Aktion template_redirect einzuhängen:

function templateRedirect() {
    global $wp;
    if ( $wp->query_vars['pagename'] == 'nlm-admin-thumbnail' ) {
        global $wp_query;
        // if we have a 404 status
        if ($wp_query->is_404) {
            // set status of 404 to false
            $wp_query->is_404 = false;
            $wp_query->is_archive = true;
        }
        // change the header to 200 OK

        header("HTTP/1.1 200 OK");
        //load our template
        include( dirname( __FILE__ ) . '/thumbnail.php' );
        exit;
    }
}

add_action('template_redirect', 'templateRedirect');

Mein Problem kommt beim Ausführen des Codes in thumbnail.php. Diese Datei soll eine Miniaturansicht einer Webseite herunterladen und das Rohbild ausgeben. Der Slug nlm-admin-thumbnail wird als Quellcode für ein Image-Tag verwendet.

Wenn ich die thumbnail.php ausführe, bekomme ich immer undefined function some_wp_function(). Ich habe http.php und class-http.php aus dem Ordner wp-includes hinzugefügt. Nun, da ich diese eingefügt habe, ist der nächste Fehler undefined function apply_filters().

Ermöglicht das Laden einer PHP-Datei auf diese Weise keinen Zugriff auf den WP-Core und sollte apply_filers () nicht verfügbar sein?

1
Chris Strutton

Ich mache das ziemlich regelmäßig und habe kein Problem mit der Verwendung von Funktionen in WordPress Core. Sie können jedoch etwas früher einbinden und die 404- und Header-Bits überspringen. In functions.php:

function wpa88013_parse_query( $wp ){
    if ( 'nlm-admin-thumbnail' == $wp->query_vars['pagename'] ) {
        include( dirname( __FILE__ ) . '/thumbnail.php' );
        exit;
    }
}
add_action( 'parse_query', 'wpa88013_parse_query' );

Und ein Beispielcode in thumbnail.php:

<?php
$content = "foo\n\nbar";
echo apply_filters( 'the_content', $content );

$post_id = 1;
echo get_the_post_thumbnail( $post_id );

Ich habe dies gerade im zwanzigsten Thema getestet und es funktioniert wie erwartet.

2
Milo