• 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!;)