La classe provient du plugin WP de quelqu'un d'autre et je souhaite adapter l'une des fonctions de cette classe (il y a plus de fonctions).
Le code original (édité):
class some_class {
private function get_section_url() {
$full_url = add_query_arg( 'action', 'action-name', admin_url( 'users.php' ) );
$relative_url = str_replace( get_site_url(), '', $full_url );
return $relative_url;
}
}
Je veux remplacer la fonction ci-dessus par ceci:
function get_section_url() {
$full_url = add_query_arg( 'action', 'action-name', admin_url( 'users.php' ) );
return $full_url;
}
Comment y parvenir? J'ai essayé quelques solutions suggérées ( ici et ici ), mais sans succès .
UPDATE
La fonction d'origine est appelée de cette manière (uniquement à partir de la même classe):
public function parent_file($parent_file) {
global $current_screen, $submenu_file, $typenow;
if ( $current_screen->base == 'users' && request_param( 'action' ) == 'action-name' ) {
$parent_file = 'parent.php';
$submenu_file = $this->get_section_url();
$typenow = 'hide-users-menu';
}
return $parent_file;
}
public function menu() {
global $submenu;
$capability = admin_capability();
if ( current_user_can( $capability ) ) {
$url = $this->get_section_url();
$submenu['parent.php'][] = array( __( 'Menu Item Title' ), $capability, $url );
}
}
si la modification est appelée dans l'action admin_menu
, vous pouvez venir juste après pour corriger le menu avec un code comme celui-ci:
add_action("admin_menu", function () {
$parent_file = 'parent.php';
$full_url = add_query_arg( 'action', 'action-name', admin_url( 'users.php' ) );
global $submenu;
// searching the last submenu
$last = array_pop($submenu[$parent_file]);
// correcting the URL
$last[2] = $full_url;
// replacing in the array
$submenu[$parent_file][] = $last;
}, 20);
// default priority (used by the plugin) is 10, so I choose 20 to be sur that it comes after the plugin