红穆笔记
首頁 程序筆記 wordpress 操作數據庫的一次記錄
程序筆記 wordpress

wordpress 操作數據庫的一次記錄

wordpress 操作数据库的一次记录

記錄一下自己的代碼,主要功能爲WordPress數據庫鏈接與操作,我覺得以後可能會用到,所以就再次記錄一下,等下次使用的話,我就可以直接複製黏貼了,事實證明,記筆記真的可以偷懶

第一次代碼

<?php
// 引入WordPress的核心文件
require_once(dirname(__FILE__) . '/wp-load.php');

// 連接數據庫
$host = 'localhost';
$user = '';
$password = 'G2b8pG83Ypnk8rMR';
$database = '';

$mysqli = new mysqli($host, $user, $password, $database);

if ($mysqli->connect_errno) {
    die('連接失敗: ' . $mysqli->connect_error);
}

// 執行查詢操作
global $wpdb;
$table_name = $wpdb->prefix . 'posts'; // 獲取表名
$sql = "SELECT id, post_title as title, post_content as content, guid as link FROM {$wpdb->prefix}posts WHERE `post_type` = 'post'";
// `post_content` LIKE '%class=\"panel-body\"%' and 
$result = $mysqli->query($sql);

// 循環判斷並處理數據
if ($result !== false) {
    foreach ($result as $row) {
        $content = $row['content'];

        /* 使用正則表達式匹配所有的a標籤,正則:/<a\s+[^>]*?href=[\'"]([^\'"]*?)[\'"][^>]*?>/i */
        
        // 使用正則表達式匹配所有子頁面的具體鏈接
        $matches = [];
        preg_match_all('/【--(.*?)--】/i', $content, $matches);
        if(!empty($matches[1])){
            $herf = "/{$row['id']}/";
            $href_array[$herf] = $matches[1][0];
            echo "成功匹配子頁面信息,本站子頁面鏈接【<a href='{$herf}' style='color:green;' target='_blank'><b>{$herf}</b></a>】,採集站頁面鏈接【{$matches[1][0]}】,標題爲【<a href='{$herf}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>";
        }
    }
    $num = count($href_array);
    echo "<p>共計{$num}個子頁面</p>";
}

// 循環判斷並處理數據2
if ($result !== false) {
    foreach ($result as $row) {
        
        $content = $row['content'];
        
        foreach ($href_array as $k=>$v){
            $original_content = $content;
            $content = str_replace("href=\"{$v}\"","href=\"{$k}\"",$content);
            if ($content !== $original_content) {
                echo "----查詢到一個子頁面鏈接,已將子頁面鏈接修正至本站,鏈接【<a href='{$k}' style='color:green;' target='_blank'><b>{$k}</b></a>】<br>";
            }
        }
        
        // 更新文章內容
        $sql = "UPDATE {$wpdb->prefix}posts SET post_content = '{$content}' WHERE ID = {$row['id']}";
        $mysqli->query($sql);

        if ($mysqli->errno) {
            die('更新失敗: ' . $mysqli->error);
        }else{
            echo "已處理文章【<a href='{$row['link']}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>";
        }

        // 更新文章發佈時間和修改時間
        $wpdb->update(
            "{$wpdb->prefix}posts",
            array(
                // 'post_modified' => current_time('mysql'),
                'post_modified_gmt' => current_time('mysql', 1)
            ),
            array('ID' => $row['id'])
        );
        
        // 處理文章
        // if (isset($matches[1])) {
        //     $targetDiv = $matches[0];
        //     print_r($targetDiv);
        //     // 在目標 <div> 元素中使用正則表達式匹配文章標題,並修改爲帶鏈接的形式
        //     preg_match_all('/<h\d>(.*?)<\/h\d>/is', $targetDiv, $matches);

        //     foreach ($matches[1] as $match) {
        //         if (strpos($content, $match) !== false && $match !== $row['title']) {
        //             $link = '<a href="' . $row['link'] . '">' . $row['title'] . '</a>';
        //             $targetDiv = str_replace($match, $match . $link, $targetDiv);
        //         }
        //     }

        //     // 替換原文中的目標 <div> 元素爲修改後的內容
        //     $content = str_replace($matches[0], $targetDiv, $content);

        //     // 更新文章內容
        //     $sql = "UPDATE {$wpdb->prefix}posts SET post_content = '{$content}' WHERE ID = {$row['id']}";
        //     $mysqli->query($sql);

        //     if ($mysqli->errno) {
        //         die('更新失敗: ' . $mysqli->error);
        //     }

        //     // 更新文章發佈時間和修改時間
        //     $wpdb->update(
        //         "{$wpdb->prefix}posts",
        //         array(
        //             'post_modified' => current_time('mysql'),
        //             'post_modified_gmt' => current_time('mysql', 1)
        //         ),
        //         array('ID' => $row['id'])
        //     );
        // }
    }
}

