Wordpress从Widget获取帖子ID

时间:2016-01-18 22:16:38

标签: wordpress

我正在尝试从窗口小部件中获取循环外的帖子ID,但是我获得了另一个页面ID而不是当前的帖子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 个答案:

答案 0 :(得分:1)

您可以使用get_queried_object()来检索当前查询的对象:

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