Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-inclu.../rest-api/endpoint...
File: class-wp-rest-menus-controller.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* REST API: WP_REST_Menus_Controller class
[2] Fix | Delete
*
[3] Fix | Delete
* @package WordPress
[4] Fix | Delete
* @subpackage REST_API
[5] Fix | Delete
* @since 5.9.0
[6] Fix | Delete
*/
[7] Fix | Delete
[8] Fix | Delete
/**
[9] Fix | Delete
* Core class used to managed menu terms associated via the REST API.
[10] Fix | Delete
*
[11] Fix | Delete
* @since 5.9.0
[12] Fix | Delete
*
[13] Fix | Delete
* @see WP_REST_Controller
[14] Fix | Delete
*/
[15] Fix | Delete
class WP_REST_Menus_Controller extends WP_REST_Terms_Controller {
[16] Fix | Delete
[17] Fix | Delete
/**
[18] Fix | Delete
* Checks if a request has access to read menus.
[19] Fix | Delete
*
[20] Fix | Delete
* @since 5.9.0
[21] Fix | Delete
*
[22] Fix | Delete
* @param WP_REST_Request $request Full details about the request.
[23] Fix | Delete
* @return bool|WP_Error True if the request has read access, otherwise false or WP_Error object.
[24] Fix | Delete
*/
[25] Fix | Delete
public function get_items_permissions_check( $request ) {
[26] Fix | Delete
$has_permission = parent::get_items_permissions_check( $request );
[27] Fix | Delete
[28] Fix | Delete
if ( true !== $has_permission ) {
[29] Fix | Delete
return $has_permission;
[30] Fix | Delete
}
[31] Fix | Delete
[32] Fix | Delete
return $this->check_has_read_only_access( $request );
[33] Fix | Delete
}
[34] Fix | Delete
[35] Fix | Delete
/**
[36] Fix | Delete
* Checks if a request has access to read or edit the specified menu.
[37] Fix | Delete
*
[38] Fix | Delete
* @since 5.9.0
[39] Fix | Delete
*
[40] Fix | Delete
* @param WP_REST_Request $request Full details about the request.
[41] Fix | Delete
* @return true|WP_Error True if the request has read access for the item, otherwise WP_Error object.
[42] Fix | Delete
*/
[43] Fix | Delete
public function get_item_permissions_check( $request ) {
[44] Fix | Delete
$has_permission = parent::get_item_permissions_check( $request );
[45] Fix | Delete
[46] Fix | Delete
if ( true !== $has_permission ) {
[47] Fix | Delete
return $has_permission;
[48] Fix | Delete
}
[49] Fix | Delete
[50] Fix | Delete
return $this->check_has_read_only_access( $request );
[51] Fix | Delete
}
[52] Fix | Delete
[53] Fix | Delete
/**
[54] Fix | Delete
* Gets the term, if the ID is valid.
[55] Fix | Delete
*
[56] Fix | Delete
* @since 5.9.0
[57] Fix | Delete
*
[58] Fix | Delete
* @param int $id Supplied ID.
[59] Fix | Delete
* @return WP_Term|WP_Error Term object if ID is valid, WP_Error otherwise.
[60] Fix | Delete
*/
[61] Fix | Delete
protected function get_term( $id ) {
[62] Fix | Delete
$term = parent::get_term( $id );
[63] Fix | Delete
[64] Fix | Delete
if ( is_wp_error( $term ) ) {
[65] Fix | Delete
return $term;
[66] Fix | Delete
}
[67] Fix | Delete
[68] Fix | Delete
$nav_term = wp_get_nav_menu_object( $term );
[69] Fix | Delete
$nav_term->auto_add = $this->get_menu_auto_add( $nav_term->term_id );
[70] Fix | Delete
[71] Fix | Delete
return $nav_term;
[72] Fix | Delete
}
[73] Fix | Delete
[74] Fix | Delete
/**
[75] Fix | Delete
* Checks whether the current user has read permission for the endpoint.
[76] Fix | Delete
*
[77] Fix | Delete
* This allows for any user that can `edit_theme_options` or edit any REST API available post type.
[78] Fix | Delete
*
[79] Fix | Delete
* @since 5.9.0
[80] Fix | Delete
*
[81] Fix | Delete
* @param WP_REST_Request $request Full details about the request.
[82] Fix | Delete
* @return true|WP_Error True if the current user has permission, WP_Error object otherwise.
[83] Fix | Delete
*/
[84] Fix | Delete
protected function check_has_read_only_access( $request ) {
[85] Fix | Delete
if ( current_user_can( 'edit_theme_options' ) ) {
[86] Fix | Delete
return true;
[87] Fix | Delete
}
[88] Fix | Delete
[89] Fix | Delete
if ( current_user_can( 'edit_posts' ) ) {
[90] Fix | Delete
return true;
[91] Fix | Delete
}
[92] Fix | Delete
[93] Fix | Delete
foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
[94] Fix | Delete
if ( current_user_can( $post_type->cap->edit_posts ) ) {
[95] Fix | Delete
return true;
[96] Fix | Delete
}
[97] Fix | Delete
}
[98] Fix | Delete
[99] Fix | Delete
return new WP_Error(
[100] Fix | Delete
'rest_cannot_view',
[101] Fix | Delete
__( 'Sorry, you are not allowed to view menus.' ),
[102] Fix | Delete
array( 'status' => rest_authorization_required_code() )
[103] Fix | Delete
);
[104] Fix | Delete
}
[105] Fix | Delete
[106] Fix | Delete
/**
[107] Fix | Delete
* Prepares a single term output for response.
[108] Fix | Delete
*
[109] Fix | Delete
* @since 5.9.0
[110] Fix | Delete
*
[111] Fix | Delete
* @param WP_Term $term Term object.
[112] Fix | Delete
* @param WP_REST_Request $request Request object.
[113] Fix | Delete
* @return WP_REST_Response Response object.
[114] Fix | Delete
*/
[115] Fix | Delete
public function prepare_item_for_response( $term, $request ) {
[116] Fix | Delete
$nav_menu = wp_get_nav_menu_object( $term );
[117] Fix | Delete
$response = parent::prepare_item_for_response( $nav_menu, $request );
[118] Fix | Delete
[119] Fix | Delete
$fields = $this->get_fields_for_response( $request );
[120] Fix | Delete
$data = $response->get_data();
[121] Fix | Delete
[122] Fix | Delete
if ( rest_is_field_included( 'locations', $fields ) ) {
[123] Fix | Delete
$data['locations'] = $this->get_menu_locations( $nav_menu->term_id );
[124] Fix | Delete
}
[125] Fix | Delete
[126] Fix | Delete
if ( rest_is_field_included( 'auto_add', $fields ) ) {
[127] Fix | Delete
$data['auto_add'] = $this->get_menu_auto_add( $nav_menu->term_id );
[128] Fix | Delete
}
[129] Fix | Delete
[130] Fix | Delete
$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
[131] Fix | Delete
$data = $this->add_additional_fields_to_object( $data, $request );
[132] Fix | Delete
$data = $this->filter_response_by_context( $data, $context );
[133] Fix | Delete
[134] Fix | Delete
$response = rest_ensure_response( $data );
[135] Fix | Delete
[136] Fix | Delete
if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
[137] Fix | Delete
$response->add_links( $this->prepare_links( $term ) );
[138] Fix | Delete
}
[139] Fix | Delete
[140] Fix | Delete
/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
[141] Fix | Delete
return apply_filters( "rest_prepare_{$this->taxonomy}", $response, $term, $request );
[142] Fix | Delete
}
[143] Fix | Delete
[144] Fix | Delete
/**
[145] Fix | Delete
* Prepares links for the request.
[146] Fix | Delete
*
[147] Fix | Delete
* @since 5.9.0
[148] Fix | Delete
*
[149] Fix | Delete
* @param WP_Term $term Term object.
[150] Fix | Delete
* @return array Links for the given term.
[151] Fix | Delete
*/
[152] Fix | Delete
protected function prepare_links( $term ) {
[153] Fix | Delete
$links = parent::prepare_links( $term );
[154] Fix | Delete
[155] Fix | Delete
$locations = $this->get_menu_locations( $term->term_id );
[156] Fix | Delete
foreach ( $locations as $location ) {
[157] Fix | Delete
$url = rest_url( sprintf( 'wp/v2/menu-locations/%s', $location ) );
[158] Fix | Delete
[159] Fix | Delete
$links['https://api.w.org/menu-location'][] = array(
[160] Fix | Delete
'href' => $url,
[161] Fix | Delete
'embeddable' => true,
[162] Fix | Delete
);
[163] Fix | Delete
}
[164] Fix | Delete
[165] Fix | Delete
return $links;
[166] Fix | Delete
}
[167] Fix | Delete
[168] Fix | Delete
/**
[169] Fix | Delete
* Prepares a single term for create or update.
[170] Fix | Delete
*
[171] Fix | Delete
* @since 5.9.0
[172] Fix | Delete
*
[173] Fix | Delete
* @param WP_REST_Request $request Request object.
[174] Fix | Delete
* @return object Prepared term data.
[175] Fix | Delete
*/
[176] Fix | Delete
public function prepare_item_for_database( $request ) {
[177] Fix | Delete
$prepared_term = parent::prepare_item_for_database( $request );
[178] Fix | Delete
[179] Fix | Delete
$schema = $this->get_item_schema();
[180] Fix | Delete
[181] Fix | Delete
if ( isset( $request['name'] ) && ! empty( $schema['properties']['name'] ) ) {
[182] Fix | Delete
$prepared_term->{'menu-name'} = $request['name'];
[183] Fix | Delete
}
[184] Fix | Delete
[185] Fix | Delete
return $prepared_term;
[186] Fix | Delete
}
[187] Fix | Delete
[188] Fix | Delete
/**
[189] Fix | Delete
* Creates a single term in a taxonomy.
[190] Fix | Delete
*
[191] Fix | Delete
* @since 5.9.0
[192] Fix | Delete
*
[193] Fix | Delete
* @param WP_REST_Request $request Full details about the request.
[194] Fix | Delete
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
[195] Fix | Delete
*/
[196] Fix | Delete
public function create_item( $request ) {
[197] Fix | Delete
if ( isset( $request['parent'] ) ) {
[198] Fix | Delete
if ( ! is_taxonomy_hierarchical( $this->taxonomy ) ) {
[199] Fix | Delete
return new WP_Error( 'rest_taxonomy_not_hierarchical', __( 'Cannot set parent term, taxonomy is not hierarchical.' ), array( 'status' => 400 ) );
[200] Fix | Delete
}
[201] Fix | Delete
[202] Fix | Delete
$parent = wp_get_nav_menu_object( (int) $request['parent'] );
[203] Fix | Delete
[204] Fix | Delete
if ( ! $parent ) {
[205] Fix | Delete
return new WP_Error( 'rest_term_invalid', __( 'Parent term does not exist.' ), array( 'status' => 400 ) );
[206] Fix | Delete
}
[207] Fix | Delete
}
[208] Fix | Delete
[209] Fix | Delete
$prepared_term = $this->prepare_item_for_database( $request );
[210] Fix | Delete
[211] Fix | Delete
$term = wp_update_nav_menu_object( 0, wp_slash( (array) $prepared_term ) );
[212] Fix | Delete
[213] Fix | Delete
if ( is_wp_error( $term ) ) {
[214] Fix | Delete
/*
[215] Fix | Delete
* If we're going to inform the client that the term already exists,
[216] Fix | Delete
* give them the identifier for future use.
[217] Fix | Delete
*/
[218] Fix | Delete
[219] Fix | Delete
if ( in_array( 'menu_exists', $term->get_error_codes(), true ) ) {
[220] Fix | Delete
$existing_term = get_term_by( 'name', $prepared_term->{'menu-name'}, $this->taxonomy );
[221] Fix | Delete
$term->add_data( $existing_term->term_id, 'menu_exists' );
[222] Fix | Delete
$term->add_data(
[223] Fix | Delete
array(
[224] Fix | Delete
'status' => 400,
[225] Fix | Delete
'term_id' => $existing_term->term_id,
[226] Fix | Delete
)
[227] Fix | Delete
);
[228] Fix | Delete
} else {
[229] Fix | Delete
$term->add_data( array( 'status' => 400 ) );
[230] Fix | Delete
}
[231] Fix | Delete
[232] Fix | Delete
return $term;
[233] Fix | Delete
}
[234] Fix | Delete
[235] Fix | Delete
$term = $this->get_term( $term );
[236] Fix | Delete
[237] Fix | Delete
/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
[238] Fix | Delete
do_action( "rest_insert_{$this->taxonomy}", $term, $request, true );
[239] Fix | Delete
[240] Fix | Delete
$schema = $this->get_item_schema();
[241] Fix | Delete
if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
[242] Fix | Delete
$meta_update = $this->meta->update_value( $request['meta'], $term->term_id );
[243] Fix | Delete
[244] Fix | Delete
if ( is_wp_error( $meta_update ) ) {
[245] Fix | Delete
return $meta_update;
[246] Fix | Delete
}
[247] Fix | Delete
}
[248] Fix | Delete
[249] Fix | Delete
$locations_update = $this->handle_locations( $term->term_id, $request );
[250] Fix | Delete
[251] Fix | Delete
if ( is_wp_error( $locations_update ) ) {
[252] Fix | Delete
return $locations_update;
[253] Fix | Delete
}
[254] Fix | Delete
[255] Fix | Delete
$this->handle_auto_add( $term->term_id, $request );
[256] Fix | Delete
[257] Fix | Delete
$fields_update = $this->update_additional_fields_for_object( $term, $request );
[258] Fix | Delete
[259] Fix | Delete
if ( is_wp_error( $fields_update ) ) {
[260] Fix | Delete
return $fields_update;
[261] Fix | Delete
}
[262] Fix | Delete
[263] Fix | Delete
$request->set_param( 'context', 'view' );
[264] Fix | Delete
[265] Fix | Delete
/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
[266] Fix | Delete
do_action( "rest_after_insert_{$this->taxonomy}", $term, $request, true );
[267] Fix | Delete
[268] Fix | Delete
$response = $this->prepare_item_for_response( $term, $request );
[269] Fix | Delete
$response = rest_ensure_response( $response );
[270] Fix | Delete
[271] Fix | Delete
$response->set_status( 201 );
[272] Fix | Delete
$response->header( 'Location', rest_url( $this->namespace . '/' . $this->rest_base . '/' . $term->term_id ) );
[273] Fix | Delete
[274] Fix | Delete
return $response;
[275] Fix | Delete
}
[276] Fix | Delete
[277] Fix | Delete
/**
[278] Fix | Delete
* Updates a single term from a taxonomy.
[279] Fix | Delete
*
[280] Fix | Delete
* @since 5.9.0
[281] Fix | Delete
*
[282] Fix | Delete
* @param WP_REST_Request $request Full details about the request.
[283] Fix | Delete
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
[284] Fix | Delete
*/
[285] Fix | Delete
public function update_item( $request ) {
[286] Fix | Delete
$term = $this->get_term( $request['id'] );
[287] Fix | Delete
if ( is_wp_error( $term ) ) {
[288] Fix | Delete
return $term;
[289] Fix | Delete
}
[290] Fix | Delete
[291] Fix | Delete
if ( isset( $request['parent'] ) ) {
[292] Fix | Delete
if ( ! is_taxonomy_hierarchical( $this->taxonomy ) ) {
[293] Fix | Delete
return new WP_Error( 'rest_taxonomy_not_hierarchical', __( 'Cannot set parent term, taxonomy is not hierarchical.' ), array( 'status' => 400 ) );
[294] Fix | Delete
}
[295] Fix | Delete
[296] Fix | Delete
$parent = get_term( (int) $request['parent'], $this->taxonomy );
[297] Fix | Delete
[298] Fix | Delete
if ( ! $parent ) {
[299] Fix | Delete
return new WP_Error( 'rest_term_invalid', __( 'Parent term does not exist.' ), array( 'status' => 400 ) );
[300] Fix | Delete
}
[301] Fix | Delete
}
[302] Fix | Delete
[303] Fix | Delete
$prepared_term = $this->prepare_item_for_database( $request );
[304] Fix | Delete
[305] Fix | Delete
// Only update the term if we have something to update.
[306] Fix | Delete
if ( ! empty( $prepared_term ) ) {
[307] Fix | Delete
if ( ! isset( $prepared_term->{'menu-name'} ) ) {
[308] Fix | Delete
// wp_update_nav_menu_object() requires that the menu-name is always passed.
[309] Fix | Delete
$prepared_term->{'menu-name'} = $term->name;
[310] Fix | Delete
}
[311] Fix | Delete
[312] Fix | Delete
$update = wp_update_nav_menu_object( $term->term_id, wp_slash( (array) $prepared_term ) );
[313] Fix | Delete
[314] Fix | Delete
if ( is_wp_error( $update ) ) {
[315] Fix | Delete
return $update;
[316] Fix | Delete
}
[317] Fix | Delete
}
[318] Fix | Delete
[319] Fix | Delete
$term = get_term( $term->term_id, $this->taxonomy );
[320] Fix | Delete
[321] Fix | Delete
/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
[322] Fix | Delete
do_action( "rest_insert_{$this->taxonomy}", $term, $request, false );
[323] Fix | Delete
[324] Fix | Delete
$schema = $this->get_item_schema();
[325] Fix | Delete
if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
[326] Fix | Delete
$meta_update = $this->meta->update_value( $request['meta'], $term->term_id );
[327] Fix | Delete
[328] Fix | Delete
if ( is_wp_error( $meta_update ) ) {
[329] Fix | Delete
return $meta_update;
[330] Fix | Delete
}
[331] Fix | Delete
}
[332] Fix | Delete
[333] Fix | Delete
$locations_update = $this->handle_locations( $term->term_id, $request );
[334] Fix | Delete
[335] Fix | Delete
if ( is_wp_error( $locations_update ) ) {
[336] Fix | Delete
return $locations_update;
[337] Fix | Delete
}
[338] Fix | Delete
[339] Fix | Delete
$this->handle_auto_add( $term->term_id, $request );
[340] Fix | Delete
[341] Fix | Delete
$fields_update = $this->update_additional_fields_for_object( $term, $request );
[342] Fix | Delete
[343] Fix | Delete
if ( is_wp_error( $fields_update ) ) {
[344] Fix | Delete
return $fields_update;
[345] Fix | Delete
}
[346] Fix | Delete
[347] Fix | Delete
$request->set_param( 'context', 'view' );
[348] Fix | Delete
[349] Fix | Delete
/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
[350] Fix | Delete
do_action( "rest_after_insert_{$this->taxonomy}", $term, $request, false );
[351] Fix | Delete
[352] Fix | Delete
$response = $this->prepare_item_for_response( $term, $request );
[353] Fix | Delete
[354] Fix | Delete
return rest_ensure_response( $response );
[355] Fix | Delete
}
[356] Fix | Delete
[357] Fix | Delete
/**
[358] Fix | Delete
* Deletes a single term from a taxonomy.
[359] Fix | Delete
*
[360] Fix | Delete
* @since 5.9.0
[361] Fix | Delete
*
[362] Fix | Delete
* @param WP_REST_Request $request Full details about the request.
[363] Fix | Delete
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
[364] Fix | Delete
*/
[365] Fix | Delete
public function delete_item( $request ) {
[366] Fix | Delete
$term = $this->get_term( $request['id'] );
[367] Fix | Delete
if ( is_wp_error( $term ) ) {
[368] Fix | Delete
return $term;
[369] Fix | Delete
}
[370] Fix | Delete
[371] Fix | Delete
// We don't support trashing for terms.
[372] Fix | Delete
if ( ! $request['force'] ) {
[373] Fix | Delete
/* translators: %s: force=true */
[374] Fix | Delete
return new WP_Error( 'rest_trash_not_supported', sprintf( __( "Menus do not support trashing. Set '%s' to delete." ), 'force=true' ), array( 'status' => 501 ) );
[375] Fix | Delete
}
[376] Fix | Delete
[377] Fix | Delete
$request->set_param( 'context', 'view' );
[378] Fix | Delete
[379] Fix | Delete
$previous = $this->prepare_item_for_response( $term, $request );
[380] Fix | Delete
[381] Fix | Delete
$result = wp_delete_nav_menu( $term );
[382] Fix | Delete
[383] Fix | Delete
if ( ! $result || is_wp_error( $result ) ) {
[384] Fix | Delete
return new WP_Error( 'rest_cannot_delete', __( 'The menu cannot be deleted.' ), array( 'status' => 500 ) );
[385] Fix | Delete
}
[386] Fix | Delete
[387] Fix | Delete
$response = new WP_REST_Response();
[388] Fix | Delete
$response->set_data(
[389] Fix | Delete
array(
[390] Fix | Delete
'deleted' => true,
[391] Fix | Delete
'previous' => $previous->get_data(),
[392] Fix | Delete
)
[393] Fix | Delete
);
[394] Fix | Delete
[395] Fix | Delete
/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
[396] Fix | Delete
do_action( "rest_delete_{$this->taxonomy}", $term, $response, $request );
[397] Fix | Delete
[398] Fix | Delete
return $response;
[399] Fix | Delete
}
[400] Fix | Delete
[401] Fix | Delete
/**
[402] Fix | Delete
* Returns the value of a menu's auto_add setting.
[403] Fix | Delete
*
[404] Fix | Delete
* @since 5.9.0
[405] Fix | Delete
*
[406] Fix | Delete
* @param int $menu_id The menu id to query.
[407] Fix | Delete
* @return bool The value of auto_add.
[408] Fix | Delete
*/
[409] Fix | Delete
protected function get_menu_auto_add( $menu_id ) {
[410] Fix | Delete
$nav_menu_option = (array) get_option( 'nav_menu_options', array( 'auto_add' => array() ) );
[411] Fix | Delete
[412] Fix | Delete
return in_array( $menu_id, $nav_menu_option['auto_add'], true );
[413] Fix | Delete
}
[414] Fix | Delete
[415] Fix | Delete
/**
[416] Fix | Delete
* Updates the menu's auto add from a REST request.
[417] Fix | Delete
*
[418] Fix | Delete
* @since 5.9.0
[419] Fix | Delete
*
[420] Fix | Delete
* @param int $menu_id The menu id to update.
[421] Fix | Delete
* @param WP_REST_Request $request Full details about the request.
[422] Fix | Delete
* @return bool True if the auto add setting was successfully updated.
[423] Fix | Delete
*/
[424] Fix | Delete
protected function handle_auto_add( $menu_id, $request ) {
[425] Fix | Delete
if ( ! isset( $request['auto_add'] ) ) {
[426] Fix | Delete
return true;
[427] Fix | Delete
}
[428] Fix | Delete
[429] Fix | Delete
$nav_menu_option = (array) get_option( 'nav_menu_options', array( 'auto_add' => array() ) );
[430] Fix | Delete
[431] Fix | Delete
if ( ! isset( $nav_menu_option['auto_add'] ) ) {
[432] Fix | Delete
$nav_menu_option['auto_add'] = array();
[433] Fix | Delete
}
[434] Fix | Delete
[435] Fix | Delete
$auto_add = $request['auto_add'];
[436] Fix | Delete
[437] Fix | Delete
$i = array_search( $menu_id, $nav_menu_option['auto_add'], true );
[438] Fix | Delete
[439] Fix | Delete
if ( $auto_add && false === $i ) {
[440] Fix | Delete
$nav_menu_option['auto_add'][] = $menu_id;
[441] Fix | Delete
} elseif ( ! $auto_add && false !== $i ) {
[442] Fix | Delete
array_splice( $nav_menu_option['auto_add'], $i, 1 );
[443] Fix | Delete
}
[444] Fix | Delete
[445] Fix | Delete
$update = update_option( 'nav_menu_options', $nav_menu_option );
[446] Fix | Delete
[447] Fix | Delete
/** This action is documented in wp-includes/nav-menu.php */
[448] Fix | Delete
do_action( 'wp_update_nav_menu', $menu_id );
[449] Fix | Delete
[450] Fix | Delete
return $update;
[451] Fix | Delete
}
[452] Fix | Delete
[453] Fix | Delete
/**
[454] Fix | Delete
* Returns the names of the locations assigned to the menu.
[455] Fix | Delete
*
[456] Fix | Delete
* @since 5.9.0
[457] Fix | Delete
*
[458] Fix | Delete
* @param int $menu_id The menu id.
[459] Fix | Delete
* @return string[] The locations assigned to the menu.
[460] Fix | Delete
*/
[461] Fix | Delete
protected function get_menu_locations( $menu_id ) {
[462] Fix | Delete
$locations = get_nav_menu_locations();
[463] Fix | Delete
$menu_locations = array();
[464] Fix | Delete
[465] Fix | Delete
foreach ( $locations as $location => $assigned_menu_id ) {
[466] Fix | Delete
if ( $menu_id === $assigned_menu_id ) {
[467] Fix | Delete
$menu_locations[] = $location;
[468] Fix | Delete
}
[469] Fix | Delete
}
[470] Fix | Delete
[471] Fix | Delete
return $menu_locations;
[472] Fix | Delete
}
[473] Fix | Delete
[474] Fix | Delete
/**
[475] Fix | Delete
* Updates the menu's locations from a REST request.
[476] Fix | Delete
*
[477] Fix | Delete
* @since 5.9.0
[478] Fix | Delete
*
[479] Fix | Delete
* @param int $menu_id The menu id to update.
[480] Fix | Delete
* @param WP_REST_Request $request Full details about the request.
[481] Fix | Delete
* @return true|WP_Error True on success, a WP_Error on an error updating any of the locations.
[482] Fix | Delete
*/
[483] Fix | Delete
protected function handle_locations( $menu_id, $request ) {
[484] Fix | Delete
if ( ! isset( $request['locations'] ) ) {
[485] Fix | Delete
return true;
[486] Fix | Delete
}
[487] Fix | Delete
[488] Fix | Delete
$menu_locations = get_registered_nav_menus();
[489] Fix | Delete
$menu_locations = array_keys( $menu_locations );
[490] Fix | Delete
$new_locations = array();
[491] Fix | Delete
foreach ( $request['locations'] as $location ) {
[492] Fix | Delete
if ( ! in_array( $location, $menu_locations, true ) ) {
[493] Fix | Delete
return new WP_Error(
[494] Fix | Delete
'rest_invalid_menu_location',
[495] Fix | Delete
__( 'Invalid menu location.' ),
[496] Fix | Delete
array(
[497] Fix | Delete
'status' => 400,
[498] Fix | Delete
'location' => $location,
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function