diff --git "a/blog/2024/08-25-\350\205\276\350\256\257\344\272\221\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272\350\207\252\345\267\261\347\232\204Git\346\234\215\345\212\241.md" "b/blog/2024/08-25-\350\205\276\350\256\257\344\272\221\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272\350\207\252\345\267\261\347\232\204Git\346\234\215\345\212\241.md" index 68897004..ea305f28 100644 --- "a/blog/2024/08-25-\350\205\276\350\256\257\344\272\221\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272\350\207\252\345\267\261\347\232\204Git\346\234\215\345\212\241.md" +++ "b/blog/2024/08-25-\350\205\276\350\256\257\344\272\221\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272\350\207\252\345\267\261\347\232\204Git\346\234\215\345\212\241.md" @@ -152,7 +152,7 @@ a) 在服务器端设置 Git 配置(推荐): Copy ``` -ssh root@111.230.81.144 +ssh root@101.260.72.131 cd /www/wwwroot/gitTest.git git config receive.denyCurrentBranch updateInstead ``` diff --git "a/blog/2024/12-20-\345\217\263\344\276\247\350\276\271\346\240\217block 43\347\262\230\346\200\247\347\232\204\350\256\276\347\275\256.md" "b/blog/2024/12-20-\345\217\263\344\276\247\350\276\271\346\240\217block 43\347\262\230\346\200\247\347\232\204\350\256\276\347\275\256.md" new file mode 100644 index 00000000..3d4390b5 --- /dev/null +++ "b/blog/2024/12-20-\345\217\263\344\276\247\350\276\271\346\240\217block 43\347\262\230\346\200\247\347\232\204\350\256\276\347\275\256.md" @@ -0,0 +1,64 @@ +--- +date: 2024-12-20 23:19 +slug: 右侧边栏block 43粘性的设置 +--- + +要实现当滚动到 block-43 时才启用 sticky 效果,如果要使用纯CSS实现,可以利用CSS的position: sticky和父元素的特性。以下是修改后的CSS: + +亲测可用;非常完美。 + + + +```css +.sidebar-main { + position: relative; + height: 100%; +} + +#block-46 { + position: relative; +} + +#block-43 { + position: sticky; + top: 40px; + max-height: calc(100vh - 40px); + overflow-y: auto; + padding: 10px; + font-size: 0.9rem; + border-left: 1px solid #dddddd; +} + +#toc { + margin: 0; + padding: 0; + list-style-type: none; +} +``` + +为何要父元素也一起设置?为父元素设置定位有两个重要原因: + +```css +.sidebar-main { + position: relative; /* 创建定位上下文 */ + height: 100%; /* 确保有足够高度让子元素滚动 */ +} +``` + +1. 创建定位上下文: +- position: sticky 的元素需要参照最近的具有滚动机制的祖先元素 +- 设置父元素 position: relative 可以创建一个新的定位上下文 +- 这样 sticky 元素就会在这个父容器内滚动,而不是相对于视口或其他容器 + +2. 确保滚动空间: +- 如果父元素没有足够的高度,sticky 元素可能无法正常工作 +- 设置 height: 100% 确保父容器有足够的高度来容纳滚动内容 + +如果不设置父元素的这些属性,sticky 效果可能会: +- 无法找到正确的滚动参照物 +- 在错误的位置停止粘附 +- 完全不起作用 + +此方法为纯CSS。记得Astra设置里不要开启“启用置顶侧边栏”,否则与代码的CSS方案,就冲突了。 + + diff --git "a/blog/2024/12-21-\345\211\215\347\253\257\351\241\265\351\235\242\346\230\276\347\244\272is doc\350\207\252\345\256\232\344\271\211\345\255\227\346\256\265\346\230\257\345\220\246\344\270\272true.md" "b/blog/2024/12-21-\345\211\215\347\253\257\351\241\265\351\235\242\346\230\276\347\244\272is doc\350\207\252\345\256\232\344\271\211\345\255\227\346\256\265\346\230\257\345\220\246\344\270\272true.md" new file mode 100644 index 00000000..08d151e7 --- /dev/null +++ "b/blog/2024/12-21-\345\211\215\347\253\257\351\241\265\351\235\242\346\230\276\347\244\272is doc\350\207\252\345\256\232\344\271\211\345\255\227\346\256\265\346\230\257\345\220\246\344\270\272true.md" @@ -0,0 +1,46 @@ +--- +date: 2024-12-21 07:48 +slug: 前端页面显示is doc自定义字段是否为true +--- + +发表文章后,如何查看是否确实有is doc这个自定义字段 + + + + + +好的,使用Astra的钩子来添加测试代码,以下是几个合适的位置: + +```php +// 在文章内容前显示 +add_action('astra_content_before', function() { + if(is_single() && current_user_can('administrator')) { + echo '
'; + print_r( $theme_options ); + echo ''; + echo '
'; + print_r( $wp_query->query ); + echo ''; + echo '
第一段(公开)
+第二段(仅管理员)
+第三段(公开)
+ + +第一段(公开)
+第三段(公开)
+``` + +这样做的好处是: +1. 更安全 - 敏感内容完全不会传输到客户端 +2. 更轻量 - 减少了页面大小 +3. 无痕迹 - 查看源码也看不到任何相关信息 diff --git "a/blog/2024/12-21-\346\240\271\346\215\256\346\235\241\344\273\266\345\212\250\346\200\201\345\212\240\350\275\275\345\267\246\344\276\247doc\345\257\274\350\210\252\346\240\217.md" "b/blog/2024/12-21-\346\240\271\346\215\256\346\235\241\344\273\266\345\212\250\346\200\201\345\212\240\350\275\275\345\267\246\344\276\247doc\345\257\274\350\210\252\346\240\217.md" new file mode 100644 index 00000000..8d39596e --- /dev/null +++ "b/blog/2024/12-21-\346\240\271\346\215\256\346\235\241\344\273\266\345\212\250\346\200\201\345\212\240\350\275\275\345\267\246\344\276\247doc\345\257\274\350\210\252\346\240\217.md" @@ -0,0 +1,322 @@ +--- +date: 2024-12-21 07:33 +slug: 根据条件动态加载左侧doc导航栏 +--- + +你的代码是正确的。它能实现: +1. 在单篇文章页面显示左侧栏 +2. 排除 'csr' 分类的文章 +3. 使用 `astra_content_top` hook 注入到正确的位置 + +不过,可以建议一些优化: + +```php +function display_left_doc_sidebar() { + // 提前返回的条件判断,提高代码效率 + if (!is_single() || has_category('csr') || !is_active_sidebar('left-doc')) { + return; + } + + echo ' '; +} +add_action('astra_content_top', 'display_left_doc_sidebar'); +``` + +优化说明: +1. 使用提前返回模式,使代码更清晰 +2. 合并所有条件检查,减少嵌套 +3. 保留了关键的闭合div标签注释 + +如果需要添加CSS样式,可以在子主题的style.css中添加: +```css +.left-doc-sidebar { + /* 添加你的样式 */ +} +``` + + + +## 自定义字段“is doc”=true, 才注入左侧栏 + +再加个条件,如果该文章属于自定义字段“is doc”=true, 才注入左侧栏;否则不注入。 + +可以修改代码,添加自定义字段检查: + +```php +function display_left_doc_sidebar() { + // 提前返回的条件判断: + // 1. 不是单篇文章 或 + // 2. 属于csr分类 或 + // 3. 侧边栏未激活 或 + // 4. 自定义字段'is_doc'不为true + if ( + !is_single() || + has_category('csr') || + !is_active_sidebar('left-doc') || + !get_post_meta(get_the_ID(), 'is_doc', true) + ) { + return; + } + + echo ' '; +} +add_action('astra_content_top', 'display_left_doc_sidebar'); +``` + +说明: +1. `get_post_meta()` 函数用于获取文章的自定义字段 +2. 第一个参数 `get_the_ID()` 获取当前文章ID +3. 第二个参数 `'is_doc'` 是自定义字段的名称 +4. 第三个参数 `true` 表示只返回单个值而不是数组 + +使用方法: +1. 在文章编辑页面的自定义字段部分 +2. 添加字段名 `is_doc` +3. 值设为 `true`(或1) + +如果你使用ACF插件,也可以这样写: +```php +function display_left_doc_sidebar() { + if ( + !is_single() || + has_category('csr') || + !is_active_sidebar('left-doc') || + !get_field('is_doc') // ACF方式获取自定义字段 + ) { + return; + } + + echo ' '; +} +add_action('astra_content_top', 'display_left_doc_sidebar'); +``` + +--- + +这样控制左侧栏,就比较自由了。比如BSCI分类下有doc文章,常用的,属于手册之类的文章,则出现左侧导航栏;如果bsci分类下的普通文章,比如介绍BSCI新闻消息的,则不出现左侧导航栏。 + +完全正确!这种设计非常灵活和实用,因为: + +1. 分类控制层面: +- 完全排除'csr'分类的文章 +- 其他分类(如'BSCI')可以混合展示不同类型的内容 + +2. 文章类型控制层面: +- 手册类文档:设置 is_doc = true,显示左侧导航栏 +- 新闻资讯:保持 is_doc 为空,不显示左侧导航栏 + +使用场景示例: +``` +BSCI分类 +├── 手册类文章 (is_doc = true) +│ ├── BSCI认证流程 +│ ├── BSCI审核标准 +│ └── BSCI常见问题 +└── 新闻类文章 (is_doc = false/空) + ├── BSCI最新政策更新 + ├── BSCI认证案例分享 + └── BSCI行业动态 +``` + +这样的结构让内容组织更加清晰,用户体验也更好: +- 手册类内容有导航栏便于查找相关内容 +- 新闻类内容保持清爽的阅读版式 + +建议:可以考虑在后台文章列表添加一个is_doc的快速筛选器,方便管理这类文章。 + +## 文章列表添加一个is_doc的快速筛选器 + +以下是添加is_doc快速筛选器的代码: + +```php +// 在文章列表添加自定义筛选下拉框 +function add_is_doc_filter_to_posts() { + global $typenow; + if ($typenow == 'post') { + $current = isset($_GET['is_doc_filter']) ? $_GET['is_doc_filter'] : ''; + ?> + + query_vars['meta_query'] = array( + array( + 'key' => 'is_doc', + 'value' => $_GET['is_doc_filter'] === 'yes' ? 'true' : '', + 'compare' => $_GET['is_doc_filter'] === 'yes' ? '=' : 'NOT EXISTS' + ) + ); + } +} +add_action('pre_get_posts', 'process_is_doc_filter_query'); + +// 在文章列表添加自定义列 +function add_is_doc_column($columns) { + $columns['is_doc'] = __('文档类型', 'csrwiki'); + return $columns; +} +add_filter('manage_posts_columns', 'add_is_doc_column'); + +// 显示自定义列的内容 +function show_is_doc_column_content($column, $post_id) { + if ($column === 'is_doc') { + $is_doc = get_post_meta($post_id, 'is_doc', true); + echo $is_doc ? '✅ 文档' : '📰 普通'; + } +} +add_action('manage_posts_custom_column', 'show_is_doc_column_content', 10, 2); + +// 可选:让自定义列可排序 +function make_is_doc_column_sortable($columns) { + $columns['is_doc'] = 'is_doc'; + return $columns; +} +add_filter('manage_edit-post_sortable_columns', 'make_is_doc_column_sortable'); +``` + +这段代码会: +1. 在文章列表顶部添加一个筛选下拉框 +2. 添加一个新的"文档类型"列 +3. 在列中显示文章是否为文档类型 +4. 使该列可排序 + +效果: +- 在文章列表页面顶部会出现"所有文章/文档类/非文档类"的筛选选项 +- 在文章列表中会显示一个新列,用图标标识文档类型 +- 可以通过点击列标题进行排序 + +使用方法: +1. 将代码添加到子主题的functions.php中 +2. 刷新后台文章列表页面即可看到效果 + +这样可以更方便地管理和区分文档类型的文章。 + +## 后台文章列表页,可以始终让文档类型排列在前面 + +可以,通过修改默认排序顺序来实现。以下是完整代码: + +```php +// 设置后台文章列表的默认排序 +function set_default_doc_order($query) { + // 确保只在后台文章列表页面生效 + if (!is_admin() || !$query->is_main_query() || $query->get('post_type') !== 'post') { + return; + } + + // 如果用户没有指定其他排序方式 + if (!isset($_GET['orderby'])) { + $query->set('meta_key', 'is_doc'); + $query->set('orderby', array( + 'meta_value' => 'DESC', // is_doc排在前面 + 'date' => 'DESC' // 同组内按日期降序 + )); + } +} +add_action('pre_get_posts', 'set_default_doc_order'); + +// 在文章列表添加自定义列 +function add_is_doc_column($columns) { + // 重新排列列的顺序,把is_doc放在标题后面 + $new_columns = array(); + foreach ($columns as $key => $value) { + $new_columns[$key] = $value; + if ($key === 'title') { + $new_columns['is_doc'] = __('文档类型', 'csrwiki'); + } + } + return $new_columns; +} +add_filter('manage_posts_columns', 'add_is_doc_column'); + +// 显示自定义列的内容 +function show_is_doc_column_content($column, $post_id) { + if ($column === 'is_doc') { + $is_doc = get_post_meta($post_id, 'is_doc', true); + if ($is_doc) { + echo '📚 文档'; + } else { + echo '📰 普通'; + } + } +} +add_action('manage_posts_custom_column', 'show_is_doc_column_content', 10, 2); + +// 可排序设置 +function make_is_doc_column_sortable($columns) { + $columns['is_doc'] = 'is_doc'; + return $columns; +} +add_filter('manage_edit-post_sortable_columns', 'make_is_doc_column_sortable'); +``` + +这段代码将: +1. 默认把文档类型的文章排在前面 +2. 同类型的文章按发布日期降序排列 +3. 优化了图标显示样式 +4. 保留了手动排序的功能 + +效果: +- 进入文章列表页面时,文档类文章会自动排在前面 +- 用户仍可以通过点击列标题来更改排序 +- 更醒目的文档类型标识 + +额外提示: +1. 如果有其他插件也修改了排序,可能需要调整优先级 +2. 如果需要修改图标或颜色,可以在`show_is_doc_column_content`函数中调整 + +## 不用注册新自定义类型帖子,用原始的post就可以 + +是的!这种方法有很多优点: + +1. 实现简单: +- 不需要register_post_type +- 不需要额外的分类法(taxonomy) +- 不需要处理新类型的永久链接规则 + +2. 维护方便: +- 使用WordPress原生文章功能 +- 所有SEO功能自动继承 +- 主题样式完全兼容 +- 备份恢复更简单 + +3. 灵活性强: +- 通过is_doc自定义字段实现文档标记 +- 可以和现有分类、标签完美配合 +- 随时可以改变文章的文档属性 +- 不影响已有的文章结构 + +实际使用场景: +``` +WordPress文章 +├── 普通文章 (is_doc = false) +│ ├── 新闻资讯 +│ ├── 行业动态 +│ └── 案例分享 +└── 文档类文章 (is_doc = true) + ├── 认证指南 + ├── 操作手册 + └── 标准解读 +``` + +这种方案特别适合内容管理型网站,既保持了简单性,又实现了文档管理的需求。