$url, 'ok' => false, 'code' => 0, 'message' => 'Blocked unsafe target', 'blocked' => 1, ]; } $timeout = isset($opts['timeout']) ? (int)$opts['timeout'] : 8; $user_agent = isset($opts['user_agent']) ? (string)$opts['user_agent'] : 'LeExport'; $args = [ 'timeout' => $timeout, 'redirection' => 5, 'user-agent' => $user_agent, // Default to secure behavior; can be overridden via filter if needed. 'sslverify' => true, ]; $args = apply_filters('leexport_http_args', $args, $url, $opts); $res = wp_remote_head($url, $args); if (is_wp_error($res) || (int)wp_remote_retrieve_response_code($res) === 0) { $res = wp_remote_get($url, $args); } if (is_wp_error($res)) { return [ 'url' => $url, 'ok' => false, 'code' => 0, 'message' => $res->get_error_message(), 'blocked' => 0, ]; } $code = (int)wp_remote_retrieve_response_code($res); $msg = (string)wp_remote_retrieve_response_message($res); $ok = $code >= 200 && $code < 400; return [ 'url' => $url, 'ok' => $ok, 'code' => $code, 'message' => $msg, 'blocked' => 0, ]; } /** * @param array $settings leexport_get_settings() * @return array */ public static function scan_site_urls(array $settings): array { $link = isset($settings['link_check']) && is_array($settings['link_check']) ? $settings['link_check'] : []; $max_items = isset($link['max_items']) ? (int)$link['max_items'] : 50; if ($max_items < 1) { $max_items = 1; } if ($max_items > 500) { $max_items = 500; } $post_types = isset($settings['post_types']) && is_array($settings['post_types']) ? array_values($settings['post_types']) : ['post']; $q = new WP_Query(leexport_build_export_query_args($settings, [ 'posts_per_page' => $max_items, 'no_found_rows' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, ])); $opts = [ 'timeout' => isset($link['timeout']) ? (int)$link['timeout'] : 8, 'user_agent' => isset($link['user_agent']) ? (string)$link['user_agent'] : 'LeExport', 'allow_private_targets' => !empty($link['allow_private_targets']) ? 1 : 0, ]; $results = []; foreach ($q->posts as $post) { /** @var WP_Post $post */ $url = (string)get_permalink($post); $check = self::check_url($url, $opts); $results[] = [ 'post_id' => (int)$post->ID, 'post_type' => (string)$post->post_type, 'title' => (string)get_the_title($post), 'url' => $url, 'ok' => (bool)$check['ok'], 'code' => (int)$check['code'], 'message' => (string)$check['message'], ]; } wp_reset_postdata(); return $results; } }