【问题标题】:How to create custom tables in WordPress using my own plugin?如何使用我自己的插件在 WordPress 中创建自定义表格?
【发布时间】:2014-03-24 05:39:49
【问题描述】:

我是 WordPress 插件开发的新手。这是我的核心 PHP 和 HTML 代码

create-table.html

  <form method="post" action="function.php">
    <input type="text" name="table_name">
    <input type="submit" name="create">
    </form>

function.php

if(isset($_POST['create'])
{
$table-name=$_POST['table_name'];

//create table query here

header("location: add_table_attribute.php");
}

我想在我的 WordPress 插件开发中使用相同的过程。请任何人帮助我。

提前致谢。

【问题讨论】:

  • 有什么问题?请具体!
  • 我不知道如何在 wordpress 中创建表单,并在表单提交后在 wordpress 数据库中创建表。 @Adrian Preuss
  • 你想在哪里创建一个表?前端,后端...?
  • 在后端创建表

标签: php mysql database wordpress


【解决方案1】:

你有很多选择。

这是其中的一个小插件。我已经为你评论了:https://hostr.co/pRBSmTkZ2LlJ

<?php
    /*
        Plugin Name:    stackoverlow - My own Table
        Version:        1.0.0
    */

    class My_Table {

        /*
            Add an menu entry in the Administration. Fore more information see: http://codex.wordpress.org/Administration_Menus
        */
        public function __construct() {
            add_action('admin_menu',    array($this, 'admin_menu'));
        }

        public function admin_menu() {
            $menu_title = 'Table: Title of your Menu';  // The title of your menu entry
            $menu_slug  = 'my_table';                   // The slug, for example: wp-admin/admin.php?page=my_table
            add_menu_page($menu_title, $menu_title, 'manage_options', $menu_slug, array($this, 'admin_page'));
        }

        /*
            Here is the Output of your Page
        */
        public function admin_page() {
            global $wpdb;

            // Handle here your Data
            if(isset($_POST['create'])) {
                $table_name = $_POST['table_name'];

                // WARNING: SQL Injections - Data not prepared!
                $wpdb->query("CREATE TABLE IF NOT EXISTS `" . $table_name . "`;");
            }

            if(!empty($wpdb->last_error)) {
                printf('<pre>ERROR: %s</pre>', $wpdb->last_error);
            }

            if(!empty($wpdb->last_query)) {
                printf('<pre>Query: %s</pre>', $wpdb->last_query);
            }
            ?>
            <form method="post" action="<?php print admin_url('admin.php?page=my_table'); ?>">
                <input type="text" name="table_name" />
                <input type="submit" name="create" />
            </form>
            <?php
        }
    }

    new My_Table();
?>

【讨论】:

  • 我无法获取该文件。它显示类似的东西。此文件属于尚未激活的帐户。
  • 非常感谢@Adrian Preuss。
【解决方案2】:
    global $wpdb;
global $table_db_version;
$table_add_one = $wpdb->prefix."store_rating";
$store_create_ddl="
CREATE TABLE IF NOT EXISTS `".$table_add_one."` (
  `rid` INT(11) UNSIGNED AUTO_INCREMENT,
  `ip` varchar(255) NOT NULL,
  `device` varchar(255) NOT NULL,
  `user_agent` varchar(255) NOT NULL,
  `storeid` int(11) NOT NULL,
  `rating` int(1) NOT NULL,
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY(rid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
";
    

$all_tables = array();
$mytables=$wpdb->get_results("SHOW TABLES");
foreach ($mytables as $mytable){
    foreach ($mytable as $t){                   
        $all_tables[]=$t;
    }
}



$sql_one='';
if(!in_array($table_add_one,$all_tables)){
    $sql_one.=$store_create_ddl;
    if(!empty($sql_one)){
        if(!function_exists('wp_should_upgrade_global_tables')){
            require(ABSPATH . 'wp-admin/includes/upgrade.php');
        }
        dbDelta($store_create_ddl);
    }       
}  

在“after_setup_theme”中添加此代码

【讨论】:

    【解决方案3】:

    这是使用插件创建表的示例代码

    // Make custom table
    function add_custom_table_on_install()
    {
        global $wpdb;   
    
        $table_name = $wpdb->prefix . "my_table";
    
        if($wpdb->get_var("show tables like '$table_name'") != $table_name) {
            $sql = "CREATE TABLE " . $table_name . " (
                id BIGINT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
                name VARCHAR( 255 ) NOT NULL
            )";
            $wpdb->query($wpdb->prepare($sql));
        }
    }
    // Custom table hook
    register_activation_hook(__FILE__, 'add_custom_table_on_install');
    

    【讨论】:

    • 我想在安装后创建表。
    • 您尝试过我发布的代码吗?此代码将在您安装并激活插件后立即创建一个表。这就是我能够通过您发布的有关您的问题的最少详细信息来理解的内容
    • 好的@Zameer Khan。但是我想在安装插件后创建多个表。应该能够从我的插件创建新表。
    猜你喜欢
    • 2021-12-18
    • 2012-10-27
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2012-12-13
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多