「WordPress」- Posts, Pages

删除重复文章

How to Bulk Delete WordPress Posts (2 Easy Solutions)

我们的文章是是批量导入的,但是由于原始文章删除失败,导致页面存在大量重复的文章。

我们需要删除这些重复的文章(他们的 Title 是相同的)。

补充说明

在我们的场景中,由于文章 Title 相同,所以我们能够识别出重复的文章。但是,如果能确定重复的依据,则依旧可以套用该方法。

解决方案

第一步、安装 WP Bulk 插件,我们需要使用其 By URL(根据 URL 删除)功能。

第二步、查找相同的文章,使用如下 SQL 语句并生成链接:

-- 注意事项:该 SQL 并非适用于所有场景,仅适用于“创建重复文章并希望删除旧文章的场景”的场景

SELECT
	-- a.id,
	-- b.id,
	-- a.post_title,
 CONCAT('http://blog.example.com/?p=', a.id)
FROM
	wp_posts a
LEFT JOIN (
	SELECT
		id,
		post_title ,
		MAX(id) AS pd,
		COUNT(id) AS m
	FROM
		wp_posts wp
	GROUP BY
		post_title
	ORDER BY
		id ASC) AS b ON
	b.pd = a.id
WHERE
	b.id IS NULL;

第三步、删除文章
将如上 SQL 语句生成的链接复制到 Bulk WP / Bulk Delete Posts / By URL 中,然后点击 Bulk Delete 进行删除。

清理 Reversion 文章

How to Disable and Remove Old Post Revisions in WordPress

1)通过 WP Optimiztions 插件
2)或直接从数据库删除(DELETE FROM wp_posts WHERE post_type = “revision”;);

在 wp-config.php 中,定义如下变量,以抑制 Reversion 功能:

define( 'WP_POST_REVISIONS', false );
define( 'WP_POST_REVISIONS', true );

显示树形结构(Pages)

How to Display a List of Child Pages For a Parent Page in WordPress
wp_list_pages() | Function | WordPress Developer Resources

通过自定义代码(废弃)

function wpb_list_child_pages() { 
 
	global $post; 
	 
	if ( is_page() && $post->post_parent )
		$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
	else
		$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );

	if ( $childpages ) {
		$string = '<ul class="wpb_page_list">' . $childpages . '</ul>';
	}
	 
	return $string;

}
 
add_shortcode('wpb_childpages', 'wpb_list_child_pages');

// 然后在文章中,使用 [wpb_childpages] 代码(do_shortcode("[wpb_childpages]"));
// 或者在主题中,直接 <?php wpb_list_child_pages(); ?> 调用

通过 List Pages Shortcode 插件

通过 List Pages Shortcode 插件,其提供 [list-pages] 来获取 Pages 树形结构。

若需要在每个页面中添加 shortcode 代码,需要借助其他方法(Add a shortcode to every post or page):

# vim /path/to/theme/function.php
...
function my_shortcode_to_a_post( $content ) {
  global $post;
  if( ! $post instanceof WP_Post ) return $content;

  switch( $post->post_type ) {
    case 'post':
      return $content . '[my_post_shortcode_goes_here]My content[/my_post_shortcode_goes_here]';
    case 'page':
      return $content . '[my_page_shortcode_goes_here]My content[/my_page_shortcode_goes_here]';
    default:
      return $content;
  }
}

add_filter( 'the_content', 'my_shortcode_to_a_post' );
...

在每个页面中添加 shortcode 代码的另外方法是:借助主题支持,某些主题支持自定义,并支持在每个全部页面添加 shortcode 代码;