shalu
  • 0
Новичок

Как вызвать функцию, создающую таблицу в базе данных (функциональность плагина)

  • 0

Я пытаюсь создать небольшой плагин, но он не создает таблицу в базе данных, когда я активирую плагин. пожалуйста, посмотрите код, приведенный ниже, есть функция 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');

         ?> 

пожалуйста, помогите мне, где проблема. буду вам очень благодарен

Share
  1. Первая проблема, как указал AutoBLogged, заключается в том, что вы неправильно указали ссылку, _FILE_ а не __FILE__ в первом крючке активации.

    Существует возможная вторичная проблема, и я говорю, что возможная, потому что мне никогда не приходилось широко использовать хуки активации или деактивации, и это с двойным вызовом register_activation_hook, один раз в верхней части скрипта и один раз в нижней части.

    Я предполагаю (и могу ошибаться здесь), что вы не можете создать два отдельных хука активации для одного файла. Однако решение должно быть простым: взять код из обеих функций и переместить его в одну, поэтому вам нужен только один вызов register_activation_hook .

    • 0
  2. Похоже, вы просто скопировали код отсюда и ожидаете, что он просто сработает. Глядя на то, как перепутаны отдельные строки, и на такие вещи, как _FILE_ проблема или $rows_affected установка, но нигде не вызываемая, я бы сказал, что лучшая рекомендация — просто снова прочитать свой код, попытаться очистить его и добавить некоторые комментарии, которые действуют как встроенные «что делает эта строка» — протокол.

    Кроме того, ни один плагин не должен удалять свои параметры во время деактивации, но при удалении. Также попробуйте использовать имена функций и переменных, которые объясняют, что это такое или что делает.

    Последняя строка: не добавляйте таблицы в базу данных, если вы не уверены в том, как все работает. Вы действительно можете многое испортить.

    • 0
  3. Вот одна проблема:

    register_activation_hook(_FILE_,'my_first_install');
    

    Это должно быть так:

    register_activation_hook(__FILE__,'my_first_install');
    
    • 0

Оставить ответ

You must login to add an answer.