如何删除WP系统程序中标题重复的文章

在迁移Wordpress数据的过程中(或者采集过程中),可能会遇到这种问题:同样一篇文章被导入了2次或者3次,这时候就要删除重复的文章了。
SQL语句删除

在Mysql中执行:

   
CREATE TABLE temp_table AS SELECT MIN(ID) AS col1 FROM wp_posts GROUP BY
post_title;
    DELETE FROM wp_posts WHERE ID NOT IN (SELECT
col1 FROM temp_table);
    DROP TABLE
temp_table;

如果数据库中的某些文章被重复了1次,也就是一篇文章有两个,这时候只需要执行一次上面的SQL语句就行了,如果转子泵数据库中一篇文章被重复了2次,也就是存在3篇同样的文章,那么,就需要执行两次上面的SQL语句。
使用PHP删除

其实也是执行SQL语句,不推荐,因为比较麻烦:要新建文件,上传文件,从浏览器中执行,然后再删除这个转子泵文件。
使用插件Delete Duplicate
Posts

插件,就不多说了,下载,激活,使用。

在Wordpress中,如何根据给定的用户ID数组查询其评论。
自定义查询的方法

默认的查询

   
global $wpdb;
    $comments = $wpdb->get_results( "SELECT *
FROM $wpdb->comments WHERE comment_approved = ‘1‘ Limit 0, 10"
);

所以:

    global $wpdb;
   
$user_id  = 57;
    $comments = $wpdb->get_results(
$wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_approved =
‘1‘ AND user_id = ‘%d‘ Limit 0, 10", $user_id )
);

还可以:

    global $wpdb;
   
$user_ids = array( 57, 105, 567, 2820 );
    $comments =
$wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments
WHERE comment_approved = ‘1‘ AND user_id IN(%s) Limit 0, 10", $user_ids )
);

还可以对其进行缓存以提升加载速度:

    global
$wpdb;
    $user_ids = array( 57, 105, 567, 2820
);
    $key      = md5( serialize(
$user_ids ) );
    $comments = get_transient( $key
);
    if( false === $comments )
{
        $comments =
$wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments
WHERE comment_approved = ‘1‘ AND user_id IN(%s) Limit 0, 10", $user_ids )
);
        set_transient( $key, $comments,
10800 ); // Cache for 3 hours

使用HOOK过滤的方法

   
add_filter( ‘comments_clauses‘, ‘pw_comments_by_users‘, 10, 2
);
    $comments = get_comments();http://www.xinhuanet.com/
   
remove_filter( ‘comments_clauses‘, ‘pw_comments_by_users‘
);
    function pw_comments_by_users( $clauses,
$wp_comment_query ) {
       
$clauses[‘where‘] .= ‘ AND user_id IN
(57,105,567,2820)‘;
        return
$clauses;
   
}

结论

使用自定义查询并对查询进行缓存的方法性能较好,使用HOOK过滤的方法比较简单,但是注意一定要在查询后移除HOOK,否则会影响到其它地方对于评论的查询

时间: 2024-08-03 21:09:50

如何删除WP系统程序中标题重复的文章的相关文章

删除C语言程序中所有的注释语句,代码实现

学习<C程序设计语言>到第1章最后,有一道题目: 编写一个删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不允许嵌套. Exercise 1-23. Write a program to remove all comments from a C program. Don't forget to handle quoted strings and character constants properly. C comments don't nest. 刚开始,

栈和队列----删除无序单链表中值重复出现的节点

删除无序单链表中值重复出现的节点 给定一个无序单链表的头节点head,删除其中值重复的节点 例如: 1->2->3->3->4->4->2->1->1->null 删除之后变为 1->2->3->4->null 方法1:如果链表长度为N,时间复杂度达到O(N) 方法2:如果要求空间复杂度为O(1),应该怎样实现 [解析] 方法1:利用哈希表去实现 使用哈希表,因为头节点是不用删除的节点,所以首先将头节点放入到哈希表中,然后从下一

笔试算法题(28):删除乱序链表中的重复项 &amp; 找出已经排好序的两个数组中的相同项

出题:给定一个乱序链表,节点值为ASCII字符,但是其中有重复项,要求去除重复项并保证不改变剩余项的原有顺序: 分析:创建一个256(2^8)大小的bool数组,初始化为false,顺序读取链表,将字母对应位置为false的重新标记为true并保留节点,将字母对 应位置为true的保持并删除节点:时间复杂度为O(N),空间复杂度为常量.注意删除节点和不删除节点的情况下,pre和cur的移动操作不相同: 解题: 1 struct Node { 2 char value; 3 Node* next;

LeetCode Remove Duplicates from Sorted Array删除整型数组中的重复元素并返回剩下元素个数

1 class Solution { 2 public: 3 int removeDuplicates(int A[], int n) { 4 int *s=&A[0],*e=&A[0]; //s指向开头第一个,e往后遍历相同的 5 int t,i,j=n; 6 for(i=1;i<n;i++){ 7 e++; 8 if(*s==*e) 9 j--; 10 else{ 11 s++; 12 *s=*e; 13 } 14 } 15 return j; 16 } 17 }; 题意:给一个

删除排序树组中的重复项(初级-数组)

1 # 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 2 # 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成. 3 4 def func(nums): 5 temp=[] 6 for i in nums: 7 if i in temp: 8 pass 9 else: 10 temp.append(i) 11 leng=len(temp) 12 nums[0:leng]=temp[:] 13

编写一个删除c语言程序文件中所有的注释语句

//删除c语言程序中所有的注释语句,要正确处理带引号的字符串与字符串常量 #include <stdio.h> using namespace std; #define MAXLINE 1000 void rcomment(int c); void in_comment(void); void deleteTail(void); FILE* fp; FILE* fp2; int main() { fp=fopen("C:\\Users\\Administrator\\Desktop\

删除有序链表中的重复结点

一,问题描述 请自己构造一个简单的有序单链表,然后实现删除链表中的重复结点.比如: 二,问题分析 首先要实现一个单链表,因此需要定义一个节点类Node.其次,实现向链表中添加结点的方法(使用尾插法)addNode 删除重复结点的实现思路: 定义两个指针:pre 和 next.初始时,pre指向链表中的第一个元素,next指向链表中的第二个元素.如果 pre 的值与 next 的值不相等,则两个指针分别都向后移一个结点:若相等,则删除 next 指针指向的结点即可. 三,整个代码实现 // del

让你提前认识软件开发(21):C程序中的定时器

第1部分 重新认识C语言 C程序中的定时器 [文章摘要] 在实际的C程序中,一个模块执行多个操作是很常见的事情.如果多个操作同时进行,会出现程序效率低下.计算机CPU占用率过高等情况,这时就需要对所有操作的执行顺序作一个合理的安排,这就涉及到定时器的使用. 本文对C程序中的定时器的类型.设置和清除方法等作了详细的介绍,为相关开发工作的开展提供了参考. [关键词] C程序  定时器  操作  开发 一.定时器的定义及分类 我们所熟悉的定时器是一个多任务定时提醒的软件,安装于电脑或手机上.举个例子,

Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

Delphi在系统菜单中添加删除系统菜单项 Delphi在系统菜单中添加删除系统菜单项,利用Windows提供的API函数GetSystemMenu可以得到窗口的系统菜单句柄,再通过AppendMenu和DeleteMenu就可以添加和删除菜单了. 工具/原料 Delphi7 Windows电脑 方法/步骤 打开Delphi7,创建新的工程,默认新窗体的Name属性为Form1   在Form1的Object Inspector中Events里双击OnCreate为Form1创建OnCreate