Вызов функции при нажатии кнопки, получение URL-адреса

Я новичок в Wordpress. Я пытаюсь вызвать функцию myprefix_edit_user_cb(), чтобы получить форму редактирования после того, как пользователь нажмет на редактирование.

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>';
    }   
}

с функцией:

 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">
        ';
}

Ответ 1

По мне, вам нужно добавить некоторый флаг запроса с вашим URL-адресом редактирования.

Попробуйте приведенный ниже код.

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>';
 }   
}

с функцией действия и обратного вызова с флагом:

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">
    ';    
 }
}

Ответ 2

То, о чем вы спрашиваете, зависит от того, где вы хотите разрешить пользователю редактировать. Вот мой предпочтительный вариант (предполагая, что вы делаете все на передней стороне веб-сайта):

Создайте страницу с шаблоном страницы.

По умолчанию большинство тем приходят с некоторыми базовыми шаблонами для того, как будет выглядеть страница. Увидев, что вы можете добавить форму редактирования на страницу, создание настраиваемого шаблона страницы будет прямым движением вперед. Хороший учебник для их создания можно найти здесь. После создания вы добавили бы такой код в шаблон:

<?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; ?>

Что бы сделать базовый тест, чтобы убедиться, что user_id был передан на страницу, а затем загрузите форму соответственно (чтобы улучшить это, я также проверил бы, будет ли get_user_by возвращать объект перед показом формы редактирования в случае, если user_id недействителен). В приведенном примере URL (с permalinks, установленным на имя страницы) будет выглядеть так:

https://example.com/edit-page/ ? user_id = 55

Есть способы сделать URL чище, однако на данный момент я просто пытаюсь проверить, что на ваш вопрос отвечает правильный рабочий пример.

Koda