Consulta MySQL para definir wp_postmeta usando term_taxonomy_id value

Tenho a necessidade de definir o valor wp_postmeta (na tabela: wp_postmeta ) em cada publicação que tenha um term_taxonomy_id específico (na tabela: wp_term_relationships ):

Especificamente:

  • execute uma consulta contra cada post_ID que tenha term_taxonomy_id valor de 18
  • se o wp_postmeta para esse post_ID não contiver a chave de _category_permalink_ , adicione-o com o valor definido como 18, caso contrário ignore-o

Meu MySQL foo é pobre, então desculpe se isso não faz sentido ou eu tenho mesas, nomes no caminho errado.

UPDATE: Em relação a respostas / comentários abaixo por @deadlyhifi e @Jot eu tenho o seguinte:

 function cleanup_permalink() { static $fnCount = 0; //to run only once if ($fnCount) return; $fnCount++; global $wpdb; $results = $wpdb->get_results("SELECT `object_id` FROM $wpdb->term_relationships WHERE `term_taxonomy_id` = 18"); foreach ($results as $result) { add_post_meta( $result, '_category_permalink_', '18', true); } } add_action('init','cleanup_permalink'); //i'm assuming init is the best place? 

Solutions Collecting From Web of "Consulta MySQL para definir wp_postmeta usando term_taxonomy_id value"

Eu acho que sei o que você quer dizer, e se for esse o caso, é realmente uma operação direta.

Em primeiro lugar, obtenha todos os object_id s da tabela term_relationship .

 $results = $wpdb->get_results("SELECT `object_id` FROM $wpdb->term_relationships WHERE `term_taxonomy_id` = 18"); 

E, em seguida, execute cada um desses valores e update_post_meta para 18.

 foreach ( $results as $result ) update_post_meta($result, '_category_permalink_', '18', true); 

Não poderia ser tão simples poderia?

A resposta da deadlyhifi parece ser boa. Eu sugeriria experimentar WP_Query porém, para uma declaração “seletiva” legível mais humana, suponha que seu termo taxonomia 18 seja a categoria foo , aqui é o equivalente com WP_Query :

 $query = new WP_Query( array( 'posts_per_page' => -1, 'category_name' => 'foo', // slug, not name! ) ); while ( $query->have_posts() ) { $query->the_post(); update_post_meta( get_the_ID(), '_category_permalink_', 18, true ); } 

Você também pode usar 'cat' => 18 se precisar ficar com os IDs. Definitivamente, não é mais rápido do que o método SQL direto mencionado pelo @deadlyhifi, mas é mais amigável.

 global $wpdb; $query = 'SELECT `object_id` FROM '.$wpdb->term_relationships.' WHERE `term_taxonomy_id`=18'; $obj_ids = $wpdb->get_col( $query ); foreach( $obj_ids as $post_id ) { update_post_meta( $post_id, '_category_permalink_', '18' ); } 

Deveria fazê-lo por você, assumindo que o método do @ kovshenin não funciona, pois é o melhor método com certeza se o faz (embora eu possa tentar um foreach em vez do tempo, pessoalmente, seja válido).

Eu não testei diretamente isso, mas testei a consulta e verifiquei a saída em $obj_ids , então, se não for perfeito, está perto.