使用TERM_TASTIONY_ID值设置wp_postmeta的MySQL查询

时间:2011-12-30 作者:Mike Hudson

我需要设置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?

3 个回复
最合适的回答,由SO网友:deadlyhifi 整理而成

我想我知道你的意思,如果是这样的话,这实际上是一个简单的操作。

首先get all the object_ids来自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, 所以,如果它不完美,那就很接近了。

结束

相关推荐

AJAX wp-MySQL运行太慢

我做了一个ajax函数,它返回所有以特定字母开头的帖子,假设用户单击字母a,那么所有以字母a开头的帖子都会显示出来,无论我如何成功地运行此函数,但前提是我使用普通mysql,但我想使用wp mysql,我的代码将代表我;)echo $_GET[\'letter\']; $getLetter = $_GET[\'letter\']; global $wpdb; global $post; $result = $wpdb->get_results(\'SELEC