Помогите записать входные данные в базу данных с плагином Wordpress - PullRequest
1 голос
/ 13 мая 2010

Привет! Я создаю плагин для WordPress, в котором мне нужно, чтобы администратор вводил данные в таблицу базы данных. Я могу установить таблицу БД, когда плагин активирован, однако я не могу понять, как сохранить пользовательский ввод. Я спрашивал на форумах WP, но они мертвы ... Любой опытный гуру, который может дать какое-то руководство, будет с благодарностью.

<?php



/*******************************************************************
*           INSTALL DB TABLE - ONLY AT RUN TIME                    *
*******************************************************************/
function ed_xml_install() {
global $wpdb;

$ed_xml_data = $wpdb->prefix . "ed_xml_data";
if($wpdb->get_var("SHOW TABLES LIKE '$ed_xml_data'") != $ed_xml_data) {

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

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

  $name = "Example Business Name";
  $address = "1234 Example Street";
  $url = "http://www.google.com";
  $phone = "523-3232-323232";

  $insert = "INSERT INTO " . ed_xml_data .
        " (phone, name, address, url) " .
        "VALUES ('" . phone() . "','" . $wpdb->escape($name) . "','" . $wpdb->escape($address) . "', '"  . $wpdb->escape($url) . "')";

  $results = $wpdb->query( $insert );
}
}

//call the install hook
register_activation_hook(__FILE__,'ed_xml_install');

/*******************************************************************
*           CREATE MENU, CREATE MENU CONTENT                       *
*******************************************************************/
if ( is_admin() ){

/* place it under the ED menu */
//TODO $allowed_group = '';

/* Call the html code */
add_action('admin_menu', 'ed_xmlcreator_admin_menu');

function ed_xmlcreator_admin_menu() {
add_options_page('ED XML Creator', 'ED XML Creator', 'administrator', 
'ed_xml_creator',  'ed_xmlcreator_html_page');
}
}

/*******************************************************************
*           CONTENT OF MENU CONTENT                                *
*******************************************************************/


function ed_xmlcreator_html_page() {
<div>
<h2>Editors Deal XML Options</h2>
<p>Fill in the below information which will get passed to the .XML file.</p>
<p>[<a href="" title="view XML file">view XML file</a>]</p>

<form method="post" action="options.php">
<?php wp_nonce_field('update-options'); ?>

<table width="510">
<!-- title -->
<tr valign="top">
<th width="92" scope="row">Deal URL</th>
<td width="406">
<input name="url" type="text" id="url"
value="<?php echo get_option('url'); ?>" />
</td>
</tr>

<!-- description -->
<tr valign="top">
<th width="92" scope="row">Deal Address</th>
<td width="406">
<input name="address" type="text" id="address"
value="<?php echo get_option('address'); ?>" />
</td>
</tr>

<!-- business name -->
<tr valign="top">
<th width="92" scope="row">Business Phone</th>
<td width="406">
<input name="phone" type="text" id="phone"
value="<?php echo get_option('phone'); ?>" />
</td>
</tr>

<!-- address -->
<tr valign="top">
<th width="92" scope="row">Business Name</th>
<td width="406">
<input name="name" type="text" id="name"
value="<?php echo get_option('name'); ?>" />
</td>
</tr>
</table>

<input type="hidden" name="action" value="update" />
<input type="hidden" name="page_options" value="hello_world_data" />

<p>
<input type="submit" value="<?php _e('Save Changes') ?>" />
</p>

</form>
</div>

?>

1 Ответ

3 голосов
/ 14 мая 2010

Перво-наперво, вам нужен обработчик на вашей странице администратора, чтобы сделать что-то с информацией, которая была отправлена ​​обратно. Этот обработчик будет разделом кода, который фактически обновляет вашу таблицу базы данных.

Пример страницы меню в кодексе WP содержит пример того, как проверить отправленные данные POST. Вот отрывок для работы с:

// mt_options_page() displays the page content for the Test Options submenu
function mt_options_page() {

    // variables for the field and option names 
    $opt_name = 'mt_favorite_food';
    $hidden_field_name = 'mt_submit_hidden';
    $data_field_name = 'mt_favorite_food';

    // Read in existing option value from database
    $opt_val = get_option( $opt_name );

    // See if the user has posted us some information
    // If they did, this hidden field will be set to 'Y'
    if( isset($_POST[ $hidden_field_name ]) && $_POST[ $hidden_field_name ] == 'Y' ) {
        // Read their posted value
        $opt_val = $_POST[ $data_field_name ];

        // Save the posted value in the database
        update_option( $opt_name, $opt_val );

        // Put an options updated message on the screen

?>
<div class="updated"><p><strong><?php _e('Options saved.', 'mt_trans_domain' ); ?></strong></p></div>
<?php

    }

    // Now display the options editing screen

Вместо того, чтобы обновлять опцию WordPress, вы вставляете данные в свою собственную таблицу. Поэтому я бы заменил вызов функции update_option( $opt_name, $opt_value); на вызов вашей собственной функции, которая вставляет информацию в базу данных.

Если ничего другого, это даст вам начало. Для более глубокого примера, не стесняйтесь просматривать код, который я создал для плагина под названием RegLevel . Он имеет единую страницу администратора, которая позволяет вставлять информацию в базу данных. Взгляните на код, чтобы увидеть, как он работает, возможно, вы сможете изменить его назначение в своей собственной системе.

...