// 關閉數據庫連接
$mysqli->close();

第一次代碼優化

<?php
// 引入WordPress的核心文件
require_once(dirname(__FILE__) . '/wp-load.php');

// 連接數據庫
$host = 'localhost';
$user = '';
$password = 'G2b8pG83Ypnk8rMR';
$database = '';

$mysqli = new mysqli($host, $user, $password, $database);

if ($mysqli->connect_errno) {
    die('連接失敗: ' . $mysqli->connect_error);
}

// 執行查詢操作
global $wpdb;
$table_name = $wpdb->prefix . 'posts'; // 獲取表名
$sql = "SELECT id, post_title as title, post_content as content, guid as link FROM {$wpdb->prefix}posts WHERE `post_type` = 'post'";
$result = $mysqli->query($sql);

// 判斷查詢結果
if ($result !== false) {
    $href_array = array(); // 存儲子頁面鏈接
    while ($row = $result->fetch_assoc()) {
        $content = $row['content'];

        /* 使用正則表達式匹配所有的a標籤,正則:/<a\s+[^>]*?href=[\'"]([^\'"]*?)[\'"][^>]*?>/i */

        // 使用正則表達式匹配所有子頁面的具體鏈接
        $matches = [];
        preg_match_all('/【--(.*?)--】/i', $content, $matches);
        if (!empty($matches[1])){
            $herf = "/{$row['id']}/";
            $href_array[$herf] = $matches[1][0];
            echo "成功匹配子頁面信息,本站子頁面鏈接【<a href='{$herf}' style='color:green;' target='_blank'><b>{$herf}</b></a>】,採集站頁面鏈接【{$matches[1][0]}】,標題爲【<a href='{$herf}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>";
        }
    }
    $num = count($href_array);
    echo "<p>共計{$num}個子頁面</p>";

    // 循環更新文章內容
    foreach ($href_array as $k => $v) {
        $sql = "UPDATE {$wpdb->prefix}posts SET post_content = REPLACE(post_content, 'href=\"{$v}\"', 'href=\"{$k}\"') WHERE post_content LIKE '%href=\"{$v}\"%' AND `post_type` = 'post'";
        $mysqli->query($sql);

        if ($mysqli->errno) {
            die('更新失敗: ' . $mysqli->error);
        } else {
            echo "已處理文章【<a href='{$row['link']}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>";
        }
    }

    // 更新文章發佈時間和修改時間
    $wpdb->query("UPDATE {$wpdb->prefix}posts SET post_modified = NOW(), post_modified_gmt = UTC_TIMESTAMP() WHERE `post_type` = 'post'");
}

// 關閉數據庫連接
$mysqli->close();

第二次更新,新增加緩存功能.....主要是服務器503警告

<?php
// 引入WordPress的核心文件
require_once(dirname(__FILE__) . '/wp-load.php');

// 連接數據庫
$host = 'localhost';
$user = 'www_coserhub_net';
$password = 'G2b8pG83Ypnk8rMR';
$database = 'www_coserhub_net';

// 採集站的網站地址
$site_caiji = "https://www.cosjidi01.com";

$mysqli = new mysqli($host, $user, $password, $database);

if ($mysqli->connect_errno) {
    die('連接失敗: ' . $mysqli->connect_error);
}

// 執行查詢操作
global $wpdb;
$table_name = $wpdb->prefix . 'posts'; // 獲取表名

$cache_file = "子頁面鏈接.json";
if(file_exists($cache_file)){
    if (time() - filectime($cache_file) > 180) {
        unlink($cache_file);
        echo("會話過期,已刪除之前緩存文件!");
        $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
        echo '<meta http-equiv="refresh" content="2; url='.$url.'">';
        die();
    }
}
// 默認查詢全部數據
$sql = "SELECT id, post_title as title, post_content as content, guid as link 
        FROM {$wpdb->prefix}posts 
        WHERE `post_type` = 'post' ";
