• Super User

    [Wordpress] Import post da un file sql custom

    Buongiorno a tutti,
    ho realizzato un sito web tramite CMS Wordpress.

    Ho la necessità di importare in esso degli record di un database mysql costituiti

    • titolo
    • descrizione
      dovrei importarli come post.

    I miei dubbi e le mie domande:

    1. c'è un plugin che mi aiuti in tal senso?

    2. utilizzando una query di import custom, quali sono i campi del database WP che devo obbligatoriamente valorizzare ai fine della pubblicazione?

    3. i vecchi post da importare venivano scritti tramite un editor wysiwyg (anche quello di wordpress lo è) ma potrebbero esserci problemi di incompatibilità?

    Grazie.


  • Super User

    Alla fine ho tralasciato l'utilizzo di un papabile plugin, basandomi sulle istruzioni della [url=https://codex.wordpress.org/Function_Reference/wp_insert_post]wp_insert_post ho scritto questa:

    
    INSERT INTO wp_posts (post_content, post_title, post_status, post_type, post_author, post_date, post_date_gmt, comment_status, post_category) 
    SELECT  contenuto,
    		titolo,
    		publish,
            post,
    		'@admin',
    		date_format(date, '%Y-%m-%d %H:%i:%s'),
    		date_format(date, '%Y-%m-%d %H:%i:%s'),
    		'closed',
    		'5',
    FROM    news
    
    

    Questa sera la testerò.

    Solo un suggerimento: il campo post_name (quello da cui viene generato lo slug) nel mio caso dovrebbe essere creato dal campo 'titolo' ma come faccio a gestire i caratteri speciali?

    Grazie.


  • User Attivo

    Potresti usare, in alternativa, la f(x) nativa wp_insert_post:

    codex.wordpress.org/Function_Reference/wp_insert_post


  • Super User

    Purtroppo devo agire da database.

    La mia query ha funzionato, perchè che le 'news' precedenti hanno diversi tag html non riconosciuti da Wordpress e vengono visualizzati a video all'utente.


  • User Attivo

    Ok, è che a volte è veramente un problema WP+ SQL con i caratteri speciali.

    Anche io tempo fa,
    ho dovuto abbandonare il mio script di migrazione "all php" per convertirlo in uno script che utilkizzava in parte le f(x) native di wordpress,
    perchè con i caratteri speciali era un disastro e mi generava un sacco di errori.

    Alal fine ho utilizzato wp_insert_post + alcuni accorgimento
    avevo scritto un post qui dove spiegavo la cosa:
    blog.artigianidelweb.it/2015/03/wordpress-wpdb-get-var-e-apostrofi.html


  • User Attivo

    Esempio pratico:

        $autore_esc = esc_sql($autore);     
    
    
    > 
    // iterate all objects
    foreach( $posts_it as $pit ){
    
        $idrif = $pit->id;    
        $autore = $pit->autore;
    

    ** $autore_esc = esc_sql($autore); **

      [...]
    
            $update_autori =  $wpdb->update(
                    'wp_posts', //Tabella
                array('ID' => $idrif), // WHERE conditions Array                                  
                array( 'post_author' => $autore_wp_id), // Data            
                array( '%d' ),    
                array( '%d' )                     
        );        
    
    
        
        
        
    }

  • Super User

    Grazie,
    ma come dicevo ho necessità di eseguire la query su MySQL direttamente.


  • User Attivo

    Ok, allora prova questo:

    blog.artigianidelweb.it/2013/10/mysql-evitare-lecape-del-backslash.html

    ( SET SESSION sql_mode='NO_BACKSLASH_ESCAPES ) 🙂

    ---> dovrebeb aiutarti con i BACKSLASH

    mentre, per i caratteri speciali,
    io agirei sempre via PHP, ovvero: farei degli script dio conversione dei caratteri speciali da PHP, usando comqunue delle funzioni di pulizia di php

    php.net/manual/en/function.htmlspecialchars.php

    Quidi utilizzi MYSQL + PHP
    penso sia la soluzione migliore per lavorare con i caratteri speciali, MYSQL direttamente non ha molte funzioni che le gestiscano.


  • Super User

    Grazie, vedrò di testarlo e comunicherò l'esito appena possibile! 🙂


  • User Attivo

    Guarda,
    se può esserti utile ti incollo qui un pò di vecchio codice in php per fare il passaggio da DB 1 a DB2 (WORDPRESS)

    --------> NATURALMENTE E' SOLO UNA BOZZA, VA MODIFICATO COME VUOI ED AGGIUNGERE LE FUNZIONI PHP PER LAVORARE SULLA PULIZIA E CONVERSIONE DEUI CARATTERI SPECIALI

    <?

    //PARAMETRI DI CONESSIONE AL DB 1
    $DB_host1     = 'localhost';
    $DB_user1     = 'sitovecchio';
    $DB_password1 = 'sitovecchio';
    $DB_name1     = 'sitovecchio';
    
    //CONNESSIONE 1
    $link1 = mysql_connect($DB_host1, $DB_user1, $DB_password1);
    if (!$link1) {
        die ('Non riesco a connettermi 1: ' . mysql_error());
    } else {echo 'Connesso a mysql 1<br>';}
    //SELEZIONE DB 1
    $db_selected1 = mysql_select_db($DB_name1, $link1);
    if (!$db_selected1) {
        die ("Errore nella selezione del database 1: " . mysql_error());
    }else {echo 'Connesso al db 1<br>';}
    
    
    
    //PARAMETRI DI CONESSIONE AL DB 2  - wordpress
    $DB_host2     = 'localhost';
    $DB_user2     = 'wordpress';
    $DB_password2 = 'wordpress';
    $DB_name2     = 'wordpress';
    
    //CONNESSIONE 2
    $link2 = mysql_connect($DB_host2, $DB_user2, $DB_password2);
    if (!$link2) {
        die ('Non riesco a connettermi 2: ' . mysql_error());
    } else {echo 'Connesso a mysql 2<br>';}
    //SELEZIONE DB 2
    $db_selected2 = mysql_select_db($DB_name2, $link2);
    if (!$db_selected2) {
        die ("Errore nella selezione del database 2: " . mysql_error());
    }else {echo 'Connesso al db 2<br>';}
    
    
    
    
    
    $results = mysql_query("SELECT * FROM  nometabella",$link1);
    $i = 0;
    
    while ($row = mysql_fetch_array($results,MYSQL_ASSOC)) {
        
        
            $post = array();
            $post['post_status'] = 'publish';
            $post['post_category'] = array(4);
            $post['post_date'] = date('Y-m-d H:i:s');
            $post['post_title'] = $row['NOME'];
            $post['post_content'] = $row['DESCRIZIONE'];
            $titolo = $post['post_title']; 
            $contenuto = $post['post_content'];
    
    
            /* Inserisce i contenuti in WP post */     
            $sql1 = "     
            INSERT INTO `wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES
            ('', 1, '2014-10-28 09:08:42', '2014-10-28 08:08:42', '$contenuto', 
            '$titolo', '', 'publish', 'closed', 'closed', '', 'pagina-di-esempio',
            '', '', '2014-10-28 09:08:42', '2014-10-28 08:08:42', '', 0, '', 0, 'page', '', 0)";
    
            $query1 = @mysql_query ($sql1);
            if (!$query1){echo "<h2>Errore sql </h2>"; }
    
    
     
      $posts* = $post;
      $i++;
    }    
    

    mysql_close ($link1);
    mysql_close ($link2);
    ?>


  • User Attivo

    PS:

    scusa, voelvo postare il codice dentro il tag "CODE", ma non lo trovo nell'editor del forum, come si fa?

    s21.postimg.org/xrhi4k8kn/CODE.jpg

    (Ho editor avanzato neklle impostazione del forum)


  • Super User

    Devi usare il shortcode
    [ code]

    [ /code]

    rimuovi lo spazio dopo la prima parentesi!


  • User Attivo

    ottimo grazie!
    Fra l'altro ho visto che se si risponde su "modalità avanzata" si vede anche il TAG per il bbcode [code]! :figo2:

    Grazie mille,
    e fammi sapere come va con lo script!;)