The Classifieds API lets you programmatically create, search, update, and manage classified listings, inquiries, and custom metadata. Use it to build custom classified workflows, integrate with external listing services, or extend the marketplace with additional fields.
Managing Classifieds
All classified operations go through the Classified_Manager singleton:
use WBAM_Pro\Modules\Classifieds\Classified_Manager;
$manager = Classified_Manager::get_instance();
// Create classified
$classified_id = $manager->create( array(
'title' => 'iPhone 14 Pro for Sale',
'description' => 'Excellent condition...',
'advertiser_id' => $advertiser_id,
'category' => array( 10, 15 ), // Term IDs
'location' => array( 5 ), // Term IDs
'price' => 799.00,
'price_type' => 'fixed', // fixed, negotiable, contact, free
'contact_method' => 'form',
'contact_email' => 'seller@example.com',
'images' => array( 100, 101, 102 ), // Attachment IDs
'duration_days' => 30,
) );
// Get classified
$classified = $manager->get( $classified_id );
// Update classified
$manager->update( $classified_id, array(
'price' => 749.00,
) );
// Bump classified
$manager->bump( $classified_id );
// Mark as sold
$manager->mark_sold( $classified_id );
// Renew listing
$manager->renew( $classified_id, 30 ); // days
Searching Classifieds
$results = $manager->search( array(
'keyword' => 'iphone',
'category' => 10,
'location' => 5,
'price_min' => 100,
'price_max' => 1000,
'sort' => 'newest', // newest, price_low, price_high
'per_page' => 20,
'page' => 1,
) );
Managing Inquiries
// Submit inquiry
$inquiry_id = $manager->submit_inquiry( $classified_id, array(
'name' => 'Jane Buyer',
'email' => 'jane@example.com',
'phone' => '555-9876',
'message' => 'Is this still available?',
) );
// Get inquiries for classified
$inquiries = $manager->get_inquiries( $classified_id );
// Get inquiries for advertiser
$inquiries = $manager->get_advertiser_inquiries( $advertiser_id );
// Mark as replied
$manager->mark_inquiry_replied( $inquiry_id );
Classified Meta Table
Custom classified data is stored in the wbam_classified_meta table (added in DB 2.8.0). The Classified model provides a meta API that mirrors WordPress *_post_meta() functions:
$classified = new \WBAM_Pro\Modules\Classifieds\Classified( $id );
// Add meta (use $unique = true to prevent duplicates)
$classified->add_meta( 'color', 'red' );
$classified->add_meta( 'vin', '123ABC', true );
// Get meta (single value by default, pass false for all values)
$classified->get_meta( 'color' ); // 'red'
$classified->get_meta( 'color', false ); // array( 'red' )
$classified->get_meta(); // array of all meta
// Update meta (auto-creates if key doesn't exist)
$classified->update_meta( 'color', 'blue' );
// Delete meta (optionally match a specific value)
$classified->delete_meta( 'color' ); // delete all 'color' rows
$classified->delete_meta( 'color', 'blue' ); // delete only matching value
Meta rows are automatically deleted when a classified is deleted (both via Classified::delete() and cascade_delete_classified_data()).
Code Example: Custom Classified Fields
// Add custom field to classified form
add_action( 'wbam_pro_classified_form_after_price', function( $classified_id ) {
$classified = new \WBAM_Pro\Modules\Classifieds\Classified( $classified_id );
$warranty = $classified->get_meta( 'warranty_months' );
?>
<div class="wbam-field">
<label for="warranty_months"><?php esc_html_e( 'Warranty (months)', 'my-plugin' ); ?></label>
<input type="number" id="warranty_months" name="warranty_months"
value="<?php echo esc_attr( $warranty ); ?>" min="0" max="60">
</div>
<?php
} );
// Save custom field
add_action( 'wbam_pro_classified_saved', function( $classified_id, $data ) {
if ( isset( $_POST['warranty_months'] ) ) {
$classified = new \WBAM_Pro\Modules\Classifieds\Classified( $classified_id );
$classified->update_meta( 'warranty_months', absint( $_POST['warranty_months'] ) );
}
}, 10, 2 );
// Display in listing
add_filter( 'wbam_pro_classified_output', function( $output, $classified_id, $args ) {
$classified = new \WBAM_Pro\Modules\Classifieds\Classified( $classified_id );
$warranty = $classified->get_meta( 'warranty_months' );
if ( $warranty ) {
$warranty_html = sprintf(
'<div class="classified-warranty">%s: %d %s</div>',
esc_html__( 'Warranty', 'my-plugin' ),
$warranty,
esc_html__( 'months', 'my-plugin' )
);
$output = str_replace(
'</div><!-- .classified-meta -->',
$warranty_html . '</div><!-- .classified-meta -->',
$output
);
}
return $output;
}, 10, 3 );