// 判斷是否傳入參數控制偏移量
if (isset($_GET['next'])) {
    $offset = intval($_GET['next']);
    $sql .= " AND post_content  NOT LIKE '%【--/pic/%' LIMIT 100 OFFSET $offset";
}
$result = $mysqli->query($sql);

if(file_exists($cache_file)){
    // 循環判斷並處理數據
    $href_array = json_decode(file_get_contents($cache_file),true);
    $next_id = $offset + 100;
    $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?next=$next_id";
    // 循環判斷並處理數據2
    if ($result !== false) {
        echo "<p>點擊<a href='{$url}'>下一步</a>開始處理下一個一百條</p>{$html}";
        foreach ($result as $row) {
            echo "處理文章【<a href='{$row['link']}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>";
            $content = $row['content'];
            foreach ($href_array as $k=>$v){
                $original_content = $content;
                $content = str_replace("href=\"{$v}\"","href=\"{$k}\"",$content);
                if ($content !== $original_content) {
                    echo "----查詢到一個子頁面鏈接,已將子頁面鏈接修正至本站,鏈接【<a href='{$k}' style='color:green;' target='_blank'><b>{$k}</b></a>】<br>";
                }
            }
            foreach ($href_array as $k=>$v){
                $original_content = $content;
                $v = $site_caiji.$v;
                $content = str_replace("href=\"{$v}\"","href=\"{$k}\"",$content);
                if ($content !== $original_content) {
                    echo "----查詢到一個子頁面鏈接,已將子頁面鏈接修正至本站,鏈接【<a href='{$k}' style='color:green;' target='_blank'><b>{$k}</b></a>】<br>";
                }
            }
            // 更新文章內容
            $sql = "UPDATE {$wpdb->prefix}posts SET post_content = '{$content}' WHERE ID = {$row['id']}";
            $mysqli->query($sql);
    
            if ($mysqli->errno) {
                die('更新失敗: ' . $mysqli->error);
            }else{
                echo "成功更新文章【<a href='{$row['link']}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>";
            }
    
            // 更新文章發佈時間和修改時間
            $wpdb->update(
                "{$wpdb->prefix}posts",
                array(
                    // 'post_modified' => current_time('mysql'),
                    'post_modified_gmt' => current_time('mysql', 1)
                ),
                array('ID' => $row['id'])
            );
        }
    }
}else{
    
    if ($result !== false) {
        
        foreach ($result as $row) {
            $content = $row['content'];
            /* 使用正則表達式匹配所有的a標籤,正則:/<a\s+[^>]*?href=[\'"]([^\'"]*?)[\'"][^>]*?>/i */
            // 使用正則表達式匹配所有子頁面的具體鏈接
            $matches = [];
            preg_match_all('/【--(.*?)--】/i', $content, $matches);
            if(!empty($matches[1])){
                $herf = "/{$row['id']}/";
                $href_array[$herf] = $matches[1][0];
                $html .= "成功匹配子頁面信息,本站子頁面鏈接【<a href='{$herf}' style='color:green;' target='_blank'><b>{$herf}</b></a>】,採集站頁面鏈接【{$matches[1][0]}】,標題爲【<a href='{$herf}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>";
            }
        }
        $num = count($href_array);
        file_put_contents($cache_file,json_encode($href_array));
        $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?next=1";
        echo "<p>已匹配到{$num}個子頁面,點擊<a href='{$url}'>下一步</a>開始處理前一百條</p>{$html}";
    }
}

// 關閉數據庫連接
$mysqli->close();

第二次,優化後的:

<?php
// 引入WordPress的核心文件
require_once(dirname(__FILE__) . '/wp-load.php');

// 連接數據庫
$host = 'localhost';
$user = '';
$password = '';
$database = '';

// 採集站的網站地址
$site_caiji = "";

$mysqli = new mysqli($host, $user, $password, $database);

if ($mysqli->connect_errno) {
    die('連接失敗: ' . $mysqli->connect_error);
}

// 執行查詢操作
global $wpdb;
$table_name = $wpdb->prefix . 'posts'; // 獲取表名

$cache_file = "子頁面鏈接.json";
if(file_exists($cache_file)){
    if (time() - filectime($cache_file) > 180) {
        unlink($cache_file);
        echo("會話過期,已刪除之前緩存文件!");
        $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
        echo '<meta http-equiv="refresh" content="2; url='.$url.'">';
        die();
    }
}

