leonquinn
  • 0
Новичок

Показывать ссылки на страницы архива на основе значений настраиваемых полей

  • 0

У меня есть веб-сайт по подбору персонала, на котором я хочу отобразить список ссылок на вакансии. Место работы уже введено в настраиваемое поле для каждого сообщения, поэтому я просто хочу отобразить список ссылок, по которым при нажатии будут отображаться сообщения только с введенным настраиваемым значением, т.е.

Англия Ирландия США и т.д..

Щелкните ссылку страны выше и просмотрите все сообщения, в которых указанная страна добавлена ​​в качестве значения настраиваемого поля??

Share
  1. Я бы рекомендовал использовать для этого пользовательскую таксономию, а не произвольное поле. Вы можете сортировать и перечислять архивы на основе таксономии гораздо проще, чем на основе настраиваемых полей.

    Однако, если вы хотите составить список на основе настраиваемого поля, вам нужно будет изменить аргументы, отправленные query_posts() на страницу вашего архива, чтобы передать их, meta_key и meta_value вы ищете.

    Чтобы добавить переменную запроса:

    add_action('init', 'add_custom_meta_url');
    function add_custom_meta_url() {
        global $wp,$wp_rewrite;
        $wp->add_query_var('location');
        $wp_rewrite->add_rule('location/([^/]+)','index.php?location=$matches[1]','top');
        $wp_rewrite->flush_rules(false);  // This should really be done in a plugin activation
    }
    

    Тогда ваши постоянные ссылки на архив станут чем-то вроде http://mycoollocationsite.com/location/england http://mycoollocationsite.com/location/ireland http://mycoollocationsite.com/location/usa … и т.д…

    Затем вам нужно будет добавить любое значение, которое было передано вашему местоположению, к фактическому запросу:

    add_action('parse_query', 'apply_custom_meta_to_query');
    function apply_custom_meta_to_query(&$query) {
        if (isset($query->query['location'])) {
            $query->query_vars['meta_key'] = 'location';
            $query->query_vars['meta_value'] = $query->query['location'];
            unset($query->query_vars['location']);            // You don't need this
    
        }
    }
    

    Я предполагаю, что вы храните свои пользовательские данные в поле с именем location … так что измените это, если я ошибаюсь.

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

    Тем не менее, я рекомендую вместо этого использовать пользовательскую таксономию. Он чище, более расширяемый и требует меньше специального кода. Это именно та ситуация, для которой были созданы пользовательские таксономии… поэтому, пожалуйста, не изобретайте велосипед…

    • 0

Оставить ответ

You must login to add an answer.