2017-10-16 221 views
0

我正在爲wordpress創建一個插件OOP。該插件創建一個稱爲團隊的新自定義帖子類型。在團隊頁面中,可以使用shortcode [程序]來生成一些預先定義的html代碼。此外,我用新的元框創建自定義字段。WordPress的獲得帖子ID

然而,問題是:當我進入調用該插件的頁面時,我需要在我的插件中獲取發佈ID來獲取get_post_meta()。

我已經試過了以下幾件事:

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

我怎麼能接受我的插件內的自定義後ID,當我參觀了從前端的頁面(所以插件調用,運行短碼)

我的主類被加載這樣的:

function run_plugin() { 

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

在爲myplugin構造看起來像

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

我很困惑 - 爲什麼你有兩個構造函數? – FluffyKitten

+0

還有相同的但不同的嘗試來解決這個問題 – Bham

回答

0

嘗試定義崗位作爲全球像

global $post 
+0

global $ post是空的。 – Bham

+0

也嘗試在函數定義掛鉤後獲取postID。但仍然沒有postID。 – Bham

1

如果你的插件的構造函數獲取調用太早,後數據不會被設置和準備使用。

您需要將所有事情準備好後才能運行的WPs操作掛鉤。 init操作應該足夠用於發佈數據,但取決於您需要的其他內容,您可以掛鉤到wp_loaded,因爲它只有在WordPress完全加載後才能運行。

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