2010-08-17 3 views

답변

3

변경이는 워드 프레스, WP는 데이터베이스 쿼리 도착 직전에 때

$search_replacements = array(
    'find' => 'replace', 
    'find2' => 'replace2', 
    'var' => 'foo' 
); 
function modify_search_term($request_vars) { 
    global $search_replacements; 
    if (!empty($request_vars['s']) && !empty($search_replacements[$request_vars['s']])) { 
     $request_vars['s'] = $search_replacements[$request_vars['s']]; 
    } 
    return $request_vars; 
} 
add_filter('request', 'modify_search_term'); 

이것은 당신이 생각하고 $ 교체 배열에 추가 할 수있는대로 많은 조건을 처리 할 수 ​​있습니다를 .

add_filter의 99는 사용자가 마지막으로 변경 사항을 적용 할 수 있도록 늦게 실행되도록하는 것입니다 (설치 한 다른 플러그인에 따라 중요 할 수 있음).

URL은 여전히 ​​원래 용어를 나타내지 만 페이지로드를 저장합니다. 트래픽이 많은 사이트의 경우 예쁜 URL을 얻기 위해 리디렉션하지 않으려 고합니다.

+0

두 번째. 나는 요청 훅을 알지 못했지만, 그렇습니다 ... 그것은 단지 하나가 될 것이라는 것을 이해합니다. 이것은 분명히 훨씬 더 깨끗한 해결책이며, URL에 새로운 용어를 넣기 위해 리다이렉트 할 필요가 없다. – Jervis

0

전에 전에 htaccess 다시 쓰기 규칙을 사용하지 않고도 wordpress에 들어갑니다. 그러나 표준 브라우저 리디렉션을 사용하여 특정 검색어를 새로운 검색어로 직접 리디렉션하는 맞춤 필터를 만들 수 있습니다. 브라우저에 출력되기 전에 필터를 통해 검색 변수를 잡는 방법을 알아낼 수 없었기 때문에 내 예제에서 javascript 위치 기능을 사용해야했습니다 (따라서 내 워드 기능을 리디렉션 기능이나 표준에 내장하여 사용하는 것을 제한했습니다). PHP 헤더 리디렉션)

다음 코드는 "test"에 대한 검색을 수행하고 "smickie"검색으로 리디렉션합니다. 이것은 매우 빠르고 깔끔하게 정리되었으므로 필요에 맞게 스위트를 수정하고 싶을 것입니다. 그러나 이것이 올바른 방향으로 시작될 수 있기를 바랍니다.

function redirect_searchterm() { 
    if (is_search()) { 
    $search_query = get_search_query(); 
     if ($search_query == "test") { 
     $new_searchquery = "smickie"; 
     ?> 
      <script type="text/javascript"> 
      <!-- 
      location.replace("<?php echo get_option('siteurl') . '/?s=' . $new_searchquery .'&submit=Search'; ?>"); 
      --> 
      </script> 
     <?php 
     } 
    } 
} 
add_action('wp_head', 'redirect_searchterm', 1); 
+0

필터를 사용하여 쿼리에 대해 아무 것도 변경할 수 있습니다. 그것의 워드 프레스 - 개발자들은 어떤 개발을하기 전에 "저기에 필터가있다"고 소리 쳐야합니다. – Gipetto

관련 문제