我正在使用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循环,希望有人能提供一些指导。
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开发环境中测试此代码,因此您需要将内容更改回您的规范。
以下是输出示例:
You will need to style the output yourself accordingly