如何调用数据库中创建表函数(插件功能)

时间:2011-03-29 作者:shalu

我试图创建一个小插件,但当我激活插件时,它并没有在数据库中创建表。请看下面给出的代码有功能function jal_install () 它没有被调用。

      <?php
        /*
        Plugin Name: My-Ads
        Plugin URI: http://wordpress.org/#
        Description: This is the most basic wordpress plugin, gets input from the user and displays it on every page.
        Author: shalu


       */

       /*when plugin is activated*/

       register_activation_hook(_FILE_,\'my_first_install\');

      /*when plugin is deactivated*/
      register_deactivation_hook( __FILE__, \'my_first_remove\' );

      function my_first_install()
       {
         add_option("my_first_data", \'Testing !! My Plugin is Working Fine.\', \'This is my first plugin panel data.\', \'yes\');

       }
       function my_first_remove() 
          {
        /* Deletes the database field */
        delete_option(\'my_first_data\');

           }

           /*Code-Add Admin Panel Menu Item*/

      if(is_admin())
        {
               add_action(\'admin_menu\',\'my_first_admin_menu\');

           function my_first_admin_menu()
            {
             add_options_page(\'My First\', \'Ads\', \'administrator\',\'my-first\',        \'my_first_plugin_page\');
             }
            }



         function my_first_plugin_page() {
       ?>

         <div>
        <h2>Add your ads from here</h2>
          <form method="post" action="options.php" enctype="multipart/form-data">
             <?php wp_nonce_field(\'update-options\'); ?>
          <table width="510">
      <tr valign="top">
        <th width="92" scope="row">Name:</th>
          <td width="406">
           <input name="my_first_data" type="text" id="my_first_data" value="<?php echo get_option(\'my_first_data\'); ?>" /></td>
           </tr>
           <tr>
         <th width="92" scope="row">Target Url:</th>
         <td width="406">
          <input name="Target_Url" type="text" id="Target_Url" value="<?php echo get_option(\'Target_Url\'); ?>" />
           </td>
          <tr>
          <tr>
         <th width="92" scope="row">Ad image:</th>
        <td width="406">
          <input name="file" type="file" id="file"/></td>
          </tr>
       </table>
      <input type="hidden" name="action" value="update" />
      <input type="hidden" name="page_options" value="my_first_data" />
        <p>
       <input type="submit" value="<?php _e(\'Save Changes\') ?>" />
         </p>
        </form>
           </div>
           <?php

               }

          /* This calls my_first() function when wordpress initializes.*/
        function my_first()
       {

          echo get_option(\'my_first_data\');
           }

       function jal_install () {
           global $wpdb;
              global $jal_db_version;

           $table_name = $wpdb->prefix . "liveshoutbox";
           echo $table_name;
            if($wpdb->get_var("show tables like \'$table_name\'") != $table_name) {

           $sql = "CREATE TABLE " . $table_name . " (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
  time bigint(11) DEFAULT \'0\' NOT NULL,
  name tinytext NOT NULL,
  text text NOT NULL,
  url VARCHAR(55) NOT NULL,
  UNIQUE KEY id (id)
);";

  require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
  dbDelta($sql);

  $rows_affected = $wpdb->insert( $table_name, array( \'time\' => current_time(\'mysql\'), \'name\' => $welcome_name, \'text\' => $welcome_text ) );

  add_option("jal_db_version", $jal_db_version);

            }
          }

        //calling the function
        register_activation_hook(__FILE__,\'jal_install\');

         ?> 
请帮助我问题出在哪里。我将非常感谢你

3 个回复
SO网友:t31os

AutoBLogged指出的第一个问题是,您没有正确引用_FILE_ 而不是__FILE__ 在第一个激活挂钩中。

有一个可能的次要问题,我说可能是因为我自己从来没有广泛使用过激活或停用挂钩,这就是调用register_activation_hook 两次,一次朝向脚本顶部,一次朝向底部。

我假设(这里我可能错了),您不能为一个文件创建两个单独的激活挂钩。不过,解决方案应该很简单,从两个函数中提取代码并将其移到一个函数中,因此只需调用一次register_activation_hook.

SO网友:kaiser

看起来你只是从上面复制粘贴了代码here 并期望它能简单地工作。看看单行线是怎么搞砸的_FILE_ 发布或$rows_affected 设置但不调用,我认为最好的建议是自己再次阅读代码,尝试清理代码,并添加一些注释,作为内联“这行做什么”协议。

此外,任何插件都不应在停用期间删除其选项,而应在卸载时删除。还可以尝试使用函数和var名称来解释什么是或做什么。

最后一行:不要向数据库中添加表,除非您非常确定这些表是如何工作的。你真的会搞砸的。

SO网友:AutoBlogged

这里有一个问题:

register_activation_hook(_FILE_,\'my_first_install\');
应该是这样的:

register_activation_hook(__FILE__,\'my_first_install\');

结束