Intereting Posts
Количество дней с даты регистрации до сегодняшнего дня Имейте сообщение WordPress перенаправить на url при вступлении в iPad (Safari) загрузка файлов в папку uploads через ftp Получить последние сообщения от автора? Разрешить доступ к домашней странице и экрану входа в систему, но ничего больше (кроме случаев, когда вы вошли в систему) Изменить фильтр сообщений, чтобы установить индивидуальное количество сообщений на странице и исключить дочерние сообщения Как получить сообщение, когда сообщение отправлено разбиение на страницы для пользовательского цикла с несколькими типами сообщений Как исключить теги и категории из функции? Почему темы WordPress по умолчанию задают шрифты во многих местах? Пользовательский тип сообщения не отображается или отображается одиночная запись? Как изменить add_action () внутри цикла основной функции Получите последнюю таксономию / категорию? Поиск способа загрузки функции после завершения предварительного просмотра предварительного просмотра Использование пользовательского поля в Google Map Встраиваемый код работает в одной теме, а не в другом

Фильтрация настраиваемого типа сообщений в комбинации пользовательских таксономий и настраиваемых полей?

У меня есть пользовательский тип «художник».

Он имеет связанную пользовательскую таксономию «artist_type» с терминами «голос», «актер», «корпоративный»,

У «художника» также есть настраиваемые поля для пола, местоположения, agerangefrom и agerangeto. Последние 2 поля определяют возрастную зону, в которую может действовать актер / художник.

Я показываю художников в соответствии со своей таксономией artist_type, поэтому, используя таксономию-artist-type.php для отображения «/ artist_type / voices /» и «/ artist_type / players» / и «/ artist_type / corporate /»,

Все в порядке.

Но мне нужно добавить фильтр, чтобы пользователь мог сузить каждую из этих трех категорий в соответствии с указанными выше настраиваемыми полями: пол, местоположение и т. Д.

Я наткнулся на сайт, здесь что-то похожее: http://artists.derricktalentelite.com.au/?post_type=actor&gender=male

Я запутался в том, как настроить это в моем сценарии. Должен ли я использовать meta_query и / или pre_get_posts?

Пользователь должен иметь возможность комбинировать фильтры, например, на странице голосов: мужчина в возрасте от 20 до 30 лет, основанный в Лондоне. Как сформулировать строку запроса в URL-адресе для передачи этих параметров?

Любые подсказки о том, как лучше всего продолжить, будут оценены.

Лучший способ продолжить – с помощью ajax и tax_query. Фильтр Pre_get_posts имеет смысл только в том случае, если вы хотите изменить запрос в иерархии шаблонов, поэтому это «стандартный» таксономия.php.

Этот подход:

  1. сделайте страницу с показателем списка по умолчанию, поэтому, возможно, «все», просто простой запрос post_type. И боковое меню со всеми вашими фильтрами, которые можно щелкнуть, конечно.

  2. сделать php-файл, который получает определенный термин или термины через tax_query, используя $ _GET, что-то вроде этого:

    <?php define('WP_USE_THEMES', false); require_once('../../../wp-load.php'); $gender = (isset($_GET['gender'])) ? $_GET['gender'] : 0; $args = array( 'post_type' => 'artist', 'tax_query' => array( array( 'taxonomy' => 'artist_type', 'field' => 'slug', 'terms' => $gender ) ) ); $tag_query = new WP_Query( $args ); if ($tag_query->have_posts()) : while ($tag_query->have_posts()) : $tag_query->the_post(); 

Это всего лишь исходный пример. Разверните его с помощью других переменных через $ _GET и проверьте, какие из них используются в URL-адресе (? Gender = male & voice = something).

Убедитесь, что этот цикл имеет ту же самую структуру html, что и первоначально загруженную, так что, возможно, это всего лишь цикл элементов div.

  1. Затем используйте jquery для загрузки данных в файл выше, примерно так:

     <script> jQuery(document).ready(function($) { var template_path = $('#template_path').html(); $.querySort = { path_to_template: template_path, } $('.filter').click(function(){ $(this).toggleClass('active'); var term = $(this).attr('data-gender'); var query = '?term=' + term; $('#data_wrapper').animate({opacity: 0}, function() { $('#data_wrapper').append('<div id="loader"></div>'); $("#data_wrapper").load($.querySort.path_to_template + '/ajax_load_terms.php' + query, function() { $('#loader').remove(); $("#data_wrapper").animate({opacity: 1}, function() { }); }); }); return false; //prevents a link from being clicked, if needed }); </script> 

Посмотрите, как он загружает файл, который вы только что создали, здесь ajax_load_terms.php. Он добавляет запрос к URL-адресу и берет этот термин из выбранного вами селектора, который выглядит следующим образом в моем примере:

  <a href="javascript:void(0)" data-gender="[php echo your term here]"> 

Также обратите внимание, что js должен знать путь к файлу ajax, который он получает из скрытого div на вашей главной странице, как это

  <div style="display: none" id="template_path"><?php bloginfo('template_url') ?></div> 

Надеюсь, вы получите направление и сможете определить дыры в коде, если не дать мне крик, это довольно сложно, но на самом деле это не так.

Удачи.