How to get the post id (of the parent custom custom type) in a loop inside a widget?
質問
Below there is a widget with a Wordpress loop inside. It works as expected. The only problem is this part:
'post_parent' => $post->ID,
The widget is not getting the post->ID
of the parent of the current topic
custom post type (with is another custom post type called forum
).
It does work when I place the loop in a template file. This:
<?php $current_post_id = $post->ID; ?>
<h2><?php echo $current_post_id; ?></h2>
Outputs a post id (the forum custom post type which is the parent of the topic custom post type).
/**
* Most voted topics widget
*/
class MostVotedTopics extends WP_Widget {
/** constructor */
function MostVotedTopics() {
parent::WP_Widget(false, $name = 'Most Voted Topics');
}
/** @see WP_Widget::widget */
function widget($args, $instance) {
extract( $args );
$title = apply_filters('widget_title', $instance['title']);
?>
<?php echo $before_widget; ?>
<?php if ( $title )
echo $before_title . $title . $after_title; ?>
<?php // Display the top topics of current forum
$args = array(
'post_type' => 'topic',
'posts_per_page' => '3',
'post_parent' => $post->ID,
'gdsr_sort' => 'thumbs',
'gdsr_ftvmin' => '1',
'gdsr_order' => 'desc',
'order' => 'DESC'
);
?>
<?php query_posts( $args ); ?>
<?php while ( have_posts() ) : the_post(); ?>
<div class="topic-wrapper">
<div class="topic-left">
<?php $current_post_id = $post->ID; ?>
<h2><?php echo $current_post_id; ?></h2>
<h2><a href="<?php bbp_topic_permalink(); ?>" title="<?php bbp_topic_title(); ?>"><?php bbp_topic_title(); ?></a></h2>
<span><?php printf( __( 'Started by: %1$s', 'bbpress' ), bbp_get_topic_author_link( array( 'size' => '14' ) ) ); ?></span>
<?php echo get_avatar(get_the_author_meta('user_email'), 64); ?>
<?php the_author_meta('nicename'); ?>
<p>Last modified on the: <?php the_modified_date(); ?>. by: <?php the_modified_author();?></p>
<p>Time last modified: <?php the_modified_time(); ?></p>
<?php echo time_ago(); ?>
<div class="topic-like-count">
<h4><?php wp_gdsr_render_article_thumbs(); ?></h4>
<?php preg_match( '!<div class="thumblock ">(.*)</div>!si' , wp_gdsr_render_article_thumbs(0, false, "", 0, "", false) , $n );
$thumbs_number = strip_tags( $n[1] ); ?>
<?php if ( $thumbs_number == 1 || $thumbs_number == -1 ) : ?>
<span><?php _e( 'vote' ); ?></span>
<?php else : ?>
<span><?php _e( 'votes' ); ?></span>
<?php endif; ?>
</div>
<div class="topic-reply-count">
<h4><?php bbp_topic_reply_count(); ?></h4>
<?php if ( bbp_get_topic_reply_count() == 1 ) : ?>
<span><?php _e( 'reply' ); ?></span>
<?php else : ?>
<span><?php _e( 'replies' ); ?></span>
<?php endif; ?>
</div>
<div class="topic-freshness">
<h4><?php bbp_topic_freshness_link(); ?></h4>
<span>
<?php bbp_author_link( array( 'post_id' => bbp_get_topic_last_active_id(), 'size' => 14 ) ); ?>
</span>
</div>
<?php $most_voted[] = get_the_ID(); // get the id of the most voted post ?>
</div>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
<?php print_r($most_voted); ?>
<?php echo $after_widget; ?>
<?php
}
/** @see WP_Widget::update */
function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance['title'] = strip_tags($new_instance['title']);
return $instance;
}
/** @see WP_Widget::form */
function form($instance) {
$title = esc_attr($instance['title']);
?>
<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></label></p>
<?php
}
} // class FooWidget
// register FooWidget widget
add_action('widgets_init', create_function('', 'return register_widget("MostVotedTopics");'));
Any suggestion to fix this?
正しい解決策はありません
所属していません wordpress.stackexchange