我在数据库中创建了自定义表并使用本教程:LINK
一切正常,印刷良好,没有过滤器。 我阅读了很多帖子,但无论我做什么,过滤器都不起作用。
表名:vladi_stock_status_daily_update
这是从数据库获取信息的第一部分:
// form sql query due to filter fields
function getWhere() {
global $wpdb;
$where = ["main.order_item_type='product_name'"];
$start_unix = time() - $this->defaultPeriod*86400;
$start = date('Y-m-d H:i:s', $start_unix);
$end = date('Y-m-d H:i:s', time());
if (strlen($_GET['date']) > 0) {
$date_arr = explode(' - ', $_GET['date']);
$start = $date_arr[0];
$end = $date_arr[1];
}
if (strlen($_GET['product_name'])) {
$where[] = " (SELECT `product_name` * FROM ".$wpdb->prefix."vladi_stock_status_daily_update)";
}
if ($start != $end) {
$where[] = "(SELECT `date` FROM ".$wpdb->prefix.vladi_stock_status_daily_update) >= '$start' AND (SELECT `date` FROM ".$wpdb->prefix."vladi_stock_status_daily_update) <= '$end'";
} else {
$where[] = "(SELECT `date` FROM ".$wpdb->prefix."vladi_stock_status_daily_update) >= '$start'";
}
return $where;
}
第二部分是构建过滤器:
public function generate_search_box() {
global $wpdb;
$pickup_locations = [];
// if ( $options = get_option( 'woocommerce_pickup_locations' ) ) {
$pickup_locations = array_filter( (array) $options );
// }
$query = " SELECT date, product_name FROM `wp_vladi_stock_status_daily_update`";
$pickup_locations = $wpdb->get_results($query);
if (isset($_GET['date'])) {
$date_arr = explode(' - ', $_GET['date']);
$start = $date_arr[0];
$end = $date_arr[1];
} else {
$start_unix = time() - $this->defaultPeriod*86400;
$start = date('Y-m-d', $start_unix);
$end = date('Y-m-d', time());
}
$dateSelected = $start . ' - ' . $end;
$shownLocations = [];
?>
<form class="search-box actions" id="search-form">
<input type="hidden" name="post_type" value="product">
<input type="hidden" name="page" value="quantity">
<input type="hidden" name="tab" value="qrt">
<div class="search-field">
<label class="screen-reader-text" for="product_name">Name:</label>
<input type="search" id="product_name" name="product_name" value="<?=$_GET['product_name']?>" placeholder="Product Name" />
</div>
<div class="search-field">
<label class="screen-reader-text" for="date">Date:</label>
<input type="search" id="date" name="date" value="<?=$dateSelected?>" placeholder="Select Date" />
</div>
<div class="search-field">
<?php submit_button( 'search', '', '', false, array( 'id' => 'search-submit' ) ); ?>
<input type="button" value="Reset" id="reset" class="button" onClick="resetForm()">
</div>
</form>
<?php add_thickbox(); ?>
<?php
wp_enqueue_script('moment', 'https://cdn.jsdelivr.net/momentjs/latest/moment.min.js');
wp_enqueue_script('daterangepicker', 'https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js');
wp_add_inline_script('daterangepicker', "
function resetForm(){
jQuery('#product_name').val('');
jQuery('#date').val('');
jQuery('#date').val(jQuery('#date').attr('data-default'));
jQuery('#search-form').submit();
}
jQuery('.remove-btn').click(function(e) {
var variation = jQuery(this).attr('data-variation');
if (!confirm('Are you sure, that you wnt to remove '+variation+'?')) {
e.preventDefault();
}
});
", 'after');
wp_add_inline_script('daterangepicker', "jQuery('#date').daterangepicker(
{
startDate : '$start',
endDate : '$end',
alwaysShowCalendars : true,
locale : {
format : 'YYYY-MM-DD',
},
ranges : {
'Today' : [moment(), moment()],
'Yesterday' : [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days' : [moment().subtract(6, 'days'), moment()],
'Last 30 Days' : [moment().subtract(29, 'days'), moment()],
'This Month' : [moment().startOf('month'), moment().endOf('month')],
'Last Month' : [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],
}
}
);", 'after');
wp_enqueue_style('daterangepicker', 'https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css');
}
我得到了这个过滤链接: /wp-admin/edit.php?post_type=product&page=quantity&tab=qrt&product_name=product1&date=2021-02-07+-+2021-03-09 但不过滤任何东西。我做错了什么,比如从表中获取 sql 查询? 任何帮助将不胜感激!