2019独角兽企业重金招聘Python工程师标准>>>

1.代码懒得细看,先打上sql日志。

2.经过分析主要操作了posts,terms,term_taxonomy,term_relationships, postmeta,options这几个表,首先去掉postmeta,options这两个表的日志,主要记录后台手动编辑记录,用处不大,不需要处理。

3.posts是文章主表,terms是标签表(也包括菜单栏目等),term_taxonomy是标签详情表,term_relationships是文章,标签,栏目id关联表

4.更新逻辑是:

1)向文章主表posts插入文章,返回文章id

2)查询items表标签是否存在,存在返回标签id,不存在插入标签,返回标签id

3)向term_taxonomy插入分类,统计等记录

4)向term_relationships插入文章,栏目关联记录和文章标签关联记录

下面是代码,已经过自测

<?php
class db{

private static $db;
        public function __construct(){

}

public static function getInstance(){
                if(!self::$db){
                        self::$db = self::connectdb();
                }

return self::$db;
        }

private static function connectdb(){
                $config = include COLLECTOR_DIR.'/conf/db.config.php';
                $db = new mysqli($config['host'], $config['user'], $config['password'], $config['db']);
                !$db && die('Error,cannot connect database!');
                $db->query("set names utf8");
                return $db;
        }

}

<?php
class postInterface{

private $db;
    private static $term_taxonomy_id;

public function __construct(){
        $this->db = db::getInstance();
        self::$term_taxonomy_id = [];
    }

public function getPost($post_title){
        $sql = "SELECT ID FROM `pn_posts` WHERE `post_title`='{$post_title}' LIMIT 0, 1";
        
        DEBUG && print($sql)."\n";

$result = $this->db->query($sql);

$row = $result->fetch_assoc();

return $row['ID'];
    }

public function insertPost($post_title, $post_name, $post_content, $post_date){
        $post_id =$this->getPost($post_title);
        if($post_id){
            return $post_id;
        }

$sql = "INSERT IGNORE INTO `pn_posts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_content_filtered`, `post_title`, `post_excerpt`, `post_status`, `post_type`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_parent`, `menu_order`, `post_mime_type`, `guid`) VALUES (1, '{$post_date}', '{$post_date}', '{$post_content}', '', '{$post_title}', '', 'publish', 'post', 'open', 'open', '', '{$post_name}', '', '', '{$post_date}', '{$post_date}', 0, 0, '', '');";

DEBUG && print($sql)."\n";

$this->db->query($sql);

$post_id = $this->db->insert_id;

$sql = "UPDATE `pn_posts` SET `guid`='/?p={$this->db->insert_id}' WHERE `ID`='{$this->db->insert_id}' LIMIT 1";
        DEBUG && print($sql."\n");
        $this->db->query($sql);
        
        return $post_id;
    }

public function getTagInfo($tag){
        $sql = "SELECT term_taxonomy_id,term_id FROM `pn_term_taxonomy` WHERE term_id IN (SELECT term_id FROM `pn_terms` WHERE name = '{$tag}') AND taxonomy = 'post_tag' LIMIT 0, 1";
        DEBUG && print($sql."\n");
        $result = $this->db->query($sql);
        $row = $result->fetch_assoc();
        return $row;
    }

public function insertTag($post_id, $cateid, $tag, $slug){
        $tag = trim($tag);    
        $tagInfo = $this->getTagInfo($tag);

if(empty($tagInfo)){
            $tagInfo = [];
                
            $sql = "INSERT INTO `pn_terms` (`name`, `slug`, `term_group`) VALUES ('{$tag}', '{$slug}', 0);";
            DEBUG && print($sql."\n");
            $this->db->query($sql);

$tagInfo['term_id'] = $this->db->insert_id;
        
            $sql="INSERT IGNORE INTO `pn_term_taxonomy` (`term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES ({$tagInfo['term_id']}, 'post_tag', '', 0, 0);";
                    DEBUG && print($sql."\n");
            $this->db->query($sql);

$tagInfo['term_taxonomy_id'] = $this->db->insert_id;
        }

$sql = "INSERT IGNORE INTO `pn_term_relationships` (`object_id`, `term_taxonomy_id`) VALUES ({$post_id}, {$tagInfo['term_taxonomy_id']});";
        DEBUG && print($sql."\n");
        $this->db->query($sql);

$term_taxonomy_id = $this->getTermTaxonomyId($cateid);
        $sql = "INSERT IGNORE INTO `pn_term_relationships` (`object_id`, `term_taxonomy_id`) VALUES ({$post_id}, {$term_taxonomy_id});";
        DEBUG && print($sql."\n");
        $this->db->query($sql);
        
        $num = $this->getTagPostNum($tagInfo['term_id']);
        $sql = "UPDATE `pn_term_taxonomy` SET `count`={$num} WHERE `term_id` = {$tagInfo['term_id']}";
        DEBUG && print($sql."\n");
        $this->db->query($sql);

$num = $this->getCategoryPostNum($cateid);
        $sql ="UPDATE `pn_term_taxonomy` SET `count` = {$num} WHERE `term_id` = {$cateid};";
        DEBUG && print($sql."\n");
        $this->db->query($sql);

}

public function getCategoryPostNum($cateid){
        $term_taxonomy_id = $this->getTermTaxonomyId($cateid);

$sql = "SELECT COUNT(*) AS num FROM `pn_term_relationships` WHERE `term_taxonomy_id` = {$term_taxonomy_id}  AND `object_id` != {$cateid}";
        DEBUG && print($sql."\n");
        $result = $this->db->query($sql);

$row = $result->fetch_assoc();

return (int)$row['num'];

}

public function getTagPostNum($tagid){
                $term_taxonomy_id = $this->getTermTaxonomyId($tagid);

$sql = "SELECT COUNT(*) AS num FROM `pn_term_relationships` WHERE `term_taxonomy_id` = {$term_taxonomy_id}  AND `object_id` != {$tagid}";
                DEBUG && print($sql."\n");
                $result = $this->db->query($sql);

$row = $result->fetch_assoc();

return (int)$row['num'];

}

public function getTermTaxonomyId($termid){
        if(isset(self::$term_taxonomy_id[$termid])){
            return self::$term_taxonomy_id[$termid];
        }

$sql = "SELECT `term_taxonomy_id` FROM `pn_term_taxonomy` WHERE `term_id` = {$termid} LIMIT 0,1";
        DEBUG && print($sql."\n");
        $result = $this->db->query($sql);

$row = $result->fetch_assoc();
        
        self::$term_taxonomy_id[$termid] = $row['term_taxonomy_id'];
                return $row['term_taxonomy_id'];
    
    }

}

