web-dev-qa-db-fra.com

Comment redéfinir une fonction de plugin encapsulée dans une classe?

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 );
    }
}
1
Iurie Malai

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
1
mmm