jreviews:listing_form.custom_fields
Filters the collection of custom fields displayed in the listing submission/edit form, allowing add-ons to show or hide specific fields based on custom logic (e.g., pricing plans, user roles, listing state).
You need to have a working knowledge of Hooks before you get started.
Fires when building listing form, after permission-based field filtering, before per-field hooks
Parameters
| Name | Type | Description |
|---|---|---|
$fields |
\FWD\Illuminate\Support\Collection |
Collection of Field models to be displayed |
$listing |
\JReviews\App\Models\Listing |
The listing being created or edited |
Boilerplate Code
Use the boilerplate code to start using the filter, and add your own logic to modify the first argument and return it.
fwd_add_filter('jreviews:listing_form.custom_fields', function($fields, $listing)
{
// Your code here
return $fields;
}, 20, 2);
The , 20, N after your callback are the hook priority and the number of arguments your callback accepts. By default, a hook passes your callback only its first argument; for a filter, that is the value being filtered, so a simple function($value) { ... } needs nothing extra. If your callback declares more parameters, such as function($value, $listing) { ... }, you must add N (the parameter count, 2 here). Because N is the fourth argument to fwd_add_filter() or fwd_add_action(), you must also pass the priority (20 is the default). Leaving these off when your callback expects extra parameters causes a Too few arguments to function ... fatal error.
Examples
Collect a field only on new submissions
Drop a one-time field (e.g. a referral code) once the listing already exists, so it's only collected at creation time.
fwd_add_filter('jreviews:listing_form.custom_fields', function($fields, $listing) {
if ($listing->exists) {
$fields = $fields->reject(fn($field) => $field->name === 'jr_referral_code');
}
return $fields;
}, 20, 2);
Limit Fields for Guest Users
Show only basic fields to guest users during listing creation.
fwd_add_filter('jreviews:listing_form.custom_fields', function($fields, $listing)
{
$user = fwd_auth()->user();
if ($user->isGuest()) {
// Only allow these basic fields for guests
$allowedFields = ['jr_name', 'jr_email', 'jr_phone'];
$fields = $fields->filter(function($field) use ($allowedFields) {
return in_array($field->name, $allowedFields);
});
}
return $fields;
}, 20, 2);
Source Files
app/Http/Site/Yoyo/Listing/AbstractForm.php