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 '';
}
© 版权声明
THE END
喜欢就支持一下吧
点赞12
评论 抢沙发

请登录后发表评论

    暂无评论内容