Использование posts_per_page может быть не лучшим вариантом, и мне интересно, следует ли его изменить на запрос MySQL, чтобы он был быстрее и меньше загружал сайт/сервер?
Это процесс создания живого поиска товаров для WooCommerce.
Это код:
add_action( 'wp_ajax_data_fetch' , 'data_fetch' );
add_action( 'wp_ajax_nopriv_data_fetch', 'data_fetch' );
function data_fetch() {
$post_search_query = new WP_Query( array( 'posts_per_page' => -1, 's' => esc_attr( $_POST['search_keyword'] ), 'post_type' => 'product' ) );
if ( $post_search_query->have_posts() ) :
while( $post_search_query->have_posts() ): $post_search_query->the_post(); ?>
<h5><a href = "<?php echo esc_url( post_permalink() ); ?>"><?php the_title();?></a></h5>
<span class = "live-search-post-excerpt"><?php the_excerpt(); ?></span>
<?php endwhile;
wp_reset_postdata();
endif;
die();
}
Из-за чего мне интересно, есть ли способ изменить это:
$post_search_query = new WP_Query( array( 'posts_per_page' => -1, 's' => esc_attr( $_POST['search_keyword'] ), 'post_type' => 'product' ) );
в SQL-запрос, и если да, то как?
Вы можете использовать wpdb.
global $wpdb;
$data = $wpdb->get_results("SELECT * FROM table");
Вы можете проверить таблицы базы данных. Я думаю, что продукт на woo находится в таблице wp_posts с post_type = "product"
Или с помощью этого «SELECT * FROM wp_posts, где post_type = 'product' и post_title, например '%'.esc_attr( $_POST['search_keyword']).'%'"
Добро пожаловать, если этот ответ поможет вам. Я буду более признателен, если вы нажмете «Принять этот ответ». Добрый день ^_^.
Я сделаю это, как только проверю.
Я изменил его в соответствии с тем, что вы предложили в своем комментарии. Это новый аргумент: $post_search_query = $wpdb->get_results( "SELECT * FROM wp_posts where post_type = 'product' and post_title like '%'.esc_attr( $_POST['search_keyword'] ).'%'");
Затем я получаю эту ошибку: Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
Если вы знаете, как это исправить, то я думаю, что все. Спасибо за ваше время.
"SELECT * FROM wp_posts where post_type = 'product' and post_title like '%'".esc_attr( $_POST['search_keyword'] )."'%'"
Это убрало ошибку, но поиск мертв. Ничего не появляется. Не уверен, почему.
Вам также нужно изменить цикл. Вы можете использовать обычный цикл for или foreach, чтобы отображать данные.
Ах хорошо. Будучи новичком во всем этом, я все еще учусь. Я знаю, что здесь есть правило, согласно которому «1 вопрос..», а что нет. Спасибо за ваше время. Я задам новый вопрос о цикле (если вы не хотите помочь).
Хорошо, приятно знать - спасибо. Любые примеры того, как получить все продукты из этого?