我需要设置wp_postmeta
值(表中:wp_postmeta
) 在每个有特定term_taxonomy_id
(表中:wp_term_relationships
):
具体而言:
对每个post_ID
那已经term_taxonomy_id
如果wp_postmeta
为此post_ID
不包含_category_permalink_
然后用设置为18的值添加它,否则忽略它,因为我的MySQL foo很差,所以如果这没有意义,或者我的表和名称有误,请道歉。
UPDATE:关于@deadlyhifi和@Jot的以下回答/评论,我有以下内容:
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?
最合适的回答,由SO网友:deadlyhifi 整理而成
我想我知道你的意思,如果是这样的话,这实际上是一个简单的操作。
首先get all the object_id
s来自term_relationship
桌子
$results = $wpdb->get_results("SELECT `object_id` FROM $wpdb->term_relationships WHERE `term_taxonomy_id` = 18");
然后遍历这些值
update_post_meta 至18。
foreach ( $results as $result )
update_post_meta($result, \'_category_permalink_\', \'18\', true);
不会那么简单吧?
SO网友:kovshenin
@deadlyhifi的答案看起来不错。我建议试试WP_Query
虽然要获得更具可读性的“select”语句,假设您的术语taxonomy 18是foo
类别,这是与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 );
}
您还可以使用
\'cat\' => 18
如果你需要遵守ID。它肯定不会比@deadlyhifi提到的直接SQL方法快,但它看起来更友好。
SO网友:mor7ifer
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\' );
}
假设@kovshenin的方法不起作用,应该为您做这件事,因为它确实是更好的方法(尽管我可能会尝试foreach而不是while,但两者都是有效的)。
我没有直接测试这个,但我已经测试了查询并检查了上的输出$obj_ids
, 所以,如果它不完美,那就很接近了。