WordPress : Comment obtenir l’objet $post disponible dans functions.php pour localiser le script ?

Publié par Jean-Michel le

J’ai un problème avec un wp_localize_script dans mon fichier functions.php. J’essaie d’obtenir un script localisé pour un type de publication personnalisé (« galerie »), cependant, l’erreur apparaît que j’essaie d’accéder à une propriété de non-objet faisant référence à $post. Je suppose que la variable $ post n’est pas définie pour le moment, mais je ne sais pas quoi faire pour résoudre ce problème. Dois-je utiliser une autre action de crochet, etc.? Si oui, quoi ? Donc, fondamentalement, j’ai deux questions – que dois-je faire pour corriger ce code et la seconde (plus générale) – existe-t-il une bonne pratique pour utiliser wp_localize_script (où doit-il être placé, etc.) ?

    function profolio_localize_script () {
        global $post;
        if ($post->post_type==="my-gallery") {
            $layoutType=get_post_meta($post->ID,"gallery_layout",true);
            $data_array=array("layoutMode"=>$layoutType);
            wp_enqueue_script("custom", get_template_directory_uri () . "/js/custom.js", array("jquery","imagesLoaded","isotope"));
            wp_localize_script("custom","myGallery",$data_array);
        }
    }
add_action("wp",  "profolio_localize_script");

Solution n°1 trouvée

Le wpcrochet d’action se déclenche assez tôt, avant que l’ $postobjet ne soit défini. Je suggérerais d’utiliser le crochet approprié à la wp_enqueue_scriptsplace et de modifier votre code pour:

function profolio_localize_script () {
    if ( is_singular( 'my-gallery' ) ) {
        $layoutType = get_post_meta( get_queried_object_id(), 'gallery_layout', true );
        // Rest of code
    }
}

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *