我可以在我的数据库上创建一个表,而不创建插件吗?

时间:2015-08-03 作者:Kar19

我在我的WP网站上创建了一个内置表单。我想将输入存储到数据库的一个表中。所有解释如何创建talke的教程都包括一个事实,即我必须为此创建一个插件。

我的所有函数都是用函数编写的。php和我更喜欢在那里编写创建DB的函数。

如果我在函数中编写创建表的函数。php-它会生成多个表或类似的东西吗?还是只起一次作用?

我可以使用PHPMYADMIN创建一个吗?或者它将不包括内置的wordpress安全功能?

3 个回复
SO网友:Pieter Goosen

当我开始使用Wordpress时,我是反插件的。我想在我的主题中添加所有内容functions.php. 当我从更大的角度来看,在插件中保留一些功能开始变得有意义。

有很多关于插件应该包含哪些内容以及主题应该包含哪些内容的文章。一、 首先,我已经写了一到两篇关于这个主题的文章,所以请你自己帮个忙,读一下这篇文章。我相信这将是非常有益和有见地的。

插件中的函数和主题中的函数functions.php 做完全相同的工作,没有区别。唯一的问题是,您不能在插件中声明函数and 在主题中重新声明。这将引发致命错误,导致网站崩溃

要回答您的问题,是的,如果您从逻辑上考虑这一点,您的功能应该放在插件中,因为它为您的站点提供了功能,而不是主题。这是切换主题时需要的功能。插件更简单,因为您不需要反复编写或复制此代码到新主题中。

但选择仍然是你的。把它添加到你的主题中是你自己的选择,尽管,正如我所说,并不推荐这样做。但无论哪种方式,代码在主题和插件中都能很好地工作,因此您可以选择在何处添加它

SO网友:Bora Yalcin

我最近没有这样做,但在2014年,在一些需要额外表格的WordPress项目中,我使用了Laravel组件。

在WordPress中,如果您想使用wpdb和mysql查询创建自己的表。但通过使用Laravel数据库类,我成功地做到了这一点。

简要介绍我是如何做到这一点的:(注意:当时,我使用了Laravel 4组件,但还没有尝试使用5组件)

"require": {
    "illuminate/database": "*",
    "illuminate/container": "*",
    "shuber/curl": "dev-master",
    "sunra/php-simple-html-dom-parser": "v1.5.0"

},
我在函数中安装了必要的包(前两个)和composer。php(或在功能插件中)

我用它来保存杂志文章内容的索引,一个Recorder类(抱歉,不是很可靠的方法)

<?php
namespace Dion\\Volumes;

use Illuminate\\Database\\Capsule\\Manager as Capsule;


class Recorder {


    public static $table = \'volume_content\';

    public function __construct(Page $page){
        $this->recordPage($page);
    }

    public static function createTables()
    {
        if( ! Capsule::schema()->hasTable(static::$table) ) {

            Capsule::schema()->create(static::$table, function($table) {
                $table->increments(\'id\');
                $table->string(\'volume\');
                $table->integer(\'month\');
                $table->integer(\'year\');
                $table->integer(\'page\');
                $table->longtext(\'page_content\');
            });
        }
    }


    public function recordPage($page)
    {
        //check if exists
        $exists = Capsule::table(static::$table)->where(\'volume\',$page->volume)
                                    ->where(\'page\',$page->page)->get();


        if( empty( $exists ) ) {

            $insert = Capsule::table(static::$table)->insert($page->toArray());
        } else {
            $update = Capsule::table(static::$table)->where(\'volume\',$page->volume)
                                                    ->where(\'page\',$page->page)
                                                    ->update($page->toArray());
        }
    }
}
在函数中。php我添加了Laravel数据库组件,并使其像这样工作。

global $wpdb;
$capsule = new Capsule;

$capsule->addConnection(array(
    \'driver\'    => \'mysql\',
    \'host\'      => DB_HOST,
    \'database\'  => DB_NAME,
    \'username\'  => DB_USER,
    \'password\'  => DB_PASSWORD,
    \'prefix\'    => $wpdb->prefix,
    \'charset\'   => DB_CHARSET,
    \'collation\' => \'utf8_unicode_ci\',
));


$capsule->bootEloquent();

// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();

//this one creates table if not exists. Its better to run it in a WP action, like admin_init
$createVolumes = Dion\\Volumes\\Recorder::createTables();
希望有帮助,如果您喜欢此解决方案并有疑问,我很乐意补充更多。

SO网友:Oleg Butuzov

我可以使用PHPMYADMIN创建一个吗?

对你可以。这是最短的方法。

结束

相关推荐

Custom_list_table编辑/删除批量操作

所以这对我来说是一个全新的篇章,我在google上搜索了一个解决方案,找到了很多东西,但不幸的是,没有任何东西对我有用。 function column_title($item){ $actions = array( \'edit\' => sprintf(\'<a href=\"?page=%s&action=%s&ID=%s\">Edit</a>\',$_REQUEST[\'pa