2016-01-18 148 views
0

我試圖從窗口小部件獲取循環外部的帖子ID,但是我獲得了一些其他頁面ID而不是當前帖子ID。Wordpress從Widget獲取帖子ID

我的問題類似於wordpress get post id from side widget,但接受的答案在這裏(加add_action("widgets_init", "your_init");)沒有幫助。

我曾嘗試:

$post_id = get_the_id(); 
// or 
$post_id = $GLOBALS['post']->ID; 
// or 
global $wp_query; 
$post_id = $wp_query->post->ID; 
// or 
global $post; 
$post_id = $post->ID; 

所有返回一些頁面ID,而不是目前的職位ID。

這是帖子的鏈接http://ori.co.il/roofdagan1/?p=1492

我的部件代碼:

<?php 
    /* 
    Plugin Name: custom-post-field 
    Description: custom-post-field 
    */ 

    // Creating the widget 
    class cpf_widget extends WP_Widget 
    { 
     function __construct() 
     { 
      parent::__construct(
      // Base ID of your widget 
      'cpf_widget', 

      // Widget name will appear in UI 
      __('CPF Widget', 'cpf_widget_domain'), 

      // Widget description 
      array('description' => __('Custom Post Field Widget', 'cpf_widget_domain'),) 
      ); 
     } 

     // Creating widget front-end 
     // This is where the action happens 
     public function widget($args, $instance) 
     { 
      $title = apply_filters('widget_title', $instance['title']); 
      // before and after widget arguments are defined by themes 
      echo $args['before_widget']; 
      if (! empty($title)) 
      echo $args['before_title'] . $title . $args['after_title']; 

      $post_id = $GLOBALS['post']->ID; 
      $resoult_ = "Post Id : ". $post_id; 
      // This is where you run the code and display the output 
      echo __($resoult_, 'cpf_widget_domain'); 
      echo $args['after_widget']; 
     } 

     // Widget Backend 
     public function form($instance) 
     { 
      if (isset($instance[ 'title' ])) 
      { 
       $title = $instance[ 'title' ]; 
      } 
      else 
      { 
       $title = __('New title', 'cpf_widget_domain'); 
      } 
      // Widget admin form 
      ?> 
      <p> 
      <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> 
      <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /> 
      </p> 
      <?php 
     } 

     // Updating widget replacing old instances with new 
     public function update($new_instance, $old_instance) 
     { 
      $instance = array(); 
      $instance['title'] = (! empty($new_instance['title'])) ? strip_tags($new_instance['title']) : ''; 
      return $instance; 
     } 
    } // Class cpf_widget ends here 

    // Register and load the widget 
    function cpf_load_widget() 
    { 
     register_widget('cpf_widget'); 
    } 

    add_action('widgets_init', 'cpf_load_widget'); 


?> 

回答

1

您可以使用get_queried_object()檢索當前查詢的對象:

$current_post = get_queried_object(); 
$post_id = $current_post ? $current_post->ID : null; 
+0

一樣,你可以在這裏看到例如http://ori.co.il/roofdagan1/?p=1492。 其返回帖子ID 925,而不是1492. – Sevi

+0

好了,現在可以使用,問題是因爲我有一些頁面與帖子類別具有相同的標題。 – Sevi