2017-10-16 5 views
0

Je crée un plugin OOP pour wordpress. Le plugin crée un nouveau type de poste personnalisé appelé équipes. Au sein d'une page d'équipe, on peut utiliser le code court [programme] pour générer du code html prédéfini. J'ai également créé des champs personnalisés avec de nouvelles boîtes méta. Le problème est cependant: quand j'entre dans la page qui appelle le plugin, égaler la page de l'équipe avec le code de tri dont j'ai besoin pour obtenir l'ID poste dans mon plugin pour récupérer get_post_meta().Wordpress obtenir l'ID de poste

J'ai essayé les choses suivantes:

public function __construct(){ 
    // not working  
    $post; 
    $post->ID; 

    // not working 
    global $wp_query; 
    $post_id = $wp_query->post->ID; 

    $post = get_post($post_id); 

    // not workiing 
    echo '<pre>'; 
    print_r('post_id:' . get_the_ID()); 
    echo '</pre>'; 
} 

Comment pourrais-je recevoir l'identifiant de poste personnalisé dans mon plug-in lorsque j'ai visité la page de frontend (de sorte que le plug-in est appelé, court le shortcode)

Ma principale classe se charge comme ceci:

function run_plugin() { 

    $plugin = new MyPlugin(); 
    $plugin->run(); 
} 
run_plugin(); 

Dans MyPlugin le constructeur ressemble

public function __construct() {  
     if (defined('PLUGIN_NAME_VERSION')) { 
      $this->version = PLUGIN_NAME_VERSION; 
     } else { 
      $this->version = '1.0.0'; 
     } 
     $this->plugin_name = 'MyPlugin'; 

     if(!empty(get_option($this->plugin_name))){ 
      $this->clientID = get_option($this->plugin_name)['client_id']; 
     } 

     $this->load_dependencies(); 
     $this->set_locale(); 
     $this->define_admin_hooks(); 
     $this->define_public_hooks(); 
     $this->define_shortcodes(); 
    } 
+0

Je suis confus - pourquoi avez-vous deux constructeurs? – FluffyKitten

+0

Il y a la même chose mais avec des tentatives différentes pour résoudre ce problème – Bham

Répondre

0

Essayez de définir comme post mondiale comme

global $post 
+0

global $ post est vide. – Bham

+0

Également essayé d'obtenir le postID après que les fonctions définissent des crochets. Mais toujours pas de postID. – Bham

1

Si votre constructeur de plug-in est appelé trop tôt se, les données de poste ne seront pas mis en place et prêt à l'emploi.

Vous devez vous connecter à l'une des actions WP qui s'exécutent après que tout soit prêt. L'action init devrait suffire pour les données de publication, mais en fonction de ce dont vous avez besoin, vous pouvez vous connecter à wp_loaded, car il ne fonctionne pas tant que WordPress n'est pas complètement chargé.

function run_plugin() { 
    $plugin = new MyPlugin(); 
    $plugin->run(); 
} 
/* run_plugin(); */      // <- instead of this.... 
add_action('wp_loaded','run_plugin'); // <- ...do this