我需要使用WP_List_Table
添加对搜索或过滤项目的支持我阅读并且不知道如何完成此操作。我已经通过此代码添加了该框:
function ft_list()
{
echo '</pre><div class="wrap"><h2>' . __('Frequent Traveler List') . '</h2>';
$ftList = new FT_WP_Table();
$ftList->search_box('search', 'search_id');
echo '</div>';
}
这就是我的prepare_items()
函数的外观:
public function prepare_items()
{
$searchcol = array(
'firstname',
'lastname',
'foid',
'no_frequent',
'create_time'
);
$columns = $this->get_columns();
$hidden = array();
$sortable = $this->get_sortable_columns();
$this->_column_headers = array(
$columns,
$hidden,
$sortable
);
// SQL results
$posts = $this->get_sql_results();
empty($posts) AND $posts = array();
# >>>> Pagination
$per_page = $this->posts_per_page;
$current_page = $this->get_pagenum();
$total_items = count($posts);
$this->set_pagination_args(array(
'total_items' => $total_items,
'per_page' => $per_page,
'total_pages' => ceil($total_items / $per_page)
));
$last_post = $current_page * $per_page;
$first_post = $last_post - $per_page + 1;
$last_post > $total_items AND $last_post = $total_items;
// Setup the range of keys/indizes that contain
// the posts on the currently displayed page(d).
// Flip keys with values as the range outputs the range in the values.
$range = array_flip(range($first_post - 1, $last_post - 1, 1));
// Filter out the posts we're not displaying on the current page.
$posts_array = array_intersect_key($posts, $range);
# <<<< Pagination
// Prepare the data
$permalink = __('Edit:');
foreach ($posts_array as $key => $post) {
$link = get_edit_post_link($post->id);
$no_title = __('No title set');
$title = !$post->firstname ? "<em>{$no_title}</em>" : $post->firstname;
$posts[$key]->firstname = "<a title='{$permalink} {$title}' href='{$link}'>{$title}</a>";
}
$this->items = $posts_array;
}
我应该在哪里添加代码以根据搜索参数过滤项目?
答案 0 :(得分:6)
查看扩展WP_List_Table
的其他类我发现它们使用类似
$search = ( isset( $_REQUEST['s'] ) ) ? $_REQUEST['s'] : false;
并将其传递给prepare_items()
方法。
在我的测试插件中,我做了这个(见Percent in wpdb->prepare):
$search = ( isset( $_REQUEST['s'] ) ) ? $_REQUEST['s'] : false;
$do_search = ( $search ) ? $wpdb->prepare(" AND post_content LIKE '%%%s%%' ", $search ) : '';
$sql_results = $wpdb->get_results("
SELECT $sql_select
FROM $wpdb->posts
WHERE post_status = 'publish'
$do_search
ORDER BY $this->orderby $this->order "
);
我在display_tablenav()
方法中添加了:
<form action="" method="GET">
<?php
$this->search_box( __( 'Search' ), 'search-box-id' );
?>
<input type="hidden" name="page" value="<?= esc_attr($_REQUEST['page']) ?>"/>
</form>
我还没有创建任何search_box()
方法,让父类渲染它。