0

我有一大堆东西用来完成我正在尝试做的事情......但简而言之,这就是我正在做的事情:

我创建了自定义用户分类来表示庆祝活动(周年纪念日、生日等)当用户注册时(w/Gravity Forms User Registration),他们会检查他们想要参与的活动。因此,当表单被传递时,它是元数据(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 )

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

IE。我的注册分类名称是“日期”,类别为周年纪念日、生日等。此脚本比较“日期”的主要注册分类。是否可以对其进行修改以比较分类法的类别,例如“生日”?

4

4 回答 4

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);

这不是映射分类法,而是映射特定的分类法,并在一个看起来像分类法数组的数组中返回 slug。从那里它将元数据与 slug 进行比较,并将 term_id 插入到父分类中。

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

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

于 2013-08-02T18:23:33.613 回答
0

用户决定编辑表单的内容是什么,当前是要在分类中添加另一个条目还是更新一个条目?

于 2013-08-07T01:05:33.637 回答
0

如果你想对用户进行分类,你可以试试这个 WordPress插件

于 2014-02-25T17:04:44.397 回答
0

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

于 2013-07-31T21:34:37.363 回答