WordPress直接访问数据库列出指定分类目录下的所有文章

我的问题是:在我迁移wordpress数据库文件的时候,发现网站下所有的文章都没有了分类,查了许久才发现原来是数据库里面少了个关联分类与文章的表,也就是wp_term_relationships表。重新导入问题解决。其中这篇文章给我启发。在此收藏一下。

中需要实现根据分类目录ID获取该分类目录下所有文章的功能。如果用Wordpress自带的函数当然非常简单,但由于笔者对主题开发不甚熟悉,因此用纯PHP脚本直接访问数据库实现了该功能。

首先,介绍一下Wordpress数据库中的几个表:

文章表--wp_posts:文章ID(ID)、标题(post_title)、发布时间(post_time)、别名(post_name)(文章固定链接使用的URL)、状态(post_status)、类型(post_type)等。

友情链接表--wp_links:友情链接等链接信息。

博客主题表--wp_options:博客题目、描述、站点URL等信息。

标签表--wp_terms:标签编号、名称、别名;分类目录名称、别名。

wp_term_relationships:对象ID(object_id,部分对应文章ID),对象分类ID(term_taxonomy_id,部分对应分类目录编号)

分类目录表--wp_term_taxonomy:词项分类标号(term_taxonomy_id)、词项编号(term_id)、类型(taxonomy,目录标签导航菜单)、文章数(count)

wp_users:用户表,所有后台登录帐号

wp_usermeta:用户信息表,用户姓名、邮箱、描述等。

wp_conmments:评论表

wp_commentmeta:不清楚其功能

2. 通过分类目录编号获取文章列表的原理介绍

显然为了实现我们的功能,需要用到wp_terms、wp_term_relationships、wp_term_taxonomy三个表。

(1)假设给定的分类ID为$CID,那么$CID就对应wp_term_taxonomy表中的term_taxonomy_id字段,因此我们可以很容易获得该分类下的文章数:

$sql=”select count from wp_term_taxonomy where term_taxonomy_id=$CID and taxonomy =’category’ “;

(2)根据term_taxonomy_id获取文章标号和标题的SQL,需要联合三个表进行查询,post_status = ‘publish’ 是指文章已经发布,post_type=’post’ 是指记录类型是文章,taxonomy = ‘category’ 是指类型是目录。该SQL比较长,您可以先理解这三个表的参照关系后再自己写SQL语句或者直接用这条SQL。

$sql=”select ID,post_title,post_date,post_name from wp_posts,wp_term_relationships,wp_term_taxonomy where ID=object_id and wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id and post_type=’post’ and post_status = ‘publish’ and wp_term_relationships.term_taxonomy_id = $CID and taxonomy = ‘category’ order by ID desc”; //文章类型:日志 状态:已发布

3. 显示效果

关于如何直接连接数据库?

数据库名称、用户名、密码等信息都保存在根目录下的wp-config文件中,因此我们引入该页面,调用其中的变量即可。

 <?php
    include
    (
    "wp-config.php"
    )
    ;
    //根据需要修改路径
    $conn
    =
    mysql_connect
    (DB_HOST
    ,DB_USER
    ,DB_PASSWORD
    )
    ;
    mysql_select_db
    (DB_NAME
    )
    ;
    mysql_query
    (
    "set names utf-8"
    )
    ;
    ?>
   

来源:https://my.oschina.net/shunshun/blog/88692

时间: 2024-11-07 11:12:49

WordPress直接访问数据库列出指定分类目录下的所有文章的相关文章

javaFile循环列出指定目录下的所有文件(源代码)

package javatest.basic22; import java.io.File; import java.io.IOException; public class FileTest { public void getFileName(File file){ //判断是否是文件 if(file.isFile()){ System.out.println(file.getPath()+file.getName()); }else{ //如果是目录,列出当前目录下所有目录 File[] f

按文件大小列出指定目录下文件(du,sort)

需求 做系统移植的过程中,经常会遇到需要查看指定目录下所有文件大小的需求,然后根据文件的大小进行暴力的删除操作. 方案 列出所有文件的具体大小. du -s * sort命令对其进行排序. du -s * | sort -t " " -k 1 -nru 版权声明:本文为博主原创文章,未经博主允许不得转载.

排序式列出指定目录下的指定文件/夹——《Thinking in Java》随笔027

1 //: SortedDirList.java 2 /// 此程序可以对一个目录进行列出. 3 4 package c10; 5 6 import java.io.File; 7 import java.io.FilenameFilter; 8 import java.util.Arrays; 9 import java.util.Comparator; 10 11 /** 12 * @time: 上午11:52:04 13 * @date: 2017年4月29日 14 * @auther:

使用File类列出指定位置下的文件及目录信息

public static void main(String [] args) { File f=new File("C:"); File [] fl=f.listFiles(); for(int i=0;i<fl.length;i++) { if (fi[i].isDirectory()) { system.out.println("["+fl[i].getName+"]"); } else { system.out.println(fl

dedecms如何调用指定栏目下的相关文章

首先明确要达到两个要求: 1.要调用指定栏目 2.调用的文章要包含指定关键字 相关文档调用 {dede:likeart titlelen=’24′ row=’10′} <li><a title=”[field:title function='htmlspecialchars(@me)'/] ” href=”[field:arcurl /]“>[field:title /]</a></li> {/dede:likeart} 注:此为dede官方的调用模板,但至

JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。

package ioTest.io3; /* * 获取指定目录下的文件夹和文件的File对象或是字符串名称. * 也可以通过filter获取指定的文件夹或者指定类型的文件 * 这里面需要做一个总结,如何利用jdk的源码去理解不熟悉的方法的应用. */ import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; public class FileDemo2 { public static void m

Windows下使用ODBC API访问数据库之关键

本文采用SQL2005 + VS2008环境,以ODBC API方式成功连接数据库. 1.SQL安装和环境配置 这部分网上随便搜一下都有很多资料,而且很容易就可以配置成功. 注意的关键点: SA账号配置: 远端连接配置. 配置成功后,能成功连接远端数据库,如下图所示: 2. 建控制台程序,使用ODBC API方式,语言C/C++均可. 关于ODBC的测试代码,在此不做过多的展示,皆因网上随便一搜都有很多. 这里主要说明的是SQLDriverConnect()执行失败返回-1的问题. 这个问题相信

使用ab.exe监测100个并发/100次请求情况下同步/异步访问数据库的性能差异

ab.exe介绍 ab.exe是apache server的一个组件,用于监测并发请求,并显示监测数据 具体使用及下载地址请参考:http://www.cnblogs.com/gossip/p/4398784.html 本文的目的 通过webapi接口模拟100个并发请求下,同步和异步访问数据库的性能差异 创建数据库及数据 --创建表结构 CREATE TABLE dbo.[Cars] ( Id INT IDENTITY(1000,1) NOT NULL, Model NVARCHAR(50) 

访问指定路径下的目录以及文件

#include "stdafx.h" //vs2010下运行通过 #undef UNICODE #include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <iostream> using namespace std; void browseFile(char* path) { char pattern[FILENAME_MAX + 1]; sprintf(p