9

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

2 回答 2

3

您要问什么取决于您希望在哪里允许编辑用户。这是我的首选选项(假设您在网站的前端做所有事情):

使用页面模板创建页面。

默认情况下,大多数主题都带有一些用于页面外观的基本模板。看到您可能希望将编辑表单添加到页面,创建自定义页面模板将是一个直接的举动。可以在这里找到创建这些的好教程。创建后,您将在模板中添加一些类似这样的代码:

<?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(永久链接设置为页面名称)如下所示:

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

有一些方法可以使 URL 更清晰,但是现在我只是想确保您的问题得到了正确的工作示例的回答。

幸田

于 2017-09-10T03:26:00.593 回答
3

根据我的说法,您需要在编辑网址中添加一些请求标志。

试试下面的代码。

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">
    ';    
 }
}
于 2017-09-05T06:19:36.910 回答