사용자 정의 분류 및 사용자 정의 필드에 대한 필터가있는 고급 검색 양식


30

맞춤 게시물 유형 맞춤 입력란, 맞춤 분류법 및 첫 번째 링크로 연결되는 별도의 맞춤 게시물 유형 속성 (필드 및 분류법)에 대한 필터가있는 특정 맞춤 게시물 유형에 대한 고급 검색 양식을 작성하고 싶습니다. 맞춤 관계 필드를 사용하여 게시물 유형

나는 최근에 WP 사용자 정의 게시물 유형, 필드 및 분류법으로 시작했지만 지금까지는 좋아하지만 그것을 최대한 활용하기 위해 올바르게 검색하고 싶습니다. 수동으로해야합니까? 그렇다면 어떻게?

추신. 중요한 경우 플러그인을 사용하고 있습니다 : Advanced Custom FieldsCustom Post Type UI .

아래에서는 필터링이 어떻게 보이고 위의 게시물 유형과 관련이 있는지에 대한 예를 모의했습니다.

맞춤 입력란 및 맞춤 분류로 필터링 된 맞춤 검색 양식


누군가 내가 위에서했던 것처럼 위의 Brady 솔루션을 구현하는 데 어려움이 있다면 힌트가 있습니다 : Wordpress에 세션 데이터 전달에 문제가있는 것 같습니다. 따라서 제대로 작동하려면 추가 작업을 수행해야 할 것입니다. 문제는 여기에서 논의됩니다 : frank-verhoeven.com/using-session-in-wordpress Peter Wooster의 "Simple Session Support"플러그인을 설치 하면 문제가 해결되었습니다 . 게시물의 댓글 섹션에 플러그인에 대한 링크가 있습니다.
SteveR

답변:


16

나는 당신과 같은 것이 당신 자신을 가장 잘 쓰는 것이라고 생각합니다.

살펴보십시오 : http://www.catalysthomes.co.uk/homes-for-sale/

속성이 CPT에로드되고 사이드 바에 나만의 맞춤 검색이 있습니다. 그 검색 중 분류법, 사용자 정의 필드 및 날짜 가격 별 주문 등과 같은 여러 가지를 검색합니다.

어떻게 이것을 달성 할 수 있습니까? 양식을 페이지 템플릿에 제출하고 거기서부터 게시 데이터를 처리하고 검색 기준에 따라 새로운 WP_query를 작성합니다. 세션을 사용하여 검색 변수를 저장하여 결과를 페이지 매김 할 수 있습니다.

WP_Query는 매우 강력합니다. 살펴보십시오 : http://codex.wordpress.org/Class_Reference/WP_Query

거기에서 meta_query여러 사용자 정의 필드 tax_query를 쿼리하고 분류법을 쿼리 하는 데 사용할 수 있습니다. 아래는 아이디어를 제공하기 위해 내 것이 어떻게 만들어 졌는가입니다.

템플릿 파일 :

  <?php
  $temp = $wp_query;
  $wp_query = NULL;
  $args = array();
  ?>

  <?php include("functions/Homes-for-sale/propertyrawresults.php"); ?>
  <?php include("functions/Homes-for-sale/propertysearchresults.php"); ?>

  <?php
  $args['post_type'] = "homes-for-sale";
  $args['showposts'] = 10;
  $args['paged'] = $paged;
  $wp_query = new WP_Query($args);
  ?>

  <?php include("functions/Homes-for-sale/propertylistlayout.php"); ?>

원시 결과

<?php
if($_POST['sortby']) {
    $_SESSION['prop_selectedsortby'] = $_POST['sortby'];
}

switch($_SESSION['prop_selectedsortby']) {
    case "name-asc": $args['order'] = "ASC"; $args['orderby'] = "title"; break;
    case "name-desc": $args['orderby'] = "title"; break;
    case "price-asc": $args['order'] = "ASC"; $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
    case "price-desc": $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
    case "date-asc": $args['order'] = "ASC"; break;
    default: /* No need to set arguments here as wp query defaults */ break;
}

