Comment insérer correctement des données dans une table personnalisée via un plugin
-
-
avez-vousessayé d'utiliser untype depublicationpersonnalisé au lieu defaire des requêtes SQL directes https://codex.wordpress.org/Function_Reference/register_post_type?have you tried tu use custom post type instead of doing direct SQL queries https://codex.wordpress.org/Function_Reference/register_post_type ?
- 1
- 2016-07-14
- mmm
-
Hey @mmm,malheureusement,untype depublicationpersonnaliséne fonctionnerapaspour ce dontj'aibesoin.Hey @mmm, unfortunately a custom post type won't work for what I need.
- 0
- 2016-07-14
- Breno
-
3 réponses
- votes
-
- 2016-07-14
Cen'estpas unebonnepratique d'essayer de connecter labase de donnéespar vospropresméthodespendant que WP lefaitpour vous au départ.
Leproblème avec ceciest queje dois déclarer ces variables ($ db_host,$ db_user,$ db_pass,$ db_name) dans la source duplugin code.
Toutes cespropriétés sont définies dans lefichier
wp-config.php
,situé dans la zone racine.Si vous deviez alors obtenir ces constantes,incluez simplement lefichieret appelez les constantes,ou utilisez REGEX (mieux vaut utiliser REGEX,carilpourrait y avoir d'autres rappels quinécessitent le chargement de WordPress)
// loading the config file to pull the DB_* constants $dirname = dirname(__FILE__); $root = false !== mb_strpos( $dirname, 'wp-content' ) ? mb_substr( $dirname, 0, mb_strpos( $dirname, 'wp-content' ) ) : $dirname; // if $root is not correct, provide a static path then, $root = '/path/to/root/dir' // assuming constants are ready (wp is configured), let's get them. require_once( $root . "wp-config.php" ); echo var_dump( 'DB name', DB_NAME, 'DB user', DB_USER, 'DB password', DB_PASSWORD, 'DB host', DB_HOST );
Voici unemeilleure solution:
Charger WordPress
require( '/wp-blog-header.php' );
Vous devriezfournir un chemin detravail vers cefichier!Pourtester si vous avez correctement chargé WordPress,videz quelque chose:
add_action("wp", function() { echo sprintf( "Yes! I am creating with WordPress v. %s!\n", get_bloginfo("version") ); exit("I exits\n"); });
Utilisezmaintenant l'API DB WordPress
Pourinsérer des données,il y a ce
wpdb::insert
vous devriez utiliser. Voici la syntaxe$wpdb->insert( $table, $data, $format );
et exemple d'utilisation:$wpdb->insert( 'messages', array( 'PM_ID' => (int) $pm_id, 'sender' => $current_user->ID, 'recipient' => (int) $recipient, 'message' => "Hello!\n", 'date' => time() ) ); $record_id = $wpdb->insert_id;
Dans l'exemple,letableau du deuxièmeparamètre de
$wpdb->insert
est untableau avec desindex commenoms de colonneset des valeurs àinsérerpour ces colonnes dans unenregistrementindépendant que vouspeut obtenir son ID avec$wpdb->insert_id
qui obtient l'ID d'insertion du dernierenregistrement dans cettetable.J'espère que cela aide,si aumoins vous restez à l'écart de l'injection SQLen utilisant
$wpdb::insert
ou desinstructionspréparées au lieu de requêtes directes.That's not a good practice trying to connect the DB by your own methods while WP does it for you initially.
The problem with this is that I have to declare these variables ($db_host, $db_user, $db_pass, $db_name) inside the plugin source code.
All these properties are defined in
wp-config.php
file, located in the root area.If you were to get these constants then, just include the file and call the constants, or use REGEX (better use REGEX, because there might be other callbacks that require loading WordPress)
// loading the config file to pull the DB_* constants $dirname = dirname(__FILE__); $root = false !== mb_strpos( $dirname, 'wp-content' ) ? mb_substr( $dirname, 0, mb_strpos( $dirname, 'wp-content' ) ) : $dirname; // if $root is not correct, provide a static path then, $root = '/path/to/root/dir' // assuming constants are ready (wp is configured), let's get them. require_once( $root . "wp-config.php" ); echo var_dump( 'DB name', DB_NAME, 'DB user', DB_USER, 'DB password', DB_PASSWORD, 'DB host', DB_HOST );
Here's a better solution:
Load WordPress
require( '/wp-blog-header.php' );
You should provide a working path to that file!To test if you have loaded WordPress successfully, dump out something:
add_action("wp", function() { echo sprintf( "Yes! I am creating with WordPress v. %s!\n", get_bloginfo("version") ); exit("I exits\n"); });
Now use WordPress DB API
To insert data, there's this
wpdb::insert
you should use. Here the syntax$wpdb->insert( $table, $data, $format );
and example use:$wpdb->insert( 'messages', array( 'PM_ID' => (int) $pm_id, 'sender' => $current_user->ID, 'recipient' => (int) $recipient, 'message' => "Hello!\n", 'date' => time() ) ); $record_id = $wpdb->insert_id;
In the example, the array in
$wpdb->insert
's 2nd param is an array with indexes as columns names, and values to be inserted for these cols in an independent record that you can get its ID with$wpdb->insert_id
which gets last record insert ID in that table.Hope that helps, if at least you stay away from SQL injection using
$wpdb::insert
or prepared statements instead of direct queries. -
- 2016-07-14
Pourquoine pas étudier lefonctionnement de $ wpdb .Visitez https://codex.wordpress.org/Class_Reference/wpdb
Voici unexemple de lafaçon d'insérer des données dans labase de donnéesen utilisant $wpdb
<?php global $wpdb; $wpdb->insert( 'table_name_here', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) ); ?>
Visitez https://codex.wordpress.org/Creating_Tables_with_Plugins pouren savoirplus.
Why not study about how $wpdb works. Visit https://codex.wordpress.org/Class_Reference/wpdb
Here is a example of how to insert data to database using $wpdb
<?php global $wpdb; $wpdb->insert( 'table_name_here', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) ); ?>
Visit https://codex.wordpress.org/Creating_Tables_with_Plugins for more .
-
- 2016-07-19
<?php global $wpdb; $table="test_table"; $store_arr["name"]="test"; $store_arr["email"]="[email protected]"; $wpdb->insert( $table, $store_arr); ?>
<?php global $wpdb; $table="test_table"; $store_arr["name"]="test"; $store_arr["email"]="[email protected]"; $wpdb->insert( $table, $store_arr); ?>
-
Veuillezexpliquer ce quefait ce codeet pourquoiil répond à la question.Les réponses au code uniquement sont déconseillées.Please explain what this code does and why it answers the question. Code only answers are discouraged.
- 0
- 2016-07-19
- Tim Malone
J'ai unplugin qui lit les données d'unfichiertéléchargéet exécute des requêtes sur labase de données wp.Cesinsertions sont dans unetable crééeparmonplugin,ellesne sont doncpas dutype depublication.
Voici commentje l'aifaitfonctionner:
Leproblème avec ceciest queje dois déclarer ces variables ( $ db_host,$ db_user,$ db_pass,$ db_name ) dans le code source duplugin.
Est-ilpossible d'insérer des données dansmestableauxpersonnalisés avec l'API wp?Ou y a-t-il unmoyen d'extraire ces variables d'unfichierexterne queje peuxignorer dans une configuration de contrôle de version?