使用自定义发布类型预填充重力表单域

时间:2015-07-23 作者:chriswhiteley

我正在使用Gravity表单在表单上创建几个复选框部分,每个部分都预先填充了自定义帖子类型中的特定分类术语。

我在Gravity Forms网站上找到了一个这样做的示例:https://www.gravityhelp.com/documentation/article/dynamically-populating-drop-down-fields/ 并将其修改为复选框并显示帖子缩略图,但该示例仅适用于单个复选框。

我知道如何对所有站点分类法执行此操作的唯一方法是复制/粘贴函数并进行修改。这会导致函数膨胀。php文件。我想可能有一种方法可以为每个分类术语执行“foreach”循环,但我不擅长foreach循环,也不知道如何构建它。

这是我为分类术语的每个实例复制/粘贴的代码示例:

add_filter( \'gform_pre_render_3\', \'list_diesel_heater\' );
add_filter( \'gform_pre_validation_3\', \'list_diesel_heater\' );
add_filter( \'gform_pre_submission_filter_3\', \'list_diesel_heater\' );
add_filter( \'gform_admin_pre_render_3\', \'list_diesel_heater\' );
function list_diesel_heater( $form ) {

foreach ( $form[\'fields\'] as &$field ) {

    if ( $field->type != \'checkbox\' || strpos( $field->cssClass, \'diesel-heater\' ) === false ) {
        continue;
    }

    $posts = get_posts( \'numberposts=-1&post_type=product&product_cat=diesel-heaters\' );

    $choices = array();

    foreach ( $posts as $post ) {
        $thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'thumbnail\' );
        $url = $thumb[\'0\'];
        $choices[] = array( \'text\' => \'<img src="\' . $url . \'"><p>\'. $post->post_title .\'</p>\', \'value\' => $post->post_title );
    }

    $field->placeholder = \'Select a Post\';
    $field->choices = $choices;
}
return $form;
}
我希望在函数中有一个foreach循环,并用分类术语替换“diesel heater”的实例。我不擅长foreach循环,希望有人能提供一些指导。

1 个回复
SO网友:Adam

在您的foreach 语句您都试图获取和分配非对象的属性,本质上$field 变量实际上不是对象,而是数组。我不知道Gravity表单网站上的示例代码为什么使用对象表示法,可能底层API已经更改了。

无论如何,您需要的是:

add_filter( \'gform_pre_render_3\', \'list_diesel_heater\' );
add_filter( \'gform_pre_validation_3\', \'list_diesel_heater\' );
add_filter( \'gform_pre_submission_filter_3\', \'list_diesel_heater\' );
add_filter( \'gform_admin_pre_render_3\', \'list_diesel_heater\' );
function list_diesel_heater( $form ) {

    foreach ( $form[\'fields\'] as &$field ) {

        if ( $field[\'type\'] != \'checkbox\' ) {
            continue;
        }

        $posts = get_posts( \'numberposts=-1&post_type=product&product_cat=clothing\' );

        $choices = array();

        foreach ( $posts as $post ) {
            $thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'thumbnail\' );
            $choices[] = array( \'text\' => \'<img src="\' . $thumb[\'0\'] . \'"><p>\'. $post->post_title .\'</p>\', \'value\' => $post->post_title );
        }

        $field[\'placeholder\'] = \'Select a Post\';
        $field[\'choices\'] = $choices;

    }

    return $form;

}
我已经更改了product_cat 并删除了第一个条件中的第二条语句,以便使用WooCommerce虚拟数据XML文件在我的WooCommerce开发环境中测试此代码,因此您需要将内容更改回您的规范。

以下是输出示例:

enter image description here

You will need to style the output yourself accordingly

结束

相关推荐