为什么会有想法来写这么一款插件,主要还是因为没有宝塔企业版,导致没有安装防火墙,本插件可以防御SQL注入、XSS攻击、CC攻击。
启用插件后可以防御 SQL 注入、XSS攻击、CC攻击。
插件后台可设置CC每分钟请求数限制,封禁时间(秒)。
插件后台自带CC模拟攻击测试。
记录信息在插件文件下的Lxanquan_log.txt文本内进行查看。
此插件主要是文章图片内容进行隐藏,分两种方式,第一种需登录后可见文章原图,第二种为评论后可见文章原图,没有登录和没有评论是无法正常查看到原图。
未登录效果:
评论后可见效果:
]]>站内内容引用插件,可在文章里面引用文章,独立页面,评论,用户,进而展示相关信息,引用文章时会根据评论数量进行评分。
//引用指定文章/独立页面
{post-文章或页面的cid}
{post-文章或页面的slug}
//引用指定评论
{comment-评论的coid}
支持点击评论跳转到完整评论内容处
//引用指定用户
{user-用户的uid}
今天有小伙伴与我交流发了一个PPT文件,我打开一看是个人简历的PPT文档。 他说想把此PPT文档样子做成网站形式进行展示,自己做个网站的引导页,我觉得他的想法挺有意思,就答应给他做了,不过...
评论留言参与抽奖即可免费获得此插件完整源代码!
每个用户每天有3次抽奖机会,如果三次机会没有获奖,第二天再来抽奖!
不是没人中奖,7月份中奖的数据没有,是因为设计插件时忘记编写重新开启活动后把之前的中奖名单自动记录为历史而不是删除,说简单点就是忘记多添加一个数据库的字段。
新增历史中奖记录功能
1、在每次活动结束时,不删除中奖记录,而是将其标记为历史记录。
2、在展示历史中奖名单时,包含所有的历史记录。
大家发现问题可在评论区留言或者发送邮件到我的邮箱:im1cc@qq.com,我看到也会进行亲测再进行修复,再此感谢那些发现问题能告知我的小伙伴们了。
]]>在使用 Docker 搭建的 Nginx 和 WordPress 环境中,自定义主题使用失败的情况可能由多种原因引起。以下是一些可能的原因和相应的解决方法:
进入 Docker 容器:
docker exec -it <wordpress_container_name> bash
检查主题目录权限:
cd /var/www/html/wp-content/themes
ls -l
设置适当的权限(例如 755):
chmod -R 755 <your_theme_directory>
确保主题文件完整
确保自定义主题文件完整,尤其是 style.css 和 functions.php 文件。style.css 应包含主题的基本信息,如下所示:
/*
Theme Name: My Lixiang Theme
Theme URI: http://example.com/
Description: A Lixiang theme for WordPress
Author: Your Name
Author URI: http://example.com/
Template: Lixiang
Version: 1.0.0
*/
确保 Nginx 配置正确,特别是根目录设置和 PHP 文件处理配置。
在 Nginx 配置文件中,检查根目录配置:
server {
listen 80;
server_name yourdomain.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
重启 Nginx 容器:
docker restart <nginx_container_name>
示例如下:
version: '3.1'
services:
wordpress:
image: wordpress:latest
ports:
- "8000:80"
volumes:
- ./wp-content/themes:/var/www/html/wp-content/themes
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
volumes:
- db_data:/var/lib/mysql
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./wp-content/themes:/var/www/html/wp-content/themes
volumes:
db_data:
检查 Nginx 和 PHP 错误日志,了解更多关于问题的详细信息。
查看 Nginx 错误日志:
docker logs <nginx_container_name>
查看 PHP 错误日志(通常在容器内的 /var/log/php_errors.log):
docker exec -it <wordpress_container_name> tail -f /var/log/php_errors.log
通过上述步骤,你应该能够排查并解决自定义主题使用失败的问题。
如果问题依然存在,请再评论区留言提供更多详细信息,以便我进一步诊断和解决。
将 WordPress 迁移到 Hexo 是一个涉及内容导出、转换和导入的过程。下面是详细的步骤指南:
首先,需要将 WordPress 内容导出为 XML 文件。
安装 Node.js 和 Hexo
确保你已经安装了 Node.js,然后安装 Hexo:
# 安装 Hexo
npm install -g hexo-cli
# 创建新的 Hexo 站点
hexo init my-hexo-site
cd my-hexo-site
# 安装依赖
npm install
安装迁移工具
使用 hexo-migrator-wordpress 插件将 WordPress XML 文件转换为 Hexo 支持的格式。
# 安装 Hexo 迁移工具
npm install hexo-migrator-wordpress --save
迁移 WordPress 内容到 Hexo
将之前导出的 WordPress XML 文件放到 Hexo 项目根目录,然后运行以下命令:
hexo migrate wordpress path-to-your-wordpress.xml
这个命令会将 WordPress 的内容(包括文章、页面、分类和标签)导入到 Hexo 的 source/_posts 目录中。
# 下载主题
git clone https://github.com/hexojs/hexo-theme-landscape themes/landscape
# 修改 _config.yml 文件,设置主题
theme: landscape
根据主题的文档进行进一步配置。
# 生成静态文件
hexo generate
# 启动本地服务器
hexo server
在浏览器中访问 http://localhost:4000 查看站点效果。
修改 _config.yml 文件,添加部署配置:
deploy:
type: git
repo: <repository-url>
branch: gh-pages
安装部署插件:
npm install hexo-deployer-git --save
部署站点:
hexo deploy
以上就是将 WordPress 迁移到 Hexo 的详细步骤。
根据需要调整配置和内容,确保迁移后的站点符合预期。
在WordPress中修改固定链接(Permalinks)后,如果所有文章都返回500错误,通常与以下几个问题有关:
检查你的.htaccess文件,确保它包含以下内容(这是默认的WordPress重写规则):
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
在Apache中启用mod_rewrite模块:
sudo a2enmod rewrite
sudo systemctl restart apache2
确保虚拟主机配置允许重写。你的虚拟主机配置文件(如/etc/apache2/sites-available/000-default.conf)应该包含以下指令:
<Directory /var/www/html>
AllowOverride All
</Directory>
启用WordPress调试模式以获得更多调试信息。编辑wp-config.php文件,添加或修改以下行:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
通过以上检查步骤,你应该能够找到并修复修改固定链接后导致500错误的具体原因。
如果问题依然存在,可以进一步在评论区留言提供错误日志或详细信息,以便我能更精确地诊断和解决您的问题。
]]>通过代码优化来加速 WordPress 是一种非常有效的方式,可以帮助减轻对插件的依赖,并实现更深层次的性能提升。以下是一些关键的代码优化措施,涵盖前端、后台、数据库和整体性能的各个方面。
1.1 延迟加载资源
延迟加载脚本和样式:通过将脚本和样式延迟加载,减少初始页面加载时间。
// functions.php
function defer_parsing_of_js($url) {
if (is_user_logged_in()) return $url; // 不延迟登录用户的脚本加载
if (false === strpos($url, '.js')) return $url; // 只延迟 JS 文件
return str_replace(' src', ' defer="defer" src', $url);
}
add_filter('script_loader_tag', 'defer_parsing_of_js', 10);
异步加载 JavaScript:
// functions.php
function add_async_attribute($tag, $handle) {
if (is_admin()) return $tag; // 不影响管理员区域
return str_replace('<script ', '<script async ', $tag);
}
add_filter('script_loader_tag', 'add_async_attribute', 10, 2);
1.2 移动非关键 CSS
将非关键 CSS 移动到页面底部,减少初始渲染时间。
// functions.php
function move_non_critical_css() {
// 把所有非关键 CSS 文件在底部加载
if (!is_admin()) {
remove_action('wp_enqueue_scripts', 'wp_enqueue_styles');
add_action('wp_footer', 'wp_enqueue_styles');
}
}
add_action('wp_enqueue_scripts', 'move_non_critical_css', 1);
2.1 限制心跳 API
WordPress 的心跳 API 控制后台自动保存和其他 AJAX 操作,可以通过减少心跳频率降低服务器压力。
// functions.php
function modify_heartbeat_settings($settings) {
$settings['interval'] = 60; // 每 60 秒触发一次心跳
return $settings;
}
add_filter('heartbeat_settings', 'modify_heartbeat_settings');
2.2 禁用未使用的 REST API 端点
禁用未使用的 REST API 端点减少不必要的后台负载。
// functions.php
function disable_unused_rest_endpoints($endpoints) {
if (is_user_logged_in()) return $endpoints; // 保留登录用户的端点
unset($endpoints['/wp/v2/users']);
unset($endpoints['/wp/v2/comments']);
// 添加更多需要禁用的端点
return $endpoints;
}
add_filter('rest_endpoints', 'disable_unused_rest_endpoints');
3.1 优化数据库查询
减少 WordPress 中的无效或冗余查询。例如,移除不必要的自动草稿。
// functions.php
function clean_up_database() {
global $wpdb;
$wpdb->query("DELETE FROM $wpdb->posts WHERE post_type = 'revision'");
$wpdb->query("DELETE FROM $wpdb->posts WHERE post_type = 'auto-draft'");
}
add_action('wp_scheduled_cleanup', 'clean_up_database');
3.2 使用 WP_Query 高效查询
使用 WP_Query 优化复杂查询,以减少数据库负载。
// example.php
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 10,
'meta_query' => array(
array(
'key' => 'meta_key',
'value' => 'meta_value',
'compare' => 'LIKE'
)
)
);
$query = new WP_Query($args);
4.1 禁用不必要的功能
禁用 WordPress 的默认功能(如 Embeds、Emoji),减少前端和后台的开销。
// functions.php
// 禁用 Embeds
function disable_embeds_code_init() {
remove_action('rest_api_init', 'wp_oembed_register_route');
add_filter('embed_oembed_discover', '__return_false');
remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
}
add_action('init', 'disable_embeds_code_init', 9999);
// 禁用 Emoji
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
4.2 调整 WordPress 心跳频率
减少心跳频率可减轻服务器负担,特别是在大量并发用户情况下。
// functions.php
add_filter('heartbeat_settings', function($settings) {
$settings['interval'] = 60; // 每 60 秒心跳一次
return $settings;
});
4.3 使用对象缓存
对象缓存可以减少数据库查询次数,特别适用于大型和高流量网站。
// functions.php
function cache_query_results($posts) {
if (is_admin()) return $posts; // 不缓存后台查询
$cache_key = 'my_custom_cache_key';
$cache_group = 'my_cache_group';
$cached_posts = wp_cache_get($cache_key, $cache_group);
if ($cached_posts === false) {
$cached_posts = $posts; // 获取查询结果
wp_cache_set($cache_key, $cached_posts, $cache_group, 3600); // 缓存查询结果一小时
}
return $cached_posts;
}
add_filter('posts_results', 'cache_query_results', 10, 2);
4.4 优化分页
如果网站使用分页,确保分页查询是高效的。
// functions.php
function custom_pagination($query) {
if ($query->is_main_query() && !is_admin()) {
$query->set('no_found_rows', true); // 禁用总行数查询
$query->set('update_post_meta_cache', false); // 禁用元数据缓存
$query->set('update_post_term_cache', false); // 禁用分类缓存
}
}
add_action('pre_get_posts', 'custom_pagination');
5.1 延迟加载 WooCommerce 脚本
如果使用 WooCommerce,可以通过仅在需要时加载脚本来减少负载。
// functions.php
function conditional_woocommerce_assets() {
if (!is_woocommerce() && !is_cart() && !is_checkout()) {
wp_dequeue_script('wc-cart');
wp_dequeue_style('woocommerce-general');
// 添加更多 WooCommerce 资源
}
}
add_action('wp_enqueue_scripts', 'conditional_woocommerce_assets', 99);
5.2 延迟加载第三方脚本
仅在特定页面或条件下加载第三方脚本。
// functions.php
function conditionally_load_third_party_scripts() {
if (is_page('contact')) {
// 仅在联系页面加载 Google Maps 脚本
wp_enqueue_script('google-maps', 'https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY', null, null, true);
}
}
add_action('wp_enqueue_scripts', 'conditionally_load_third_party_scripts');
总结
通过上述代码优化措施,你可以显著改善 WordPress 网站的加载速度和响应性能:
这些代码优化技巧有助于减少服务器负担,提高用户体验,并使网站更快、更响应。根据实际需求和网站架构,选择适合的优化方法并定期监控和调整,以维持最佳性能。
]]>优化 WordPress 访问速度和响应性能是确保用户体验和搜索引擎优化(SEO)效果的关键。以下是详细的优化措施,可以帮助你解决 WordPress 网站访问太慢和卡顿的问题:
1.1 选择优质主机
1.2 服务器配置
2.1 使用缓存插件
3.1 清理数据库
4.1 图像压缩
5.1 最小化 CSS 和 JavaScript
6.1 减少插件数量
7.1 使用轻量级主题
8.1 限制心跳控制
9.1 监控工具
实际示例
示例: 使用 WP Super Cache 设置缓存
安装 WP Super Cache:
在 WordPress 管理后台,转到 插件 > 安装插件。
搜索 WP Super Cache 并安装激活。
配置插件:
转到 设置 > WP Super Cache。
在 Easy 选项卡,启用缓存。
在 Advanced 选项卡,启用页面缓存、浏览器缓存、和压缩。
示例: 使用 Autoptimize 优化 CSS 和 JavaScript
安装 Autoptimize:
在 WordPress 管理后台,转到 插件 > 安装插件。
搜索 Autoptimize 并安装激活。
配置插件:
转到 设置 > Autoptimize。
勾选 优化 CSS 代码 和 优化 JavaScript 代码。
保存更改。
解决方案:配置缓存插件设置缓存清理策略,确保内容更新后缓存自动刷新。
解决方案:逐步排查冲突,禁用某些插件功能或排除特定脚本和样式文件。
解决方案:定期清理数据库,并使用数据库优化插件;考虑迁移到更高性能的数据库主机。
通过以上详细步骤和建议,你可以系统地优化 WordPress 网站,提高其速度和性能。这不仅改善用户体验,还能提高搜索引擎排名,吸引更多的访问者。
]]>在 WordPress 中开发自定义区块并在其中使用其他区块(如 wp:image),可以通过 Gutenberg 块编辑器的 React 组件来实现。这通常涉及使用 @wordpress/blocks 和 @wordpress/block-editor 包来创建和嵌套区块。以下是详细步骤,包括创建一个自定义区块并在其内部使用 wp:image。
使用 @wordpress/create-block
npx @wordpress/create-block my-custom-block
这个命令会生成一个名为 my-custom-block 的项目文件夹,包含开发自定义区块所需的基础文件。
编辑 block.json
定义自定义区块的基本信息:
{
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 2,
"name": "my-custom-block/container",
"title": "My Custom Block",
"category": "widgets",
"icon": "smiley",
"description": "A custom block with nested image block.",
"supports": {
"html": false
},
"attributes": {
"content": {
"type": "string",
"default": ""
}
},
"textdomain": "my-custom-block",
"editorScript": "file:./build/index.js",
"editorStyle": "file:./build/editor.css",
"style": "file:./build/style.css"
}
编辑 src/index.js
注册区块:
import { registerBlockType } from '@wordpress/blocks';
import Edit from './edit';
import save from './save';
import './style.scss';
registerBlockType('my-custom-block/container', {
edit: Edit,
save,
});
编辑 src/edit.js
在编辑视图中使用 wp:image 块:
import { __ } from '@wordpress/i18n';
import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';
const ALLOWED_BLOCKS = ['core/image'];
const Edit = ({ attributes, setAttributes }) => {
const blockProps = useBlockProps();
return (
<div {...blockProps}>
<h2>{__('My Custom Block', 'my-custom-block')}</h2>
<InnerBlocks allowedBlocks={ALLOWED_BLOCKS} />
</div>
);
};
export default Edit;
编辑 src/save.js
保存视图支持嵌套内容:
import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';
const save = ({ attributes }) => {
const blockProps = useBlockProps.save();
return (
<div {...blockProps}>
<InnerBlocks.Content />
</div>
);
};
export default save;
编辑 src/style.scss
定义区块的样式:
/* style.scss - 前端样式 */
.wp-block-my-custom-block-container {
padding: 20px;
border: 1px solid #ccc;
}
/* editor.scss - 编辑器样式 */
.wp-block-my-custom-block-container {
padding: 20px;
border: 1px dashed #ccc;
}
构建区块
在项目目录中运行以下命令以构建 JavaScript 和样式文件:
npm install
npm run build
加载区块
在 WordPress 插件或主题中注册和加载区块。
插件主文件(例如 my-custom-block.php):
<?php
/*
Plugin Name: My Custom Block
Description: A custom block with nested image block.
Version: 1.0
Author: Your Name
*/
function my_custom_block_register() {
register_block_type(__DIR__);
}
add_action('init', 'my_custom_block_register');
?>
使用区块属性
如果需要在自定义区块中使用区块属性,可以在 edit.js 和 save.js 中处理属性。例如,为图片块添加自定义属性:
// edit.js
const ALLOWED_BLOCKS = ['core/image'];
const Edit = ({ attributes, setAttributes }) => {
const blockProps = useBlockProps();
return (
<div {...blockProps}>
<h2>{__('My Custom Block', 'my-custom-block')}</h2>
<InnerBlocks
allowedBlocks={ALLOWED_BLOCKS}
template={[
['core/image', { align: 'center' }]
]}
/>
</div>
);
};
// save.js
const save = ({ attributes }) => {
const blockProps = useBlockProps.save();
return (
<div {...blockProps}>
<InnerBlocks.Content />
</div>
);
};
使用 InspectorControls
你可以使用 InspectorControls 添加额外的设置:
// edit.js
import { InspectorControls } from '@wordpress/block-editor';
import { PanelBody, TextControl } from '@wordpress/components';
const Edit = ({ attributes, setAttributes }) => {
const blockProps = useBlockProps();
return (
<div {...blockProps}>
<InspectorControls>
<PanelBody title={__('Settings', 'my-custom-block')}>
<TextControl
label={__('Example Setting', 'my-custom-block')}
value={attributes.exampleSetting}
onChange={(value) => setAttributes({ exampleSetting: value })}
/>
</PanelBody>
</InspectorControls>
<h2>{__('My Custom Block', 'my-custom-block')}</h2>
<InnerBlocks allowedBlocks={ALLOWED_BLOCKS} />
</div>
);
};
如果你需要在前端显示自定义的样式或脚本,可以在 style.scss 中定义样式,或在保存视图中添加自定义 HTML 结构。
自定义前端样式
/* style.scss */
.wp-block-my-custom-block-container .wp-block-image img {
border-radius: 50%;
}
总结
通过以上步骤,你可以开发一个自定义 WordPress 区块,并在其中嵌套使用 wp:image(即 core/image)等其他核心区块。此流程包括:
通过这种方式,你可以在自定义区块中实现复杂的布局和功能,利用 WordPress 提供的区块编辑器 API 构建动态和互动性强的内容块。
]]>在将 WordPress 网站从本地环境迁移到其他域名时,通常需要批量修改数据库中的图片链接,以反映新域名。以下是几种常见的方法来批量替换 WordPress 数据库中图片链接的域名:
你可以直接在数据库中运行 SQL 查询来批量替换旧域名为新域名。
步骤:
备份数据库:在进行任何更改前,确保备份你的数据库。
登录数据库管理工具(例如 phpMyAdmin)。
运行 SQL 查询:
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'http://127.0.0.1', 'http://new-domain.com');
有多个插件可以帮助批量替换数据库中的 URL。
推荐插件:
Better Search Replace
安装插件:在 WordPress 管理后台,转到 插件 > 安装插件,搜索 “Better Search Replace” 并安装。
运行插件:转到 工具 > Better Search Replace,输入旧 URL 和新 URL,然后选择要修改的数据库表(例如 wp_posts)。
执行搜索替换:确认设置后,运行替换操作。
Velvet Blues Update URLs
安装插件:在 WordPress 管理后台,搜索 “Velvet Blues Update URLs” 并安装。
运行插件:转到 工具 > Update URLs,输入旧 URL 和新 URL,并选择要更新的内容类型(如页面、文章等)。
更新 URL:确认设置后,更新 URL。
WP-CLI 是一个命令行工具,可以用于执行 WordPress 任务,包括批量替换 URL。
步骤:
导航到 WordPress 根目录:
cd /path/to/your/wordpress
运行搜索替换命令:
wp search-replace 'http://127.0.0.1' 'http://new-domain.com' --all-tables
此命令会替换所有数据库表中的 URL。你可以添加 --dry-run 选项先进行模拟运行,以确保正确性。
你可以创建一个简单的 PHP 脚本来执行 URL 替换。
示例代码:
<?php
require('wp-load.php');
global $wpdb;
$old_url = 'http://127.0.0.1';
$new_url = 'http://new-domain.com';
// 替换 wp_posts 表中的 URL
$wpdb->query(
$wpdb->prepare(
"UPDATE $wpdb->posts SET post_content = REPLACE(post_content, %s, %s)",
$old_url, $new_url
)
);
// 如果有其他表需要替换,添加更多的查询
?>
使用步骤:
总结
无论使用哪种方法,都要遵循以下步骤:
注意事项
通过这些方法,你可以有效地批量替换 WordPress 数据库中的图片链接域名,确保在迁移到新域名时图片链接正常工作。
]]>
这个牛啊 意思删除文章同时删除了文章内的图片? [tv_呆]