基于从另一个自定义分类中选择的项目显示WordPress自定义分类项目

时间:2012-04-24 作者:Gabriela

让我解释一下我正在处理的问题:

我有2个自定义分类法。一个名为“thestate”,另一个名为“thetown”。

在“thestate“我在中列出了美国所有的州”thetown“我列出了美国的主要城镇。

对于每个分类法,我都会在下拉列表中显示它们的项

你明白我的意思吗D我需要能够根据分类法“thestate”中选择的状态在“thetown”中显示项目

For example, 如果用户选择“Michigan”(在分类法中称为“thestate”),页面会自动刷新,在下一个下拉列表中,在分类法中称为“thetown”,我只有城市“Detroit”、“Grand Rapids”、“Warren”。

如果用户随后改变主意并选择“德克萨斯”,页面将自动刷新,在下一个下拉列表中,在名为“thetown”的分类中,我只有城市“休斯顿”、“圣安东尼奥”、“达拉斯”。

希望我的解释有意义!你能想出一个逻辑来完成这个任务吗?

向你问好,加布里埃拉

1 个回复
最合适的回答,由SO网友:Chris_O 整理而成

为什么不让城镇成为每个州的孩子呢?分类法可以是位置:

请参见MikeSchinkel\'s detailed q and a regarding hierarchal taxonomies.

enter image description here

一个比根据所选状态刷新页面更优雅的解决方案是使用ajax和get_term_children 函数或下面概述的自定义$wpdb查询。

将使用jQuery选择的状态传递给后端PHP函数,该函数循环遍历子项数组以构建第二个下拉列表。

下面是一个使用自定义$wpdb查询的快速示例:

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;

            }
        });
    });
});
您必须修改html以匹配上述代码。选择状态后,WordPress将加载子“towns”

Edit忘了提到jQuery中的ajaxurl变量将不会被定义。阅读using AJAX in plugins 获取方法以及其他有用信息。

结束

相关推荐

Invalid Taxonomy

因此,我注册了一个自定义帖子类型以及该帖子类型的分类法。然后,我在该分类法中创建了两个项目,但当我单击其中任何一个时,发现它们是无效的分类法。下面是我用来创建自定义帖子类型+分类法的代码。我有一个插件。class GW_Guides_Post_Type { public function __construct() { $this->register_post_type(); $this->metaboxes();