Mostrar itens de taxonomia personalizada do WordPress com base em um item selecionado de outra taxonomia personalizada

5

Deixe-me explicar o problema com o qual estou lidando:

Eu tenho 2 taxonomias personalizadas. Um é chamado "thestate" e o outro é chamado "thetown".

Em " estado " listei todos os estados nos EUA. Em " thetown " listei as principais cidades nos EUA.

Para cada taxonomia eu tenho seus itens exibidos em um menu suspenso

Você entende onde estou indo com isso? : D Preciso exibir os itens em "thetown" com base no estado selecionado na taxonomia "thestate"

Por exemplo , se o usuário selecionar "Michigan" (na taxonomia chamada "thestate"), a página será atualizada automaticamente e, na próxima lista suspensa, na taxonomia chamada "thetown", Eu tenho apenas as cidades "Detroit", "Grand Rapids", "Warren".

Se o usuário mudar de idéia e selecionar "Texas", a página será atualizada automaticamente e, na próxima lista suspensa, na taxonomia chamada "thetown", tenho apenas as cidades "Houston", "San Antonio", " Dallas ".

Espero que minha explicação faça sentido! Você consegue pensar em uma lógica pela qual eu possa realizar isso?

Atenciosamente, Gabriela

    
por Gabriela 24.04.2012 / 21:44

1 resposta

4

Por que não fazer os termos de cidades de cada estado? A taxonomia pode ser a localização:

Veja O q detalhado de MikeSchinkel e a respeito de taxonomias hierárquicas .

Umasoluçãomaiselegantedoqueatualizarapáginanoestadoselecionadoseriacarregarostermosfilhos"thetown" usando ajax e o get_term_children ou a consulta personalizada $ wpdb descrita abaixo.

Passe o estado selecionado usando jQuery para sua função PHP de back-end que percorre uma matriz de termos-filhos para construir sua segunda lista suspensa.

Aqui está um exemplo rápido usando uma consulta personalizada $ wpdb:

Função de back-end do PHP:

add_action( 'wp_ajax_nopriv_get_child', 'ajax_get_children' );

function ajax_get_children() {
        global $wpdb;
        $parent = $_POST['parent'];
        $child_string = "";
        $results = $wpdb->get_results ( "SELECT t.term_id, t.name FROM $wpdb->term_taxonomy tt, $wpdb->terms t, $wpdb->term_taxonomy tt2 WHERE tt.parent = $parent AND tt.taxonomy = 'category' AND t.term_id = tt.term_id AND tt2.parent = tt.term_id GROUP BY t.term_id, t.name HAVING COUNT(*) > 0 ORDER BY t.term_order ASC" );
        foreach ( $results as $row ) {
            $child_string = $child_string . "<option value='$row->term_id'>$row->name</option>";
        }
        echo $child_string;

        die(1);

    }

jQuery:

jQuery(document).ready(function() {

    jQuery("#div-id-of-dropdown").select(function(){

        jQuery( "#loading-animation").show();
        var termID = jQuery("#parent-term :selected").val();


        jQuery.ajax({
            type: 'POST',
            url: ajaxurl,
            data: {"action": "get_child", parent: termID },
            success: function(response) {
                jQuery("#empty-div-to-load-child-terms").html(response);
                jQuery("#loading-animation").hide();
                return false;

            }
        });
    });
});

Você terá que modificar o seu html para combinar com o código acima. Quando o estado é selecionado WordPress irá carregar o filho "cidades"

Editar

Esqueci de mencionar que a variável ajaxurl no jQuery não será definida. Leia o usando o AJAX em plug-ins para obter o método junto com outras informações úteis.

    
por Chris_O 03.05.2012 / 07:50