Llamar a una función al hacer clic en el botón, obtener una url

4 minutos de lectura

avatar de usuario
Steve

Soy nuevo en wordpress. Estoy tratando de llamar a la función myprefix_edit_user_cb() para obtener el formulario de edición después de que el usuario haga clic en editar.

function getdata()
{    
    $blogusers = get_users();
    foreach ( $blogusers as $user ) {
        echo '<span>' . esc_html( $user->user_email ) . '</span>';


        $editUrl = ??

        echo  "<a href="".$editUrl. "">Edit User</a>"; 

        echo '<br>';
    }   
}

con función:

 function myprefix_edit_user_cb(){    
     $user = intval($_REQUEST['user']);

    echo '
                <form action="' . $_SERVER['REQUEST_URI'] . '" method="post">
                <label>Username</label>
                <input type="text" value="' .$user->user_login  . '"
                <input type="submit">
        ';
}

  • ¿Dónde está definido este enlace: myprefix_edit_user?

    – Mihai Papuc

    1 de septiembre de 2017 a las 4:16

  • @MihaiPapuc ¿cómo debería? soy nuevo y no se como

    –Steve

    1 de septiembre de 2017 a las 4:47

  • ¿Dónde encontraste la documentación para este gancho?

    – Rikesh

    1 de septiembre de 2017 a las 4:52

  • @Steve, su código anterior está fuera de contexto, por lo que no hay mucho en lo que podamos ayudarlo. ¿Qué tal reformular la pregunta para señalar exactamente lo que necesita hacer (por ejemplo, qué formulario de edición), cuáles son sus ideas para resolver su problema y cuáles son las fuentes en las que basa sus ideas? Creo que nosotros (u otros usuarios) podríamos ayudar más con este tipo de información.

    – Mihai Papuc

    2 de septiembre de 2017 a las 14:42

  • No tengo una idea general del código que ha proporcionado, pero mi sugerencia es verificar si su tema contiene do_action(‘myprefix_edit_user’) fn antes de hacer clic en el botón.

    – Manzoor Samad

    04/09/2017 a las 19:38


avatar de usuario
Akshay Shah

Según yo, debe colocar un indicador de solicitud con su URL de edición.

Pruebe el siguiente código.

function getdata(){    
$blogusers = get_users();
foreach ( $blogusers as $user ) {
    echo '<span>' . esc_html( $user->user_email ) . '</span>';

    $deleteUrl = add_query_arg(array('action'=>'myprefix_delete_user', 'user_id'=>$user->ID));

    $editUrl = add_query_arg(array('action'=>'myprefix_edit_user', 'user'=>$user));

    echo  "<a href="".$deleteUrl. "">Delete User</a>"; 
    echo  "<a href="".$editUrl. "&edit=1">Edit User</a>"; 

    echo '<br>';
 }   
}

con acción y función de devolución de llamada con bandera:

add_action('init','myprefix_edit_user_cb');
function myprefix_edit_user_cb(){    
 $user = intval($_REQUEST['user']);
 if($user == '')
 return;

 if($_REQUEST['edit'] == 1 )
 {
    echo '
            <form action="' . $_SERVER['REQUEST_URI'] . '" method="post">
            <label>Username</label>
            <input type="text" value="' .$user->user_login  . '"
            <input type="submit">
    ';    
 }
}

  • la función myprefix_edit_user_cb() nunca está corriendo para llegar allí. He editado la pregunta.

    –Steve

    5 de septiembre de 2017 a las 11:28

  • después de mi código, supongo que sus problemas deben resolverse. ¿has revisado eso?

    – Akshay Shah

    5 de septiembre de 2017 a las 12:06

  • Por favor revise ahora

    – Akshay Shah

    5 de septiembre de 2017 a las 15:17

  • @Steve, comprueba la respuesta ahora

    – Akshay Shah

    7 sep 2017 a las 9:55

  • Parece como si estuvieras buscando el ->user_login propiedad en un int?? Hay una $user = get_user_by( 'id', $user ); falta antes de su formulario.

    – ptmalcolm

    8 de septiembre de 2017 a las 2:35

Lo que está preguntando depende de dónde le gustaría permitir que el usuario sea editado. Esta es mi opción preferida (asumiendo que está haciendo todo en la parte frontal del sitio web):

Cree una página con una plantilla de página.

De forma predeterminada, la mayoría de los temas vienen con algunas plantillas básicas sobre cómo se verá una página. Dado que es posible que desee agregar un formulario de edición a una página, crear una plantilla de página personalizada sería un paso directo. Se puede encontrar un buen tutorial para crear estos aquí. Una vez creado, agregaría un código como este a la plantilla:

<?php if (isset($_GET['user_id'])): ?>

    <?php $user = get_user_by('id', intval($_GET['user_id'])); ?>
    <form action="#" method="post">
        <label>Username</label>
        <input type="text" value="<?= esc_attr($selected_user->user_login); ?>" />
        <input type="submit" />
        ...
    </form>

<?php else: ?>

    <p>Error, please specify a user id!</p>

<?php endif; ?>

Que haría una prueba básica para asegurarse id_usuario se había pasado a la página, luego cargue el formulario en consecuencia (para mejorar esto, también verificaría si get_user_by devuelve un objeto antes de mostrar un formulario de edición en caso de que el id_usuario no sea válido). En el ejemplo proporcionado, una URL (con enlaces permanentes establecidos en el nombre de la página) se vería así:

https://ejemplo.com/editar-pagina/?usuario_id=55

Hay formas de hacer que la URL sea más limpia, sin embargo, por ahora solo estoy tratando de asegurarme de que su pregunta se responda con un ejemplo de trabajo correcto.

Koda

¿Ha sido útil esta solución?