: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
namespace StringLocator\REST;
use StringLocator\Base\REST;
use StringLocator\Directory_Iterator;
use StringLocator\String_Locator;
class Directory_Structure extends REST {
protected $rest_base = 'get-directory-structure';
public function __construct() {
public function register_rest_route() {
'callback' => array( $this, 'get_structure' ),
'permission_callback' => array( $this, 'permission_callback' ),
public function permission_callback() {
return current_user_can( String_Locator::$search_capability );
public function get_structure( \WP_REST_Request $request ) {
$short_circuit = apply_filters( 'string_locator_directory_iterator_short_circuit', array(), $request );
if ( ! empty( $short_circuit ) ) {
$data = json_decode( $request->get_param( 'data' ) );
$directory = $data->directory;
// Validate the search path to avoid unintended directory traversal.
if ( 0 !== validate_file( $directory ) ) {
return new \WP_REST_Response(
'data' => __( 'Invalid search source provided.', 'string-locator' ),
$iterator = new Directory_Iterator(
'data' => $iterator->get_structure(),
new Directory_Structure();