我正在使用此网站:http://f9properties.com/并且在主页上它有一个“特色属性”区域,它具有定义属性的所有这些不同属性,包括“属性类型”,“属性城市”和“财产状况”。在每个属性中,在WordPress仪表板中,有一种方法可以检查您是否希望该属性被显示并显示在主页上。
问题在于,如果该属性具有多种类型的状态,在本例中为“For Sale”和“For Lease”,则该属性在“特色属性”区域中显示两次。据我所知,特色区域的代码是这样的:
function Featured_Properties_Widget(){
$widget_ops = array( 'classname' => 'Featured_Properties_Widget', 'description' => __('Displays Random or Recent Featured Properties','framework') );
$this->WP_Widget( 'Featured_Properties_Widget', __('RealHomes - Featured Properties','framework'), $widget_ops );
}
function widget($args, $instance) {
extract($args);
$title = apply_filters('widget_title', $instance['title']);
if ( empty($title) ) $title = false;
$count = intval( $instance['count']);
$sort_by = $instance['sort_by'];
$featured_args = array(
'post_type' => 'property',
'posts_per_page' => $count,
'meta_query' => array(
array(
'key' => 'REAL_HOMES_featured',
'value' => '1',
'compare' => 'LIKE'
)
)
);
//Order by
if($sort_by == "random"):
$featured_args['orderby']= "rand";
else:
$featured_args['orderby']= "date";
endif;
$featured_query = new WP_Query($featured_args);
echo $before_widget;
if($title):
echo $before_title;
echo $title;
echo $after_title;
endif;
if($featured_query->have_posts()):
?>
<ul class="featured-properties">
<?php
while($featured_query->have_posts()):
$featured_query->the_post();
?>
<li>
<?php
if(has_post_thumbnail()){
?>
<figure>
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail('grid-view-image');?>
</a>
</figure>
<?php
}
?>
<h4><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4>
<p><?php framework_excerpt(7); ?> <a href="<?php the_permalink(); ?>"><?php _e('Read More','framework'); ?></a></p>
<span class="price"><?php property_price(); ?></span>
</li>
<?php
endwhile;
?>
</ul>
<?php
wp_reset_query();
else:
?>
<ul class="featured-properties">
<?php
echo '<li>';
_e('No Featured Property Found!', 'framework');
echo '</li>';
?>
</ul>
<?php
endif;
echo $after_widget;
}
function form($instance)
{
$instance = wp_parse_args( (array) $instance, array( 'title' => 'Featured Properties', 'count' => 1 , 'sort_by' => 'random' ) );
$title= esc_attr($instance['title']);
$count = $instance['count'];
$sort_by = $instance['sort_by'];
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Widget Title', 'framework'); ?></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 $title; ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id('count'); ?>"><?php _e('Number of Properties', 'framework'); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>" type="text" value="<?php echo $count; ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id('sort_by'); ?>"><?php _e('Sort By:', 'framework') ?></label>
<select name="<?php echo $this->get_field_name('sort_by'); ?>" id="<?php echo $this->get_field_id('sort_by'); ?>" class="widefat">
<option value="recent"<?php selected( $sort_by, 'recent' ); ?>><?php _e('Most Recent', 'framework'); ?></option>
<option value="random"<?php selected( $sort_by, 'random' ); ?>><?php _e('Random', 'framework'); ?></option>
</select>
</p>
<?php
}
function update($new_instance, $old_instance)
{
$instance = $old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['count'] = $new_instance['count'];
$instance['sort_by'] = $new_instance['sort_by'];
return $instance;
}
} ?&GT;
非常感谢任何协助。
答案 0 :(得分:0)
好的,继续我的评论,我会解释。通过更改meta_query
参数以使其更有效(即不在第一个实例中删除重复项),可能有更好的方法来实现此目的,但我的注释中的链接正在做的是设置一个新的空数组out with while
循环,然后在迭代循环时为其添加值。
在该示例链接中它是'country',我已经更改了它,因此它会检查帖子ID,这对你来说是一个更好的选择,因为它是一个唯一的标识符。每次循环时都会将post id添加到数组$added
,在循环开始时它使用PHP函数in_array
来检查已经添加到{{1}的所有值的帖子ID }。如果它发现帖子ID已经在数组中$added
被调用,则循环中的其余代码被跳过并返回到下一次迭代。因此,您不会将重复项输出到页面。
continue