// 默認查詢全部數據
$sql = "SELECT id, post_title as title, post_content as content, guid as link 
        FROM {$wpdb->prefix}posts 
        WHERE `post_type` = 'post' ";

// 判斷是否傳入參數控制偏移量
if (isset($_GET['next'])) {
    $offset = intval($_GET['next']);
    $sql .= " AND post_content  NOT LIKE '%【--/pic/%' LIMIT 100 OFFSET $offset";
}

$result = $mysqli->query($sql);

if(file_exists($cache_file)){
    // 循環判斷並處理數據
    $href_array = json_decode(file_get_contents($cache_file), true);
    $next_id = $offset + 100;
    $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?next=$next_id";

    // 循環判斷並處理數據2
    if ($result !== false) {
        $html = '';
        foreach ($result as $row) {
            $html .= processArticle($row, $href_array, $site_caiji);
        }
        echo "<p>點擊<a href='{$url}'>下一步</a>開始處理下一個一百條</p>{$html}";
    }
}else{
    if ($result !== false) {
        $html = '';
        $href_array = [];
        foreach ($result as $row) {
            $html .= processContent($row, $href_array);
        }
        $num = count($href_array);
        file_put_contents($cache_file, json_encode($href_array));
        $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?next=1";
        echo "<p>已匹配到{$num}個子頁面,點擊<a href='{$url}'>下一步</a>開始處理前一百條</p>{$html}";
    }
}

// 關閉數據庫連接
$mysqli->close();

function processArticle($row, &$href_array, $site_caiji) {
    $html = '';
    $content = $row['content'];
    foreach ($href_array as $k => $v) {
        $original_content = $content;
        $content = str_replace("href=\"{$v}\"","href=\"{$k}\"",$content);
        if ($content !== $original_content) {
            $html .= "----查詢到一個子頁面鏈接,已將子頁面鏈接修正至本站,鏈接【<a href='{$k}' style='color:green;' target='_blank'><b>{$k}</b></a>】<br>";
        }
    }
    foreach ($href_array as $k => $v) {
        $original_content = $content;
        $v = $site_caiji.$v;
        $content = str_replace("href=\"{$v}\"","href=\"{$k}\"",$content);
        if ($content !== $original_content) {
            $html .= "----查詢到一個子頁面鏈接,已將子頁面鏈接修正至本站,鏈接【<a href='{$k}' style='color:green;' target='_blank'><b>{$k}</b></a>】<br>";
        }
    }
    // 更新文章內容
    $sql = "UPDATE {$wpdb->prefix}posts SET post_content = '{$content}' WHERE ID = {$row['id']}";
    $mysqli->query($sql);

    if ($mysqli->errno) {
        die('更新失敗: ' . $mysqli->error);
    }else{
        $html .= "成功更新文章【<a href='{$row['link']}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>";
    }

    // 更新文章發佈時間和修改時間
    $wpdb->update(
        "{$wpdb->prefix}posts",
        array(
            // 'post_modified' => current_time('mysql'),
            'post_modified_gmt' => current_time('mysql', 1)
        ),
        array('ID' => $row['id'])
    );

    return "處理文章【<a href='{$row['link']}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>" . $html;
}

function processContent($row, &$href_array) {
    $content = $row['content'];
    /* 使用正則表達式匹配所有的a標籤,正則:/<a\s+[^>]*?href=[\'"]([^\'"]*?)[\'"][^>]*?>/i */
    // 使用正則表達式匹配所有子頁面的具體鏈接
    $matches = [];
    preg_match_all('/【--(.*?)--】/i', $content, $matches);
    if (!empty($matches[1])) {
        $herf = "/{$row['id']}/";
        $href_array[$herf] = $matches[1][0];
        return "成功匹配子頁面信息,本站子頁面鏈接【<a href='{$herf}' style='color:green;' target='_blank'><b>{$herf}</b></a>】,採集站頁面鏈接【{$matches[1][0]}】,標題爲【<a href='{$herf}' style='color:green;' target='_blank'><b>{$row['title']}</b></a>】<br>";
    }
    
    return '';
}
微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

wordpress怎么取消修订和自动保存草稿?

wordpress怎麼取消修訂和自動保存草稿? 程序筆記 wordpress