$selectedsortby[$_SESSION['prop_selectedsortby']] = " selected=\"selected\"";
?>

검색 결과

<?php
if( ! empty( $_SESSION['s_property_ptype'] ) ) {
    $args['meta_query'][] = array(
        'key' => 'chb_homes_for_sale_types_nbrs',
        'value' => $_SESSION['s_property_ptype']
    );
}

if( ! empty( $_SESSION['s_property_development'] ) ) {
    $args['meta_query'][] = array(
        'key' => 'chb_homes_for_sale_ofdevelopment',
        'value' => $_SESSION['s_property_development']
    );
}

if( isset( $_SESSION['s_property_area'] ) && 0 != $_SESSION['s_property_area'] ) {
    $args['tax_query'][] = array(
        'taxonomy' => 'areas',
        'field' => 'id',
        'terms' => array( (int) $_SESSION['s_property_area'] ),
    );
}

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bedrooms',
    'value' => $_SESSION['s_property_bedrooms_min'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bedrooms',
    'value' => $_SESSION['s_property_bedrooms_max'],
    'compare' => '<=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bathrooms',
    'value' => $_SESSION['s_property_bathrooms_min'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bathrooms',
    'value' => $_SESSION['s_property_bathrooms_max'],
    'compare' => '<=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_fmv',
    'value' => $_SESSION['s_property_min_price'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_fmv',
    'value' => $_SESSION['s_property_max_price'],
    'compare' => '<=',
    'type' => 'SIGNED'
);
?>

레이아웃 목록 게시물 발췌 및 정보를 표시하는 표준 WP 루프.


이 예에서는 안녕하세요 Brady, Thx. 가능하면 양식을 공유해달라고 부탁 할 수 있습니까? 어떤 URL을 제출하고 있습니까?
salocin

@salocin-그 정보는 주어진 URL에서 페이지의 소스를보고 얻을 수 있습니다
Brady

thx Brady, 그래서 페이지 템플릿의 URL?
salocin

양식은 catalysthomes.co.uk에 있습니다. 소스를보고 양식이 작동하는 방식을 볼 수 있습니다.
Brady

맞춤 분류법에 맞춤 입력란으로 게시물이 있는지 확인하고 있습니까? 검색 양식을 정확히 채우고 있습니까? @ Brady 감사
Phil Hudson

2

Relevanssi와 함께 Taxonomy Picker 플러그인을 사용해보십시오 . 킬러 조합.

http://www.squidoo.com/taxonomy-picker-wordpress-plugin http://wordpress.org/extend/plugins/relevanssi/


이것은 내 문제의 어려운 부분 인 사후 관계를 고려하지 않습니다. 분류별로 게시물을 필터링하는 것이 더 쉬운 방법이므로 관련 게시물의 분류 (또는 사용자 정의 필드)를 구매하도록 필터링해야합니다.
pax


0

누군가 내가 위에서했던 것처럼 위의 Brady 솔루션을 구현하는 데 어려움이 있다면 힌트가 있습니다 .WordPress에 세션 데이터를 전달하는 데 문제가있는 것 같습니다. 따라서 제대로 작동하려면 추가 작업을 수행해야 할 것입니다. 문제는 여기에서 논의됩니다

functions.php에서 :

function init_sessions() {
  if (!session_id()) {
  session_start();
 }
}
add_action('init', 'init_sessions');

템플릿에서 :

/**
* Enable sessions
*/
if (!session_id())
session_start();

Peter Wooster의 " Simple Session Support "플러그인을 설치하는 것이 속임수였습니다.


1
스티브 안녕 첫 번째 답변을 여기에 게시 해 주셔서 감사합니다. WPSE에서 당신을 기쁘게 생각합니다. 나중에 참조 할 수 있도록 답변이 외부 링크에서 완전히 피벗되지 않아야합니다. 링크가 비활성화되면 대답이 양성이됩니다. 몇 가지 샘플 관련 코드 스 니펫으로 답변을 업데이트 하시겠습니까?
Brian Fegter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.