/*
include 'db.class.php';

$pi = new postInterface();

$cateid = 1;
$post_title = 'AAAAAABBBBB';
$post_content = 'AAAAAA,BBBBBB';
$post_tag1 = 'AA';
$post_tag2 = 'BB';
$post_date = date("Y-m-d H:i:s");

$post_id = $pi->insertPost($post_title, $post_content, $post_date);
$pi->insertTag($post_id, $cateid, $post_tag1);
$pi->insertTag($post_id, $cateid, $post_tag2);

$post_title = 'AAAAAAABBBBBB';
$post_content = 'AAAAAAA,BBBBBBB';
$post_tag1 = 'AA';
$post_tag2 = 'BB';
$post_date = date("Y-m-d H:i:s");

$post_id = $pi->insertPost($post_title, $post_content, $post_date);
$pi->insertTag($post_id, $cateid, $post_tag1);
$pi->insertTag($post_id, $cateid, $post_tag2);
*/

注:原版的有bug,代码已更新。db类其实就是一个单列。

转载于:https://my.oschina.net/u/554660/blog/756331

wordpress文章发布接口开发相关推荐

  1. egg.js开发 文章发布接口(图片上传)(表单数据接口)

    后台的代码: 在//app/config/config.default.js文件里:  添加crsf 这也是解决post请求时 报403 foibidden的方法 //解决跨域config.secur ...

  2. WordPress文章发布失败或更新失败解决方法

    最近我的WordPress网站出现了一个问题,无法发布文章与修改文章,点击发布后会显示发布失败,修改旧文章或保存草稿则会提示更新失败,所有的内容都无法更新了, 经过一番查找才解决,这里分享下我采用的可 ...

  3. WordPress文章内容编辑,wp文章在线批量编辑,wp文章内容可视化编辑器

    WordPress文章内容更新是SEO中比较让大家焦虑的事情.每天WordPress文章内容的高质量的发布更新是一个烦杂的工作. 我们知道搜索引擎通过蜘蛛抓取我们每天更新的URL.搜索引擎会根据蜘蛛抓 ...

  4. 文章发布系统的设计与实现

    摘 要 随着计算机技术的迅速发展,网络正以一种前所未有的冲击力影响着人类的生产和生活.网络的快速发展,颠覆了传统的信息传播方式,冲破了传统的时间,空间的局限性,继而引发了人类阅读方式的变革.现如今,网 ...

  5. Spring Boot 综合示例-整合thymeleaf、mybatis、shiro、logging、cache开发一个文章发布管理系统...

    一.概述 经过HelloWorld示例(Spring Boot 快速入门(上)HelloWorld示例)( Spring Boot  快速入门 详解 HelloWorld示例详解)两篇的学习和练习,相 ...

  6. wordpress文章自动同步天涯博客插件wp2Tianya发布

    haha,第2个插件了.看到第1个插件wp2netease有人下载,有人使用,真是让人开心啊!天涯tianya.cn发博客的时候需要验证码,开始觉得这样的肯定做不了同步,后来经过分析,发现还有一个接口 ...

  7. zblog-php 火车头采集发布接口,wordpress火车头采集发布模块接口

    原创是不可能的,一辈子都不可能原创的. 给小伙伴采集某电影资源站,我也几年没玩过采集了,还到处找Wordpress的发布模块和火车头采集器. 然后又慢慢研究具体咋采集,最后搞了差不多一天,才搞定2个网 ...

  8. wordpress 外部数据接口_在WordPress中开发API接口

    相信很多朋友都有在wordpress中开发API接口的需求 其实wordpress中进行API开发也不是有多大的难度.不过我走了很多弯路,所以在这里写下方法,以免更多人再走这条弯路. 在刚接到开发wo ...

  9. 黄聪:wordpress文章同步发布到网易、天涯、新浪博客、百度空间插件

    新浪博客,网易博客,百度空间,天涯博客都是权重很高的第三方博客平台.如果能保持更新,有助于提升主站权重.有了博客同步插件,直接在wordpress 后台设置一下,wordpress 自动把更新的日志同 ...