WordPress自動儲存文章修訂版本記錄的功能,當你每編輯一次文章時,就會在後臺記錄一次,每次修訂都會在posts表中插入一條記錄。由於文章修訂與自動保存的干預,往往會使得文章的ID越來越大。雖然不會對於你的Wordpress運行造成很大的麻煩,但是文章版本過多的話會給你的空間和數據庫增加很大的負…
👁 373
帝国cms博客数据迁移至wordpress详细教程

帝國cms博客數據遷移至wordpress詳細教程 程序筆記 wordpress

PS1:第二次修改,目前已支持分類,文章,tag三者數據轉移PS2:如果文章ID一直對不齊,可以嘗試清空WordPress的文章分類數據表,關係表我之前博客用typecho,後來遷移到帝國,但是帝國功能太多了,博客用帝國有點大材小用的感覺!再者,我用博客我常記錄一些重要的代碼,這些代碼都是我辛辛苦苦…
👁 546
wordpress关于图片转码导致页面卡死的问题

wordpress關於圖片轉碼導致頁面卡死的問題 程序筆記 wordpress

昨晚上在上傳圖片的時候,不知道怎麼回事,然後上傳的圖片自動轉碼了轉碼類型:BASE64編碼網站上面一張圖,你放服務器上,然後訪問鏈接,這樣圖片就顯示了但還有一種辦法,那就是直接將圖片轉碼,這樣直接訪問轉換好的CODE便可以訪問問題描述:當圖片比較小,只有幾kb的時候,轉碼然後設置在網站上,這樣可以避…
👁 152
wordpress 数据库查询操作

wordpress 數據庫查詢操作 程序筆記 wordpress

首先鏈接數據庫要連接WordPress數據庫,需要在PHP文件中引入wp-config.php文件。該文件包含有關WordPress安裝的數據庫配置信息和其他常量。以下是一個簡單的示例,展示如何引入wp-config.php文件並獲取數據庫連接:// 引入 wp-config.php 文件 requ…
👁 378
WordPress MySQL数据库表和分表结构功能说明

WordPress MySQL數據庫表和分表結構功能說明 程序筆記 wordpress

WordPress使用MySQL數據庫。數據表結構與常規有些差異,數據內容有常規的以數據表方式記錄,也有以數據元方式記錄,數據元方式在直接查看時不太直觀。想成爲一個開發者,我們必須掌握WordPress數據庫的基本結構,並在自己的插件或主題中使用他們,寫入或讀出數據。一、數據表截至WordPress…
👁 374

推薦閱讀

jquery 常用代码

jquery 常用代碼 語言筆記 JavaScript

hover事件: &lt;script&gt; &nbsp;&nbsp; &nbsp;$(function () { &nbsp;&nbsp; &nbsp;$(&quot;.pro_box a&quot;).hover(function(){ &nbsp;&nbsp; &nbsp;&nbsp;&nb…
👁 154
(自适应手机端)响应式文化传媒公司网站pbootcms模板 娱乐主播直播培训类网站源码下载 0287

(自適應手機端)響應式文化傳媒公司網站pbootcms模板 娛樂主播直播培訓類網站源碼下載 0287 實用收藏 pbootcms模板

本套自適應手機端的響應式文化傳媒公司PbootCMS網站模板。設計風格娛樂時尚,適合娛樂主播、直播培訓類公司展示業務與藝人。有助於文化傳媒公司在線上吸引主播與合作資源。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.cn相關文章Pbo…
👁 58
(自适应手机端)酒店床上用品英文外贸网站模板 - 带下载功能和三级栏目 0982

(自適應手機端)酒店牀上用品英文外貿網站模板 - 帶下載功能和三級欄目 0982 實用收藏 pbootcms模板

一款酒店牀上用品英文外貿PbootCMS網站模板,支持PC與WAP端,帶下載功能和三級欄目。設計風格專業國際,適合酒店布草外貿企業展示產品與品牌。有助於外貿企業在全球市場上進行品牌推廣。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.…
👁 41
家居设计工作室网站模板 0518

家居設計工作室網站模板 0518 實用收藏 易優模板

一款針對家居設計工作室的eyoucms網站模板。設計風格創意現代,能夠展示家居設計作品、空間方案、設計理念及品牌故事。有助於家居設計工作室在線上展示實力,吸引業主與開發商。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優C…
👁 40