Conversation
supportFor anyone else that is seeing a bug where Listings aren’t being deleted/trashed in WordPress when they are expired on the IDX side, I wrote a little tool that shows you all of the expired listings in your Listings post type: /** * Adding expired listings page */ function pp_idx_admin_page() { add_submenu_page( 'edit.php?post_type=listing', 'Expired Listings', 'Expired Listings', 'manage_options', 'expired_listings', 'pp_expired_listings_view' ); } add_action( 'admin_menu', 'pp_idx_admin_page' ); /** * Creates the view for the expired listings page */ function pp_expired_listings_view() { $nonce = isset( $_POST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ) : false; $expired_request = wp_verify_nonce( $nonce, 'mls-expired-nonce' ) ? $_POST : false; // Retrieve applicable query parameters. $mls_base_url = isset( $expired_request['mls_base_url'] ) ? sanitize_text_field( $expired_request['mls_base_url'] ) : null; if ( $mls_base_url ) { update_option( 'mls_base_url', $mls_base_url ); } else { $mls_base_url = get_option( 'mls_base_url' ); } ?> <div class="wrap"> <h1>Expired Listings</h1> <p>Warning: This does check for a 404 on the mls url so it might take a bit to run. Don't run this excessively.</p> <p>You can use the Edit button in the Result to Trash the listing.</p> <form method="post"> <label for="mls_base_url">MLS Base URL</label> <input type="hidden" name="_wpnonce" value="<?php echo esc_attr( wp_create_nonce( 'mls-expired-nonce' ) ); ?>"> <input type="text" required name="mls_base_url" id="mls_base_url" value="<?php echo esc_url( $mls_base_url ); ?>" placeholder="https://mls.myagency.com" class="regular-text"> <input type="submit" name="submit" value="Check Expired Listings" class="button button-primary"> <?php if ( isset( $_POST['mls_base_url'] ) ) { $args = array( 'post_type' => 'listing', 'posts_per_page' => -1, ); $all_listings = get_posts( $args ); $mls_urls = array(); foreach ( $all_listings as $listing ) { $mls = get_post_meta( $listing->ID, '_listing_mls', true ); array_push( $mls_urls, array( 'url' => "$mls_base_url/idx/moreinfo/b232/$mls", 'type' => 'GET', ), ); } $requests = Requests::request_multiple( $mls_urls ); $has_expired = false; foreach ( $requests as $key => $request ) { if ( ! property_exists( $request, 'status_code' ) ) { continue; } if ( 404 === $request->status_code ) { $has_expired = true; $expired_listing = $all_listings[ $key ]; ?> <p> <a href="<?php the_permalink( $expired_listing->ID ); ?>"> <?php echo esc_html( $expired_listing->post_title ); ?> </a> | <a href="<?php echo esc_url( get_edit_post_link( $expired_listing->ID ) ); ?>"> Edit </a> | <a href="<?php echo esc_url( $mls_urls[ $key ]['url'] ); ?>"> MLS Page </a> </p> <?php } } if ( ! $has_expired ) { echo '<p>No expired listings found.</p>'; } } ?> </form> </div> <?php } ?> You can either put this code in a new plugin or in your functions.php file. This is pretty rough, so use at your own risk, but wanted to share my workaround for others that ran into this issue.
No comments were stored for this source.