最新文章

  1. 面向对象编程概念_如何向6岁的孩子解释面向对象的编程概念
  2. 购买绝版书的好地方——淘宝
  3. php留言簿代码,php自治简单留言板代码
  4. AI类人工智能产品经理的丛林法则
  5. SpringBoot+zxing+Vue实现前端请求后台二维码图片
  6. C# WebBrowser 取 window.open 新窗口 url的方法
  7. 剑指offer之41-45题解
  8. 了解冒泡排序选择排序
  9. html / css学习笔记-1
  10. 什么是程控交换机?程控交换机有哪些优势?
  11. Office Web Apps所需证书的申请分配部署详解
  12. 500 内部服务器错误php,如何解决php 500内部服务器错误问题
  13. Julia: Array的确很强大
  14. 易宝支付 -- 微信小程序对接
  15. 米4用linux刷机救转,小米4变砖之后如何刷机自救?大神教你小米4线刷救砖方法...
  16. JAVA计算机毕业设计基于web的民宿预定系统源码+数据库+系统+lw文档
  17. Vue工程测试Element-UI插件是否可用步骤
  18. pixi.js 实现Sprite跟随鼠标移动
  19. python基础语法大全
  20. STC12C5A60S2自主适应时钟延时函数

热门文章

  1. CSS3 (animation)
  2. 获得汉字拼音的首字母
  3. asp.net数据绑定之Eval和Bind区别
  4. Python编译出现错误SyntaxError: Non-ASCII character '\xe7' 时解决方法
  5. 单系统站内信数据库设计思路
  6. 使用 CrossOver 在 Linux运行 Windows 软件(金测OK)
  7. Js中的window.parent ,window.top,window.self 详解
  8. 激励理论在人力资源管理中的运用
  9. 9个常用iptables配置实例
  10. bzoj1131[POI2008]Sta*