Tìm kiếm khoảng hai ngày để tìm câu trả lời cho câu hỏi của tôi, cuối cùng tôi đã đăng ký StackExchange này. :)
Câu hỏi của tôi không đơn giản, vì vậy tôi cần bắt đầu ngay từ đầu. Nhưng để cho bạn biết ý nghĩa của bài đăng này: Trong khi đó Plugin của tôi đang hoạt động, nhưng tôi không thích mã này. Tôi nghĩ rằng có nhiều cách tốt hơn để giải quyết vấn đề này và vì vậy tôi đang tìm kiếm ninja wordpress, người có thể giúp tôi với những gợi ý tốt và thực hành tốt nhất. Tôi thực sự cố gắng để vào sâu trong wordpress, nhưng nó là loại khó. Cảm ơn bạn trước!
Plugin của tôi nên làm gì
Người dùng Plugin này có thể sử dụng một mã ngắn để hiển thị một hình thức tìm kiếm cho các loại bài đăng cụ thể. Plugin chỉ cần thiết trên các trang có chứa shortcode này.
Các loại bài đăng được tạo thông qua trang cài đặt plugin. Mỗi bài đăng thuộc loại này có tiêu đề, nội dung và một số trường tùy chỉnh từ plugin acf. Có một shortcode cho mỗi loại bài. Biểu mẫu tìm kiếm có một trường để tìm kiếm tất cả các trường bài đăng của loại bài đăng được chỉ định. Hai cái còn lại có thể được sử dụng để giới hạn kết quả bằng hai từ khóa (ví dụ: vị trí, là trường acf).
Các kết quả được tải thông qua ajax và hiển thị bên dưới mẫu tìm kiếm.
Tôi đã làm gì rồi
Tôi cố gắng giữ câu hỏi này không quá lớn. Vì vậy, tôi không chỉ định từng khía cạnh. Sau đây nên hoạt động tốt:
- Tạo loại bài đăng trong tệp php của plugin. Hiện tại, một loại bài tĩnh là enaugh.
- Tạo một shortcode in biểu mẫu tìm kiếm và một thùng chứa trống cho kết quả.
- Yêu cầu Ajax đang hoạt động thông qua javascript và cho kết quả như mong đợi.
Tìm kiếm trường tùy chỉnh
Điều này khá khó khăn, nhưng tôi đã tìm thấy một đoạn mã làm việc và tôi hiểu nó đang làm gì. Vấn đề ở đây là, tôi chỉ muốn tìm kiếm các trường acf với mẫu tìm kiếm cụ thể của mình. Tôi không muốn chạm vào tìm kiếm của trang web hiện có.
Đầu tiên tôi đã thử kiểm tra trang web nào mà người dùng đang truy cập và sử dụng câu lệnh if với is_page () trước khi tôi sửa đổi truy vấn tìm kiếm. Nhưng khi tôi sử dụng ajax, điều này dường như không hiệu quả với tôi ở đây ...
Cách giải quyết của tôi là đặt một biến toàn cục ở đầu mỗi truy vấn tìm kiếm ajax. Bây giờ tôi kiểm tra xem biến này có được đặt trước khi tôi sửa đổi truy vấn tìm kiếm không. Khi kết thúc hàm ajax, tôi đặt biến này thành false. Vâng, tôi nghĩ có một cách tốt hơn để giải quyết vấn đề này, nhưng tôi không biết làm thế nào ...
Các chức năng sửa đổi truy vấn tìm kiếm của tôi là như sau:
/ ** * Mở rộng tìm kiếm WordPress để bao gồm các trường tùy chỉnh * * http://adambalee.com * / / ** * Tham gia bài viết và bảng postmeta * * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join * / hàm cf_search_join ($ tham gia) { $ wpdb toàn cầu; // $ cwlistpage = (is_page ('danh sách')); kiểm tra $ toàn cầu; $ cwlistpage = $ kiểm tra; if ($ cwlistpage) { $ tham gia. = 'LEFT THAM GIA'. $ wpdb-> postmeta. ' TRÊN '. $ wpdb-> bài đăng. '.ID ='. $ wpdb-> postmeta. '.post_id'; } trả lại $ tham gia; } add_filter ('post_join', 'cf_search_join'); / ** * Sửa đổi truy vấn tìm kiếm với post_where * * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where * / hàm cf_search_where ($ where) { $ pagenow toàn cầu, $ wpdb; // $ cwlistpage = (is_page ('danh sách')); kiểm tra $ toàn cầu; $ cwlistpage = $ kiểm tra; if ($ cwlistpage) { $ where = preg numplace ( "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s* (\ '[^ ^' '' '' '' '' '' '' '' '' '' '' "(". $ wpdb-> bài đăng. ". post_title THÍCH $ 1) HOẶC (". $ wpdb-> postmeta. ". meta_value THÍCH $ 1)", $ where); } trả lại $ ở đâu; } add_filter ('post_where', 'cf_search_where'); / ** * Ngăn ngừa trùng lặp * * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_distotype * / hàm cf_search_distinc ($ where) { $ wpdb toàn cầu; // $ cwlistpage = (is_page ('danh sách')); kiểm tra $ toàn cầu; $ cwlistpage = $ kiểm tra; if ($ cwlistpage) { trả lại "DISTINCT"; } trả lại $ ở đâu; } add_filter ('post_distotype', 'cf_search_distotype');
Giới hạn kết quả theo các trường tùy chỉnh
Tất cả các lĩnh vực của hình thức là tùy chọn. Một hình thức trống sẽ trả về tất cả các bài viết của loại bài đăng này. Trường đầu tiên nên tìm kiếm mọi lĩnh vực của bài viết cho từ khóa. Trường thứ hai và thứ ba nên giới hạn kết quả cho trường có chứa từ khóa này. Tôi đã giải quyết điều này bằng if-statement và tôi biết phải có một giải pháp tốt hơn.
/**
* Search with AJAX
*/
function cwlist_click_search() {
global $testcheck;
$testcheck = true;
$searchterm = $_POST['query'];
$searchlocation = $_POST['location'];
$searchdegree = $_POST['degree'];
// WP_Query arguments
$args = array (
'post_type' => 'offers',
'post_status' => 'publish',
's' => $searchterm
);
$query = new WP_Query( $args );
ob_start();
// The Loop
if ( $query->have_posts() ) : ?>
<br><br><p>
<?php while ( $query->have_posts() ) : $query->the_post();
if( ($searchlocation == NULL) || in_array(trim(strtolower($searchlocation)), array_map('strtolower', get_field('offer_location')))):
if( ($searchdegree == NULL) || (trim(strtolower($searchdegree)) === strtolower(get_field('offer_degree')))):?>
Titel: <?php the_title(); ?> <br>
Abschluss: <?php the_field('offer_degree'); ?> <br>
Ort: <?php the_field('offer_location'); ?> <br>
Anbieter: <?php the_field('offer_provider'); ?> <br>
<?php if(get_field('offer_subtitle')): ?>
- <?php the_field('offer_subtitle'); ?> <br>
<?php endif; ?>
<br>
<?php endif; endif; endwhile; ?>
</p>
<?php else: ?>
<!-- no posts found -->
Keine Angebote gefunden
<?php endif;
// Restore original Post Data
wp_reset_postdata();
$content = ob_get_clean();
echo $content;
die();
$testcheck = false;
}
add_action( 'wp_ajax_nopriv_cwlist_click_search', 'cwlist_click_search' );
add_action( 'wp_ajax_cwlist_click_search', 'cwlist_click_search' );
Gỡ lỗi WP
Khi tôi kích hoạt plugin, nhiều dòng như sau xuất hiện ở trang đầu:
Lưu ý: Đang cố gắng lấy thuộc tính của đối tượng không trong C: \ Users \ CWalt \ Documents \ gitlab \ steuerazubi \ wordpress \ wp-gộp \ query.php trên dòng 4520 Lưu ý: Cố gắng lấy thuộc tính của đối tượng không trong C: \ Người dùng \ CWalt \ Documents \ gitlab \ steuerazubi \ wordpress \ wp-gộp \ query.php trên dòng 4522 Lưu ý: Cố gắng lấy thuộc tính của đối tượng không trong C: \ Users \ CWalt \ Documents \ gitlab \ steuerazubi \ wordpress \ wp- bao gồm \ query.php trên dòng 4524 ...
Tôi kích hoạt gỡ lỗi để tạo một plugin tốt. Tôi có thể làm gì sai?
Nhiều loại bài đăng
Bạn có biết một cách tiếp cận tốt để cho phép Người dùng chỉ định nhiều loại bài đăng hơn thông qua phụ trợ wordpress không? Người dùng sẽ có thể tạo các trang tìm kiếm khác nhau cho các loại bài đăng khác nhau thông qua mã ngắn.
Cảm ơn bạn rất nhiều vì đã đọc. Tôi biết ơn về mọi gợi ý nhỏ.