검색에 맞춤 분류 용어 포함
-
-
Norcross,Jan이 제안한 답변에 몇 가지 피드백을 추가 할 수 있습니까?작업을 수행하는 플러그인을 찾고 계십니까?Nocross, can you add some feedback to the answer proposed by Jan? Are you probably looking for a plugin that does the job?
- 0
- 2010-11-06
- hakre
-
나는 결국 계획을 버리게되었다.(특정 영역의 다양한 요구에 따라) 3 개의 별도 검색 기능을 만들었 기 때문에 테스트 한 모든 플러그인이 이러한 기능을 망가 뜨 렸습니다.결국,나는 고객이 검색 가능하도록 콘텐츠에 용어를 포함하라고 말했습니다.I ended up ditching the plan. Since I had created 3 separate search functions (based on different needs in certain areas), all the plugins I tested broke those. In the end, I told the client to include terms in the content if they wanted it searchable.
- 0
- 2010-11-13
- Norcross
-
6 대답
- 투표
-
- 2010-12-15
Search Everything 플러그인도 권장하지만 WP의 검색 기능을 사용하여 구현하려면 Atom 테마에서 사용하는 코드는 다음과 같습니다.
// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23 function atom_search_where($where){ global $wpdb; if (is_search()) $where .= "OR (t.name LIKE '%".get_search_query()."%' AND {$wpdb->posts}.post_status = 'publish')"; return $where; } function atom_search_join($join){ global $wpdb; if (is_search()) $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id"; return $join; } function atom_search_groupby($groupby){ global $wpdb; // we need to group on post ID $groupby_id = "{$wpdb->posts}.ID"; if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby; // groupby was empty, use ours if(!strlen(trim($groupby))) return $groupby_id; // wasn't empty, append ours return $groupby.", ".$groupby_id; } add_filter('posts_where','atom_search_where'); add_filter('posts_join', 'atom_search_join'); add_filter('posts_groupby', 'atom_search_groupby');
태그 검색 플러그인을 기반으로합니다 : http ://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23
I would recommend the Search Everything plugin too, but if you want to implement this using WP's search function, here's the code I'm using in my Atom theme:
// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23 function atom_search_where($where){ global $wpdb; if (is_search()) $where .= "OR (t.name LIKE '%".get_search_query()."%' AND {$wpdb->posts}.post_status = 'publish')"; return $where; } function atom_search_join($join){ global $wpdb; if (is_search()) $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id"; return $join; } function atom_search_groupby($groupby){ global $wpdb; // we need to group on post ID $groupby_id = "{$wpdb->posts}.ID"; if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby; // groupby was empty, use ours if(!strlen(trim($groupby))) return $groupby_id; // wasn't empty, append ours return $groupby.", ".$groupby_id; } add_filter('posts_where','atom_search_where'); add_filter('posts_join', 'atom_search_join'); add_filter('posts_groupby', 'atom_search_groupby');
It's based on the Tag-Search plugin: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23
-
검색에서 분류 ID 배열을 제외하도록이 코드를 어떻게 수정할 수 있습니까?This is great-- how can this code be modified to exclude an array of taxonomy IDs from the search?
- 1
- 2012-01-06
- HandiworkNYC.com
-
이러한 후크에 대한 필터 콜백은 * 2 * 인수를 허용합니다.두 번째는 참조로 전달되는 _WP_Query_ 인스턴스입니다.`is_search ()`또는 기타 _WP_Query_ 메서드 호출 (`is_search ()``is_home ()`등)에 대한 모든 검사는 항상 쿼리 인스턴스에서 직접 호출해야합니다 (예 :`$ query->is_search ()`인스턴스 변수의 이름은 필터가 실행되는 쿼리가 아니라 항상 기본 쿼리를 참조하는 템플릿 함수가 아니라 콜백 서명에서 '$ query'입니다.It should be noted that the filter callbacks for these hooks accept *2* arguments; the 2nd for all of them being the _WP_Query_ instance which is passed by reference. Any checks for `is_search()` or other _WP_Query_ method calls (`is_search()` `is_home()` etc.) should always be called directly on the query instance (eg. `$query->is_search()` assuming the name of the instance variable is `$query` in the callback signature) rather than the template function which will always refer to the main query, not the query that the filter is running for.
- 0
- 2014-06-07
- Evan Mattson
-
또한 공개적으로 사용 가능한 원시 검색 문자열을 SQL 쿼리에 직접 삽입하는 것은 좋은 생각이 아닙니다 ... [권장 읽기] (http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks)Also, probably not a good idea to inject the raw publicly available search string directly into an SQL query... [recommended reading](http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks)
- 6
- 2014-06-07
- Evan Mattson
-
WPML alredy가 조인 부분에서 'T'를 사용하기 때문에 WPML과 충돌이 있음을 추가하고 싶습니다.tr,tt 및t 대신 사용자 정의를 사용하면이 문제가 해결됩니다.I would just like to add that this has a conflict with WPML because WPML alredy uses 'T' in join part, so using something custom instead of tr, tt and t fixes this problem
- 0
- 2016-02-09
- Bobz
-
@EvanMattson — 위에서 "공개적으로 사용 가능한 원시 검색 문자열을 SQL 쿼리에 직접 삽입하는 것은 좋은 생각이 아닐 것입니다."라고 위에서 언급했습니다.그 위험을 무효화하는 방법은 무엇입니까?제공 한 링크를 읽었지만 원래 답변과 어떻게 연결되는지 볼 수 없습니다.Em 감사합니다.@EvanMattson — you commented above that it's "probably not a good idea to inject the raw publicly available search string directly into an SQL query." How would go about negating that risk? I read the link you provided but couldn't see how that links to the original answer. Many thanks Em.
- 1
- 2020-04-05
- The Chewy
-
@TheChewy 위의 답변은 WHERE 절의 MySQL 문에서 직접 사용되는`get_search_query ()`를 보여줍니다.이 코드는 SQL 인젝션 공격에 취약하며 누구나 검색 필드를 통해 사이트에서 임의의 SQL 쿼리를 실행할 수 있습니다.분명히 이것이 검색이 어느 정도 작동하는 방식이지만 중요한 점은이 입력이 SQL 문이 아닌 검색어로 해석되도록 적절하게 준비되어야한다는 것입니다.이것은`$ wpdb->prepare ()`메소드가 언급 한 권장 읽기에 설명 된 것입니다.@TheChewy the answer above shows `get_search_query()` used directly in the MySQL statement of the WHERE clause. This code is vulnerable to SQL injection attacks, where anyone can execute arbitrary SQL queries on your site by passing them through the search field. Obviously that's how searches work to some degree, but the important point is that this input needs to be prepared properly to ensure it is interpreted as search terms and not SQL statements. This is what the `$wpdb->prepare()` method is for which is described in said recommended reading
- 0
- 2020-04-19
- Evan Mattson
-
@TheChewy 당신은 또한 여기`wpdb ::prepare ()`에 대한 문서에서 좋은 예를 찾을 수 있습니다 : https://developer.wordpress.org/reference/classes/wpdb/prepare/@TheChewy you can also find some good examples in the docs for `wpdb::prepare()` here: https://developer.wordpress.org/reference/classes/wpdb/prepare/
- 0
- 2020-04-19
- Evan Mattson
-
@EvanMattson 안녕하세요 Evan,입력 해 주셔서 감사합니다.나는 PHP와 사용자 정의 WP 코드를 처음 접했으며 지금까지 머리 위로 갔다.너무 어렵지 않다면`$ wpdb->prepare ()`를 추가하여 코드를 복제 할 수 있습니까?나는 그런 종류의 것을 이해하기까지 몇 주가 걸릴 것이라고 생각합니다.@EvanMattson Hi Evan, thanks for the input. I'm new to both php and custom WP code and that has gone so far over my head. Would you be able to duplicate the code with the `$wpdb->prepare()` added if it isn't too hard? I think it'll be weeks before I get close to understanding that sort of thing.
- 1
- 2020-04-21
- The Chewy
-
- 2010-10-07
이것은 표준 WordPress 검색입니까? 분류를 포함하지 않는 것 때문입니다 (카테고리 및 태그와 같은 표준)을 검색합니다.이 코드는
post_title
및post_content
에서 검색하지만 다른 항목을 포함하려면posts_search
필터에 연결해야합니다.Is this the standard WordPress search? Because that doesn't seem to include taxonomies (not even standard, like categories and tags) in the search. The code searches in
post_title
andpost_content
, but if you want to include anything else you should hook into theposts_search
filter. -
- 2013-09-08
https://wordpress.stackexchange.com/a/5404/37612,훌륭합니다.하지만 거기서 한 가지 문제를 발견했습니다.이 문제는 저에게 효과가 없었습니다. 약간 수정했습니다.
- 분류 제목에서 문자열을 검색하면 잘 작동합니다.
-
분류에 특수 문자가있는 경우 (예 : 독일어 "Umlauts"(ö,ä,ü) 및 특수 문자를 사용하여 oe,ae,ueinsteda를 검색하는 경우-분류의 슬러그에 검색을 추가해야합니다.
OR t.slug LIKE '%".get_search_query()."%'
-
검색어와 분류 필터의 조합을 검색하는 경우-이것도 잘 작동합니다.
-
하지만 문제는 분류 필터 만 사용하려고 할 때입니다. 검색된 텍스트가 없으면 검색 후크가 쿼리에 빈 문자열을 추가하므로 결과에 모든 게시물이 표시됩니다. 필터링 된 분류 체계에서만 간단한 IF 문이 문제를 해결합니다. 따라서 전체 수정 된 코드는 다음과 같습니다 (저에게는 완벽하게 작동합니다!)
I tried the solution of Onetrickpony above https://wordpress.stackexchange.com/a/5404/37612, which is great, but I found one issue there, which did not work for me, and I would make one small modification:
- if I searched for a string in the title of the taxonomy - it works great
if the taxonomy has special characters e.g. with german "Umlauts" (ö,ä,ü) and one searches for oe, ae, ue insteda of using the special char - you need to add the search in the slug of the taxonomy -
OR t.slug LIKE '%".get_search_query()."%'
if you search for a combination of a search query and a taxonomy filter - this also works fine
But the problem is, when you try to use only the taxonomy filter - the search hook append an empty string to the query if no text is searched for, and for that reason you get ALL posts in the result, instead of only those from the filtered taxonomy. A simple IF statement solves the problem. So the whole modified code would be this (works perfectly fine for me!)
function custom_search_where($where){ global $wpdb; if (is_search() && get_search_query()) $where .= "OR ((t.name LIKE '%".get_search_query()."%' OR t.slug LIKE '%".get_search_query()."%') AND {$wpdb->posts}.post_status = 'publish')"; return $where; } function custom_search_join($join){ global $wpdb; if (is_search()&& get_search_query()) $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id"; return $join; } function custom_search_groupby($groupby){ global $wpdb; // we need to group on post ID $groupby_id = "{$wpdb->posts}.ID"; if(!is_search() || strpos($groupby, $groupby_id) !== false || !get_search_query()) return $groupby; // groupby was empty, use ours if(!strlen(trim($groupby))) return $groupby_id; // wasn't empty, append ours return $groupby.", ".$groupby_id; } add_filter('posts_where','custom_search_where'); add_filter('posts_join', 'custom_search_join'); add_filter('posts_groupby', 'custom_search_groupby');
-
- 2010-11-06
Jan과 같은 수준의 정보를 가지고 있습니다. 플러그인으로 검색을 확장 할 수도 있다는 것을 알고 있습니다.
아마 모두 검색 (Wordpress 플러그인) 이 귀하가 찾고있는 것입니다.기능 목록에 따르면 이제 사용자 지정 분류법을 지원합니다.
I have the same level of information like Jan. I know it's possible to extend search with plugins as well.
Probably Search Everything (Wordpress Plugin) is what you are looking for. According to the feature list, it now supports custom taxonomies.
-
+1 For Search Everything 플러그인.예상대로 작동하며 표준 Wordpress 검색보다 더 많은 결과를 반환합니다.+1 For Search Everything plugin. It works as expected and returns more results than standard Wordpress search.
- 0
- 2010-12-02
- PNMG
-
- 2012-12-08
WooCommerce 장바구니 플러그인에서도 동일한 문제가 발생합니다. 내 검색 결과에는 표준 게시물 태그가 아니기 때문에 맞춤 분류 용어 'product_tag'가 포함되지 않습니다.이 문제에 대한 다른 StackOverflow 스레드에서 해결책을 찾았습니다.
tkelly 의 코드 예제는 그의 예제에서
author
라는 용어를 대체 할 때 저에게 효과적이었습니다.장바구니 플러그인에 대한 요구 사항에 따라product_tag
를 사용합니다.I have the same problem going on with the WooCommerce cart plugin.. My search results are not including the custom taxonomy term, 'product_tag', because it not a standard post tag. I found a solution in this other StackOverflow thread about the matter:
The code example by tkelly worked for me when replacing the term
author
in his example withproduct_tag
as per our needs for the cart plugins. -
- 2015-11-12
onetrickpony의 답변은 훌륭하지만 모든 검색을 단일 용어로 취급하고 따옴표로 묶인 검색 구문도 처리하지 않습니다. 이 두 가지 상황을 처리하기 위해 그의 코드 (특히
atom_search_where
함수)를 약간 수정했습니다. 수정 된 코드 버전은 다음과 같습니다.// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23 function atom_search_where($where){ global $wpdb, $wp_query; if (is_search()) { $search_terms = get_query_var( 'search_terms' ); $where .= " OR ("; $i = 0; foreach ($search_terms as $search_term) { $i++; if ($i>1) $where .= " AND"; // --- make this OR if you prefer not requiring all search terms to match taxonomies $where .= " (t.name LIKE '%".$search_term."%')"; } $where .= " AND {$wpdb->posts}.post_status = 'publish')"; } return $where; } function atom_search_join($join){ global $wpdb; if (is_search()) $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id"; return $join; } function atom_search_groupby($groupby){ global $wpdb; // we need to group on post ID $groupby_id = "{$wpdb->posts}.ID"; if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby; // groupby was empty, use ours if(!strlen(trim($groupby))) return $groupby_id; // wasn't empty, append ours return $groupby.", ".$groupby_id; } add_filter('posts_where','atom_search_where'); add_filter('posts_join', 'atom_search_join'); add_filter('posts_groupby', 'atom_search_groupby');
I found the answer from onetrickpony to be great but it treats any search as a single term and also won't deal with a search phrase enclosed with quotation marks. I modified his code (specifically, the
atom_search_where
function) a bit to deal with these two situations. Here is my modified version of his code:// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23 function atom_search_where($where){ global $wpdb, $wp_query; if (is_search()) { $search_terms = get_query_var( 'search_terms' ); $where .= " OR ("; $i = 0; foreach ($search_terms as $search_term) { $i++; if ($i>1) $where .= " AND"; // --- make this OR if you prefer not requiring all search terms to match taxonomies $where .= " (t.name LIKE '%".$search_term."%')"; } $where .= " AND {$wpdb->posts}.post_status = 'publish')"; } return $where; } function atom_search_join($join){ global $wpdb; if (is_search()) $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id"; return $join; } function atom_search_groupby($groupby){ global $wpdb; // we need to group on post ID $groupby_id = "{$wpdb->posts}.ID"; if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby; // groupby was empty, use ours if(!strlen(trim($groupby))) return $groupby_id; // wasn't empty, append ours return $groupby.", ".$groupby_id; } add_filter('posts_where','atom_search_where'); add_filter('posts_join', 'atom_search_join'); add_filter('posts_groupby', 'atom_search_groupby');
두 가지 맞춤 게시물 유형에 두 가지 맞춤 분류를 적용했습니다.사이드 바의 용어 목록은 괜찮으며 관련된 모든 게시물을 나열합니다.그러나 특정 용어 중 하나를 검색하면 해당 용어가 포함 된 게시물이 표시되지 않습니다.
예 : http://dev.andrewnorcross.com/das/all-case-studies/ 용어 "PQRI"검색
아무것도 없습니다.어떤 아이디어?다양한 검색 플러그인을 사용해 보았지만 내 맞춤 검색 매개 변수가 깨지거나 작동하지 않습니다.