属性状态在WordPress站点上复制属性

时间:2014-11-25 14:54:15

标签: php wordpress

我正在使用此网站: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;

非常感谢任何协助。

1 个答案:

答案 0 :(得分:0)

好的,继续我的评论,我会解释。通过更改meta_query参数以使其更有效(即不在第一个实例中删除重复项),可能有更好的方法来实现此目的,但我的注释中的链接正在做的是设置一个新的空数组out with while循环,然后在迭代循环时为其添加值。

在该示例链接中它是'country',我已经更改了它,因此它会检查帖子ID,这对你来说是一个更好的选择,因为它是一个唯一的标识符。每次循环时都会将post id添加到数组$added,在循环开始时它使用PHP函数in_array来检查已经添加到{{1}的所有值的帖子ID }。如果它发现帖子ID已经在数组中$added被调用,则循环中的其余代码被跳过并返回到下一次迭代。因此,您不会将重复项输出到页面。

continue