在 Wordpress 管理仪表板中执行查询

Posted

技术标签:

【中文标题】在 Wordpress 管理仪表板中执行查询【英文标题】:Excecute a query in Wordpress Admin Dashboard 【发布时间】:2016-05-13 11:25:07 【问题描述】:

我正在尝试构建一个插件来管理 Wordpress 中的自定义表格。在这个插件中,我将编写 3 个函数。第一个从数据库中获取数据,如下面的屏幕截图所示。第二个功能是更新记录状态。最后一个功能是删除一条记录。

我的问题是我不知道如何将函数链接到操作列中的链接。 Wordpress 不允许我或者我不知道如何发送查询以删除或更新记录。

我希望如果我点击更新,我点击选择的记录的状态将被更改,然后重新加载页面。如果我单击删除然后重新加载页面,它将删除该记录。我可以编写函数但没有运气向它发送 ID 查询。

请帮忙。谢谢。

<?php
/*
Plugin Name: Manage Custom Table
Plugin URI: http://_adddress.com
Description: Testing Plugin
Author: XXXXXXXXXX
Version: 1.0
*/
require_once('functions/functions.php');
add_action('admin_menu','ManageCustomTable_admin_actions');
function ManageCustomTable_admin_actions() 
    add_options_page('Manage Custom Table','Manage Custom Table','manage_options',__FILE__,'ManageCustomTable_admin');

function ManageCustomTable_admin()
    global $wpdb;

    $data = $wpdb->get_results  ("
                    SELECT
                        id,
                        school_id,
                        added_date,
                        campus_status
                    FROM
                        table_campus
                ");
    ?>
    <style>.notice-warning display:none;</style>
    <table class="widefat" style="margin:20px auto; width:97%;">
        <thead>
            <tr>
                <th>ID</th>
                <th>School ID</th>
                <th>Added Date</th>
                <th>Status</th>
                <th>Action</th>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <th>ID</th>
                <th>School ID</th>
                <th>Added Date</th>
                <th>Status</th>
                <th>Action</th>
            </tr>
        </tfoot>
        <tbody>
        <?php
        foreach ($data as $data) 
            echo '<tr>';
            echo '<td>'. $data->id.'</td>';
            echo '<td>'. $data->school_id.'</td>';
            echo '<td>'. $data->added_date.'</td>';
            echo '<td>'. $data->campus_status.'</td>';
            echo '<td>'; 
            ?>
            <a href=#> Update </a>
            <a href=#> Delete </a>
            <?php
            echo '</td></tr>';
        
        ?>
        </tbody>
    </table>
<?php

?>

【问题讨论】:

看看Dealing With Forms。 我知道如何处理表格。但是在wordpress仪表板中。这是行不通的。我无法向页面本身发送查询。 我在你的代码中没有看到&lt;form method='post'&gt; 我已经试过了。但是这个查询被wordpress拒绝了,所以我把它拿出来了。 【参考方案1】:

只需创建一个 php 文件并将您的表单放入该文件中。然后在您的插件主 php 文件中包含您创建的文件。

假设你创建了一个 delete.php,update.php

然后在你的 php 主插件文件中

<?php
/*
Plugin Name: Manage Custom Table
Plugin URI: http://_adddress.com
Description: Testing Plugin
Author: XXXXXXXXXX
Version: 1.0
*/
//some of your codes here

include( plugin_dir_path(__FILE__).'delete.php');
include( plugin_dir_path(__FILE__).'update.php');

您的删除和更新锚标记应该有一个标识符。例如$data-id

<a href="<?php echo admin_url('admin.php?sc_update=trues&sc_id=1');?>" >Update</a>

<a href="<?php echo admin_url('admin.php?sc_delete=trues&sc_id=1');?>" >Delete</a>


删除.php
<?php 

if(isset($_GET['sc_delete']) && isset($_GET['sc_id']))
   //[delete query here][1]
   $delete = $wpdb->delete( 'table_campus', array( 'ID' => $_GET['sc_id'] ) );
   if(false != $delete)
   //redirect to where ever you want 
   



update.php

检查您的标识符是否已设置

 <?php 
   if(isset($_GET['sc_update']) && isset($_GET['sc_id']))
     //get the database info in using $wpdb based on $_GET['sc_id']
     //then populate the data in form below
    $data = $wpdb->get_results  ($wpdb->prepare("
                    SELECT
                        id,
                        school_id,
                        added_date,
                        campus_status
                    FROM
                        table_campus where id = %d
                "),$_GET['sc_id']);
      //let say you have the following form below as an example
    ?>
      <form style="margin-left: 300px;" method="post">
        <input type="hidden" name="sc_Id" value="<?php echo $data->id?>">
        <input type="text" name="sc_status" value="<?php echo $data-> campus_status;?>"/>
        <input type="submit" value="Update" name="sc_update_submit"/>
      </form>
    <?php
    
   //check if the update form is submitted
   if(issset($_POST['sc_update_submit']))
     //[excute the update][1] 
     $update = $wpdb->update('table_campus', array('campust_status'=>$_POST['sc_status']),array('id'=>$_POST['sc_Id']));
     if(false != $update)
       //redirect to where ever you want
     

   

希望对您有所帮助。

【讨论】:

感谢您非常详细的回答。我只是有一个问题。我可以在functions.php中编写2个函数删除和更新并且只包含一个functions.php而不是2个文件吗?如果我想扩展插件。我想把所有的函数放在functions.php中。有可能吗? 你指的是主题functions.php文件吗? 你可以在你的插件目录中添加functions.php文件。然后不要忘记将它包含在您的主插件文件中。 我指的是function.php——插件的核心,我把它放在文件夹“includes”中。如果我在该文件中放置 2 个函数删除和更新,我仍然使用相同的锚? &lt;a href="&lt;?php echo admin_url('admin.php?sc_update=trues&amp;sc_id=1');?&gt;" &gt;Update&lt;/a&gt;&lt;a href="&lt;?php echo admin_url('admin.php?sc_delete=trues&amp;sc_id=1');?&gt;" &gt;Delete&lt;/a&gt; 是的。只是不要忘记将它添加到您的主插件文件中。

以上是关于在 Wordpress 管理仪表板中执行查询的主要内容,如果未能解决你的问题,请参考以下文章

如何登录到你的 WordPress 管理仪表板

WordPress仪表板上的自定义内容

无法从仪表板上的 wp_users 或用户页面删除 Wordpress 管理员帐户

除非管理员,否则无法访问 WordPress 仪表板

php 在管理仪表板页面上删除不必要的WordPress小部件

PHP 将小部件添加到wordpress管理仪表板