Domanda

Ho un plugin che crea una nuova tabella di database. Attivando il plugin c'è un modo per inserire tutti i miei post id in quel tavolo?

In questo momento sto utilizzando un gancio azione per immediatamente inserto l'id di nuovi posti che pubblico.

function transfer_post_id($post_ID)  {
global $wpdb;
   if (!($wpdb->get_row("SELECT post_id FROM $my_table WHERE post_id = $post_ID" ) ) ) { //if post id not already added
      $wpdb->insert( $my_table, array( 'post_id' => $post_ID ) );      
   }
   return $post_ID;
}

add_action ( 'publish_post', 'transfer_post_id' );

Per quanto ci sono messaggi prima di attivare il plug-in che ho bisogno di un modo per inserire senza aggiornare manualmente ciascuno di essi.

È stato utile?

Soluzione

In questo modo:

INSERT INTO $mytable (post_id)
SELECT ID
FROM $wpdb->posts as posts
LEFT JOIN $mytable as dup_check
ON dup_check.post_id = posts.ID
WHERE dup_check.post_id IS NULL;

Altri suggerimenti

È possibile progettare il vostro tavolo in modo tale che un un ID può esiste solo una volta utilizzando una chiave. È quindi possibile eseguire un inserto in query che seleziona i valori ID esistente direttamente con una selezione secondaria.

in questo modo ( Denis ):

INSERT INTO $mytable (post_id)
SELECT ID
FROM $wpdb->posts as posts
LEFT JOIN $mytable as dup_check
ON dup_check.post_id = posts.ID
WHERE dup_check.post_id IS NULL;

Controllare il manuale di MySQL per quanto riguarda la sintassi del href="http://dev.mysql.com/doc/refman/5.1/en/insert.html" rel="nofollow noreferrer"> INSERT .

Mi dispiace tanto! Ho perso login ti prego di perdonarmi, a quanto pare ho usato una e-mail corretto. Mi metterò in contatto con l'amministratore forum per vedere come posso recuperare il nome utente ..

Denis grazie per il codice!

Lo sto usando in questo modo

   $my_table = $wpdb->prefix . "rated_posts";

   $wpdb->query( "INSERT INTO $my_table (rated_post_id)
                SELECT ID
                FROM $wpdb->posts as posts
                LEFT JOIN $my_table as dup_check
                ON dup_check.rated_post_id = posts.ID
                WHERE dup_check.rated_post_id IS NULL" ); 

I disattivato il plugin e dopo l'attivazione di prova, ottengo

Il plugin ha generato 663 caratteri uscita imprevisto durante l'attivazione. Se si nota “headers already sent” messaggi, problemi con syndication feed o altri problemi, prova disattivare o rimuovere questo plugin.

Ho wp_debug su ma non sto ricevendo errori descritti.

scroll top