Wordpress自定义用户分类和元数据注册表

时间:2013-07-31 19:58:45

标签: wordpress metadata taxonomy user-registration gravity-forms-plugin

我有很多事情要用来完成我正在尝试做的事情......但简而言之,这就是我正在做的事情:

我创建了自定义用户分类法来表示庆祝活动(纪念日,生日等)当用户注册时(带有重力表单用户注册),他们会检查他们想要参与哪些活动。因此,当表单通过时,它的元数据(Gravity Forms仅处理带有用户注册的元数据)。

我找到了一个脚本,它接收元数据并将其与分类法进行比较,如果匹配,则插入它。问题是,它是为单选按钮表单元素编写的,而不是复选框。它不支持多学期选择。因此,它只会插入一个选项(最后一个选择)。

如何让这个脚本映射到分类中的各个类别(纪念日,生日等),而不是我在Wordpress“周年纪念日”中注册的单一分类。

// Hook Gravity Forms user registration -> Map taxomomy

function map_taxonomy($user_id, $config, $entry, $user_pass) {

    global $wpdb;

// Get all taxonomies
    $taxs = get_taxonomies();

// Get all user meta
    $all_meta_for_user = get_user_meta($user_id);

// Loop through meta data and map to taxonomies with same name as user meta key
    foreach ($all_meta_for_user as $taxonomy => $value ) {

        if (in_array ($taxonomy, $taxs) ) {         // Check if there is a Taxonomy with the same name as the Custom user meta key

        // Get term id
            $term_id = get_user_meta($user_id, $taxonomy, true);
            If (is_numeric($term_id)) {             // Check if Custom user meta is an ID

                Echo $taxonomy.'='.$term_id.'<br>';

            // Add user to taxomomy term
                $term = get_term( $term_id, $taxonomy );
                $termslug = $term->slug;
                wp_set_object_terms( $user_id, array( $termslug ), $taxonomy, false);

            }
        }
    }

}
add_action("gform_user_registered", "map_taxonomy", 10, 4);

(由于我发现支持论坛匿名,我无法联系作者。帖子在这里:http://wordpress.org/support/topic/plugin-gravity-forms-custom-post-types-custom-user-taxonomies

编辑清晰度: 目前,此脚本根据分类法检查元。有没有办法重写它以检查分类学的孩子?

即。我的注册分类学名称是“Dates”,分类为Anniversaries,Birthdays等。 此脚本比较主要注册的“日期”分类。可以修改它来比较分类法的类别,比如“生日”吗?

4 个答案:

答案 0 :(得分:0)

此处的代码不是您需要修改的代码,而是触发此代码的代码。换句话说,如果您在某处接收$ _POST ['data']然后调用此函数,那就是我们需要看到的内容。一般而言,任何要传递多个值的输入都需要声明如下名称:name ='something []' - 括号是告诉表单将​​该字段作为值数组传递的内容。在接收方,您需要解析该数组并执行某些操作。

答案 1 :(得分:0)

我得到了它,这就是我做的......

// Hook Gravity Forms user registration -> Map taxomomy

function map_taxonomy($user_id, $config, $entry, $user_pass) {

    global $wpdb;

// Get terms from taxonomy anniversary
    $terms = get_terms( 'anniversary', array('hide_empty' => 0));
    $termslugs = array();
    foreach( $terms as $term ) {
        $i = $term->slug;
        $termslugs[$i] = $term->slug; 
    }   
    $cats = $termslugs;


// Get all user meta
    $all_meta_for_user = get_user_meta($user_id);

// Loop through meta data and map to categories with same name as user meta key
    foreach ($all_meta_for_user as $category => $value ) {

        if (in_array ($category, $cats) ) {         // Check if there is a category with the same name as the Custom user meta key

        // Get term id
            $term_id = get_user_meta($user_id, $category, true);
            If (is_numeric($term_id)) {             // Check if Custom user meta is an ID

                echo '<p>'.$user_id.' | '.$category.'='.$term_id.'</p>';

            // Add user to taxomomy term
                $taxonomy = 'anniversary';
                $term = get_term( $term_id, $taxonomy );
                $termslug = $term->slug;
                wp_set_object_terms( $user_id, array( $termslug ), $taxonomy, true);

            }
        }
    }

}
add_action("gform_user_registered", "map_taxonomy", 10, 4);

这不是映射分类法,而是映射特定的分类法,并在类似于分类法数组的数组中返回slugs。从那里它将元数据与slugs进行比较,并将term_id插入到父分类中。

现在,只有在2个地方通过名称专门调用您的分类法时,它才有效。我敢肯定比我更聪明的人可以弄清楚如何让它变得更有活力。

但如果其他人需要做同样的事情(如果谷歌搜索是任何迹象,很多人都这样做)将这段代码粘贴在你的wordpress主题的functions.php中 - 我正在使用它与Gravity Form User Registration插件

答案 2 :(得分:0)

用户决定编辑表单的是什么,当前是否会将另一个条目纳入分类中,还是更新一个条目?

答案 3 :(得分:0)

如果您想对用户进行分类,可以尝试使用此WordPress plugin