Basé sur un exemple trouvé ici et plusieurs autres, j'essaye de charger une page non wordpress à partir d'une URL spécifique tout en ayant accès au noyau wordpress.
J'ai le code suivant (qui semble fonctionner comme prévu) à connecter à l'action template_redirect
:
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');
Mon problème vient lors de l'exécution du code dans thumbnail.php
. Ce fichier est censé télécharger une vignette d'une page Web et générer l'image brute. Le slug nlm-admin-thumbnail est utilisé comme src pour une balise d'image.
Lorsque j'exécute le fichier thumbnail.php, je continue à recevoir undefined function some_wp_function()
. J'ai inclus http.php et class-http.php à partir du dossier wp-includes. Maintenant que j'ai inclus ceux-ci, l'erreur suivante est undefined function apply_filters()
.
Le chargement d'un fichier php de cette façon ne me donne pas accès au noyau wp, et devrait apply_filers () non accessible?
Je le fais assez régulièrement et je n’ai aucun problème à utiliser les fonctions de base de WordPress. Vous pouvez toutefois accrocher un peu plus tôt et ignorer les bits 404 et d’en-tête. Dans 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' );
Et quelques exemples de code dans thumbnail.php
:
<?php
$content = "foo\n\nbar";
echo apply_filters( 'the_content', $content );
$post_id = 1;
echo get_the_post_thumbnail( $post_id );
Je viens de tester cela dans le thème vingt-douze et cela fonctionne comme prévu.