View difference between Paste ID: a2vPrSk2 and
SHOW: | | - or go back to the newest paste.
1
<?php
2
/*
3
Plugin Name: Search Post Type
4
Plugin URI: http://www.duncanmorley.co.uk
5
Description: A search widget that will only search a selected post type
6
Author: Duncan Morley
7
Version: 1.0
8
Author URI: http://www.duncanmorley.co.uk
9
*/
10
11
class SearchPostType extends WP_Widget {
12
	
13
    /** constructor */
14
    function SearchPostType() {
15
        /* Widget settings. */
16
		$widget_ops = array(
17
			'classname' => 'search-post-type',
18
			'description' => 'A search widget that will only search a selected post type'
19
		);
20
21
		/* Widget control settings. */
22
		$control_ops = array(
23
			'width' => 350,
24
			'height' => 350,
25
			'id_base' => 'search-post-type'
26
		);
27
28
		/* Create the widget. */
29
		$this->WP_Widget( 'search-post-type', 'Search Post Type', $widget_ops, $control_ops ); 
30
		
31
		// my code 1
32
		add_filter('pre_get_posts', array($this,'mySearchFilter'));
33
 
34
    }
35
    
36
    // begin my code 2
37
    function mySearchFilter($query) {
38
    
39
	$post_type = $_GET['post_type'];
40
	if (!$post_type) {
41
		$post_type = 'any';
42
	}
43
    if ($query->is_search) {
44
        $query->set('post_type', $post_type);
45
    };
46
    return $query;
47
}
48
// end mycode 2
49
50
51
    /** @see WP_Widget::widget */
52
    function widget($args, $instance) {    
53
        extract( $args );
54
		
55
		/* Our variables from the widget settings */
56
		$title = apply_filters('widget_title', $instance['title'] );
57
		$text = $instance['text'];
58
		$button = $instance['button'];
59
		$type = $instance['type']; 
60
		
61
		echo $before_widget;
62
		
63
		if ( $title )
64
			echo $before_title . $title . $after_title; ?>
65
		
66
		<form method="get" id="searchform" class="clearfix" action="<?php echo esc_url( home_url( '/' ) ); ?>">
67
			<input type="text" class="field" name="s" id="s" value="<?php if ( $text ) echo $text; ?>" onblur="if (this.value == ''){this.value = '<?php if ( $text ) echo $text; ?>'; }" onfocus="if (this.value == '<?php if ( $text ) echo $text; ?>') {this.value = ''; }" />
68
			<input type="submit" class="submit" value="<?php if ( $button ) echo $button; ?>" />
69
			<input type="hidden" name="post_type" value="<?php if ( $type ) echo $type; ?>" />
70
		</form>
71
		
72
    <?php echo $after_widget;
73
	
74
	}
75
 
76
    /** @see WP_Widget::update */
77
	function update( $new_instance, $old_instance ) {
78
		$instance = $old_instance;
79
		
80
		/* Strip tags (if needed) and update the widget settings. */
81
		$instance['title'] = strip_tags($new_instance['title']);
82
		$instance['text'] = strip_tags($new_instance['text']);
83
		$instance['button'] = strip_tags($new_instance['button']);
84
		$instance['type'] = strip_tags($new_instance['type']);
85
		
86
		return $instance;
87
	}
88
 
89
    /** @see WP_Widget::form */
90
    function form($instance) {             
91
        /* Set up some default widget settings. */
92
		$defaults = array(
93
			'title'=> __('', 'search-post-type'),
94
			'text' => __('Search', 'search-post-type'),
95
			'button' => __('Submit', 'search-post-type'),
96
			'type' => __('', 'search-post-type')
97
		);
98
		$instance = wp_parse_args( (array) $instance, $defaults ); ?>
99
		
100
		<p>
101
		<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
102
		<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $instance['title']; ?>" />
103
		</p>
104
		<p>
105
		<label for="<?php echo $this->get_field_id('link'); ?>"><?php _e('Search Text:'); ?></label> 
106
		<input class="widefat" id="<?php echo $this->get_field_id('text'); ?>" name="<?php echo $this->get_field_name('text'); ?>" type="text" value="<?php echo $instance['text']; ?>" />
107
		</p>
108
		<p>
109
		<label for="<?php echo $this->get_field_id('button'); ?>"><?php _e('Submit Text:'); ?></label> 
110
		<input class="widefat" id="<?php echo $this->get_field_id('button'); ?>" name="<?php echo $this->get_field_name('button'); ?>" type="text" value="<?php echo $instance['button']; ?>" />
111
		</p>
112
		<p>
113
		<label for="<?php echo $this->get_field_id('type'); ?>"><?php _e('Post Type:'); ?></label> 
114
		<select id="<?php echo $this->get_field_id('type'); ?>" name="<?php echo $this->get_field_name('type'); ?>" class="widefat" style="width:100%;">
115
			<option <?php if ( 'any' == $instance['type'] ) echo 'selected="selected"'; ?> value="any">any</option>
116
			<?php
117
			$args=array(
118
				'public' => true
119
			); 
120
			$post_types=get_post_types($args,'names'); 
121
			foreach ($post_types as $post_type ) {
122
				$selected = $post_type == $instance['type'] ? 'selected="selected"' : "";
123
			  echo '<option '.$selected.' value='.$post_type.'>'.$post_type.'</option>';
124
			} ?>
125
		</select>
126
		</p>
127
		
128
        <?php
129
		
130
    }
131
 
132
} // class SearchPostType
133
134
// mycode 3
135
add_action( 'widgets_init', create_function( '', 'register_widget("SearchPostType");' ) );
136
137
138
?>
139
140