WordPress刪除重復的自定義字段(Custom Fields)

本文目錄1方法1:通過phpMyAdmin刪除2方法2:通過PHP代碼刪除

自定義字段(Custom Fields)為WordPress提供瞭非常有用的擴展功能。在本地測試主題調用最近瀏覽量最多的文章的時候,發現居然存在重復的文章,查看後發現,該文章存在兩個同樣的字段 views,如下圖所示:

duplicate-custom-fields-wpdaxue_com

出現這種情況,可能是由於網站搬傢的導出導入文章造成的,下面分享兩種方法刪除重復的自定義字段(隻保留一個)。

重要提示:請先備份和下載網站的數據庫文件,然後再使用下文的方法!

方法1:通過phpMyAdmin刪除

登錄的 phpMyAdmin 面板(不會的請先自己閱讀 phpMyAdmin 相關文章),然後使用下面的 SQL 語句進行刪除即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
delete from wp_postmeta
where meta_id in (
       select *
       from (
               select meta_id
               from wp_postmeta a
               where a.meta_key = 'views'
               and meta_id not in (
                       select min(meta_id)
                       from wp_postmeta b
                       where b.post_id = a.post_id
                       and b.meta_key = 'views'
               )
       ) as x
);

delete from wp_postmeta
where meta_id in (
select *
from (
select meta_id
from wp_postmeta a
where a.meta_key = ‘views’
and meta_id not in (
select min(meta_id)
from wp_postmeta b
where b.post_id = a.post_id
and b.meta_key = ‘views’
)
) as x
);

請根據自己的實際,修改第 1、6、10 行的 wp_postmeta 的前綴 wp_(如果你的數據庫前綴不是wp_ 的話);本例的第 7 、12 行 的 views 就是要刪除的自定義字段,請自行修改。

方法2:通過PHP代碼刪除

如果你沒辦法通過phpMyAdmin操作數據庫,那你可以使用下面的方法。

1.在網站的根目錄新建一個名為 remove-duplicate-custom-fields.php 文件,復制下面的代碼到該文件,保存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
define('WP_USE_THEMES', false);
require('wp-blog-header.php');
 
    define( 'WP_DEBUG_DISPLAY', true ); 
    ini_set( 'display_errors', true );
    $allposts = get_posts('numberposts=-1&post_type=post&post_status=any');
    $keys = array('views','test_meta');//要檢索的自定義字段
    foreach ( $keys as $key ) {
        foreach( $allposts as $postinfo) {
            // 獲取(上面所填寫的)自定義字段的值
            $postmeta = get_post_meta($postinfo->ID, $key);
 
            if (!empty($postmeta) ) {
                // 刪除這篇文章的(上面所填寫的)自定義字段
                delete_post_meta($postinfo->ID, $key);
 
                // 插入一個且隻有一個(上面所填寫的)自定義字段
                update_post_meta($postinfo->ID, $key, $postmeta[0]);
            }
        }
    }
?>

<?php
define(‘WP_USE_THEMES’, false);
require(‘wp-blog-header.php’); define( ‘WP_DEBUG_DISPLAY’, true );
ini_set( ‘display_errors’, true );
$allposts = get_posts(‘numberposts=-1&post_type=post&post_status=any’);
$keys = array(‘views’,’test_meta’);//要檢索的自定義字段
foreach ( $keys as $key ) {
foreach( $allposts as $postinfo) {
// 獲取(上面所填寫的)自定義字段的值
$postmeta = get_post_meta($postinfo->ID, $key); if (!empty($postmeta) ) {
// 刪除這篇文章的(上面所填寫的)自定義字段
delete_post_meta($postinfo->ID, $key); // 插入一個且隻有一個(上面所填寫的)自定義字段
update_post_meta($postinfo->ID, $key, $postmeta[0]);
}
}
}
?>

註意修改第 8 行的字段,本例刪除的是 ‘views’和’test_meta’ 兩個字段,請自行修改(多個字段使用半角英文逗號隔開)。

2.通過瀏覽器訪問 http://你的域名/remove-duplicate-custom-fields.php,稍等片刻,即可刪除多餘的重復字段啦!

參考資料:http://wordpress.stackexchange.com/questions/15209

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *