web-dev-qa-db-fra.com

Comment rediriger vers une action sur une page personnalisée dans la section admin

Actuellement, je développe (bien au moins essayer;) un plugin qui gérera une galerie d'images personnalisée. Je suis tombé sur un problème cependant. Je vais essayer de l'imaginer.

J'ai créé une page de menu personnalisée sur laquelle je peux modifier les options de la galerie et ajouter/supprimer/modifier des éléments de la galerie. J'ai ajouté un lien à chaque élément de la galerie, donc après avoir choisi "modifier", je pouvais modifier un élément.

function column_rls_name($item) {
  $actions = array(
            'edit'      => sprintf('<a href="?page=%s&action=%s&rls_element=%s">Edit</a>',$_REQUEST['page'],'edit',$item['rls_name']),
        );
  return sprintf('%1$s %2$s', $item['rls_name'], $this->row_actions($actions) );
}

Le problème commence lorsque vous cliquez sur "modifier" sur l'élément. Il devrait rediriger vers la page des paramètres.

Ici j'ai une question. Quelle est la meilleure façon de procéder. Existe-t-il des fonctions auxiliaires/hooks/etc qui aideraient à créer une telle page (et à détecter la redirection).

Bien sûr, je pourrais le faire en fonction d’afficher les principales options de la galerie telles que:

if($_GET['action']=='edit')
    //then do sth
else
    //display main gallery options

mais je ne pense pas que ce soit la meilleure façon.

J'aimerais savoir quelles fonctions je pourrais utiliser, à partir de la création d'un lien personnalisé, de la création d'une page personnalisée et de leur enregistrement.

Quelle méthode doit être utilisée quand action = edit est déclenché. Comment le repérer était demandé sur la page même. Comment afficher ensuite la page liée au contenu.

wp-admin/options-general.php?page=rls_logotypes&action=edit&rls_element=element1
2
dfens

Obtenez l'URL d'une page d'administration spécifique (par exemple, la page des paramètres (options-general.php)):

admin_url( 'options-general.php' )

Codex admin_url ()

Ajout d'arguments de requête à une URL:

$params = array(
    'page'          => $_REQUEST['page'],
    'action'        => 'edit',
    'rls_element'   => $item['rls_name']
);

$url = add_query_arg( $params, $org_url );

Codex add_query_arg ()

Mettez a et b ensemble:

$params = array(
    'page'          => $_REQUEST['page'],
    'action'        => 'edit',
    'rls_element'   => $item['rls_name']
);

$url = add_query_arg( $params, admin_url( 'options-general.php' ) );

Maintenant nous pouvons créer des liens:

public function column_rls_name( $item ){

    $actions = array(
    'edit'  => $this->create_admin_link(
                        array(
                            'text'      => 'Edit',
                            'action'    => 'edit',
                            'item'      => $item['rls_name']
                        )
                )
    );

    return sprintf( '%1$s %2$s', $item['rls_name'], $this->row_actions( $actions ) );

}

public function create_admin_link( $args = array() ){

    $params = array(
        'page'          => $_REQUEST['page'],
        'action'        => $args['action'],
        'rls_element'   => $args['item']
    );

    $url = add_query_arg( $params, admin_url( 'options-general.php' ) );

    return sprintf( '<a href="%s">%s</a>', $url, $args['text'] );

}
1
Ralf912