Mostrar links para páginas de arquivo com base em valores de campo personalizados

4

Eu tenho um site de recrutamento no qual desejo exibir uma lista de links de local de trabalho. O local da tarefa já foi inserido em um campo personalizado para cada postagem, portanto, só quero exibir uma lista de links que, quando clicados, exibirá postagens com apenas esse valor personalizado inserido, por exemplo,

Inglaterra Irlanda EUA etc ..

Clique no link de um país acima e veja todas as postagens que têm o país em questão adicionado como um valor de campo personalizado

    
por Leon Quinn 04.10.2010 / 16:18

1 resposta

3

Eu recomendaria usar uma taxonomia personalizada para isso, não um campo personalizado. Você pode classificar e listar arquivos baseados em uma taxonomia com muito mais facilidade do que em campos personalizados.

No entanto, se você deseja listar com base no campo personalizado, será necessário modificar os argumentos enviados para query_posts() na sua página de arquivo para passar os meta_key e meta_value que você está pesquisando por.

Para adicionar sua variável de consulta:

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
}

Em seguida, seus permalinks para o arquivo se tornarão algo semelhante a http://mycoollocationsite.com/location/england http://mycoollocationsite.com/location/ireland http://mycoollocationsite.com/location/usa ... etc ...

Em seguida, você precisará adicionar o valor que foi passado à sua localização para a consulta real:

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

    }
}

Estou assumindo que você está armazenando seus dados personalizados em um campo chamado location ... então mude isso se eu estiver errado.

Mas isso permitirá que você filtre seus arquivos com base em um local específico. Se você quiser habilitar arquivos baseados em data com isso também, isso exigirá algumas regras adicionais no meu primeiro bloco de código (agora, isso exibiria uma lista de todas postagens com location meta_key) .

Ainda assim, recomendo usar uma taxonomia personalizada. É mais limpo, mais extensível e requer menos codificação personalizada. Essa também é exatamente a situação para a qual taxonomias personalizadas foram criadas ... então, por favor, não reinvente a roda ...

    
por EAMann 04.10.2010 / 16:39