Wordpress troubleshooting

在04服务器上用docker运行了一个wordpress,用来备份以前的blog。
想加一个页面显示所有帖子列表,于是折腾出一堆事情。
记录一下都遇到了哪些问题。

更新遇到mysql db版本问题

有文章说可以在wordpress的仪表盘->外观->编辑功能添加一个模板。但是我的外观下没有编辑功能,只有“主题文件编辑器”。里面可以编辑现有模板,不能添加新的。

于是以为是版本太低,于是运行docker-compose pull命令拉取最新版本。

更新后启动,显示数据库连不上。

用以下命令看log

1
2
3
4
5
6
7
8
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1e778094655 mysql:8.4.4 "docker-entrypoint.s…" 8 hours ago Up 8 hours 3306/tcp, 33060/tcp wordpress_db_1
3b1b511ddee6 wordpress "docker-entrypoint.s…" 8 hours ago Up 8 hours 0.0.0.0:4880->80/tcp, :::4880->80/tcp wordpress_wordpress_1
...

docker logs f1e7
...

上面命令可以显示log,log里面显示如下关键信息

1
Invalid MySQL server upgrade: Cannot upgrade from 80033 to 90200 

mysql大版本升级不能直接升。于是上hub.docker.com里搜mysql,找到8.x版本最新版tag是8.4.4。

修改docker-compose.yml如下,加上版本号,恢复老的8.4.4 mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
version: '3.1'

services:

wordpress:
image: wordpress
restart: always
ports:
- 4880:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html

db:
image: mysql:8.4.4
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql

volumes:
wordpress:
db:

在volume里添加php文件

需要在wordpress里添加一个文件template-article-list.php,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
/*
Template Name: 文章列表带分页
*/
get_header();

// 获取当前页码
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

// 创建自定义查询
$args = array(
'post_type' => 'post',
'posts_per_page' => 50,
'paged' => $paged,
'post_status' => 'publish'
);

$custom_query = new WP_Query($args);
?>

<div class="article-list-container">
<?php if ($custom_query->have_posts()) : ?>
<ul class="article-list">
<?php while ($custom_query->have_posts()) : $custom_query->the_post(); ?>
<li class="article-item">
<span class="article-date"><?php echo get_the_date('Y-m-d'); ?></span>
<a class="article-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endwhile; ?>
</ul>

<!-- 分页导航 -->
<div class="pagination">
<?php
echo paginate_links(array(
'base' => str_replace(999999999, '%#%', esc_url(get_pagenum_link(999999999))),
'format' => '?paged=%#%',
'current' => max(1, $paged),
'total' => $custom_query->max_num_pages,
'prev_text' => __('« 上一页'),
'next_text' => __('下一页 »'),
'type' => 'list'
));
?>
</div>

<?php else : ?>
<p>没有找到文章</p>
<?php endif; ?>

<?php wp_reset_postdata(); ?>
</div>

<?php get_footer(); ?>

另外需要在css里添加如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
.article-list-container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}

.article-item {
margin-bottom: 15px;
padding: 10px;
border-bottom: 1px solid #eee;
}

.article-date {
display: inline-block;
width: 120px;
color: #666;
}

.article-title {
text-decoration: none;
color: #333;
}

.pagination {
margin-top: 30px;
text-align: center;
}

.pagination ul {
list-style: none;
margin: 0;
padding: 0;
}

.pagination li {
display: inline-block;
margin: 0 2px;
}

用如下命令操作docker volume里的文件

1
2
3
4
$ docker volume ls
DRIVER VOLUME NAME
local wordpress_db
local wordpress_wordpress

在没有vi命令的情况下靠echo创建文件

1
2
3
4
5
6
7
8
9
10
11
12
$ docker exec -it 3b1b /bin/bash
root@3b1b511ddee6:/var/www/html# cd wp-content/themes/twentyfifteen
root@3b1b511ddee6:/var/www/html/wp-content/themes/twentyfifteen# pwd
/var/www/html/wp-content/themes/twentyfifteen
root@3b1b511ddee6:/var/www/html/wp-content/themes/twentyfifteen# echo <<EOF > template-article-list.php
<?php
/*
Template Name: 文章列表带分页
*/
?>
EOF
root@3b1b511ddee6:/var/www/html/wp-content/themes/twentyfifteen# chown www-data:www-data template-article-list.php

文件创建成功后就可以在wordpress的仪表盘->外观->主题文件编辑器 中看到这个文件,把完整代码粘贴进去。

css代码则附加在style.css最后。

准备好之后,新建页面,编辑,选择模板“文章列表带分页”。