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方案,就冲突了。 + +![image-20241220232139172](https://docu-1319658309.cos.ap-guangzhou.myqcloud.com/image-20241220232139172.png) 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这个自定义字段 + +![image-20241221075047228](https://docu-1319658309.cos.ap-guangzhou.myqcloud.com/image-20241221075047228.png) + + + +好的,使用Astra的钩子来添加测试代码,以下是几个合适的位置: + +```php +// 在文章内容前显示 +add_action('astra_content_before', function() { + if(is_single() && current_user_can('administrator')) { + echo '
'; + echo '文章ID: ' . get_the_ID() . '
'; + echo 'is_doc值: ' . get_post_meta(get_the_ID(), 'is_doc', true); + echo '
'; + } +}); + +// 或者在文章标题后显示 +add_action('astra_entry_content_before', function() { + if(is_single() && current_user_can('administrator')) { + echo '
'; + echo '文章ID: ' . get_the_ID() . '
'; + echo 'is_doc值: ' . get_post_meta(get_the_ID(), 'is_doc', true); + echo '
'; + } +}); + +// 或者在文章内容后显示 +add_action('astra_content_after', function() { + if(is_single() && current_user_can('administrator')) { + echo '
'; + echo '文章ID: ' . get_the_ID() . '
'; + echo 'is_doc值: ' . get_post_meta(get_the_ID(), 'is_doc', true); + echo '
'; + } +}); +``` + +选择一个钩子使用即可,建议使用`astra_content_before`,这样显示在最明显的位置。测试完成后记得删除代码。 diff --git "a/blog/2024/12-21-\345\226\204\347\224\250\347\256\241\347\220\206\345\221\230\345\217\257\350\247\201\347\232\204wp_footer\346\235\245\350\260\203\350\257\225.md" "b/blog/2024/12-21-\345\226\204\347\224\250\347\256\241\347\220\206\345\221\230\345\217\257\350\247\201\347\232\204wp_footer\346\235\245\350\260\203\350\257\225.md" new file mode 100644 index 00000000..5f948e76 --- /dev/null +++ "b/blog/2024/12-21-\345\226\204\347\224\250\347\256\241\347\220\206\345\221\230\345\217\257\350\247\201\347\232\204wp_footer\346\235\245\350\260\203\350\257\225.md" @@ -0,0 +1,112 @@ +--- +date: 2024-12-21 06:10 +slug: 善用管理员可见的wp_footer来调试 +--- + + + +输出到管理员可见的wp-footer,可以用来调试,很方便啊。举几个例子说明 + + + +以下是几个实用的调试输出示例,都添加到 functions.php 中: + +1. 检查当前页面模板: +```php +function debug_template_info() { + if ( current_user_can( 'administrator' ) ) { + echo ''; + echo '
'; + echo 'Template File: ' . get_page_template_slug(); + echo '
Post Type: ' . get_post_type(); + echo '
Page Type: ' . (is_single() ? 'Single' : (is_page() ? 'Page' : 'Other')); + echo '
'; + } +} +add_action( 'wp_footer', 'debug_template_info' ); +``` + +2. 显示当前使用的钩子: +```php +function debug_current_hooks() { + if ( current_user_can( 'administrator' ) ) { + global $wp_actions; + echo ''; + echo '
'; + echo 'Current Active Hooks:
'; + foreach ( $wp_actions as $action => $count ) { + echo $action . ' (' . $count . ')
'; + } + echo '
'; + } +} +add_action( 'wp_footer', 'debug_current_hooks' ); +``` + +3. 查看Astra主题设置: +```php +function debug_astra_settings() { + if ( current_user_can( 'administrator' ) ) { + echo ''; + echo '
'; + echo 'Astra Settings:
'; + $theme_options = get_option( 'astra-settings' ); + echo '
';
+        print_r( $theme_options );
+        echo '
'; + echo '
'; + } +} +add_action( 'wp_footer', 'debug_astra_settings' ); +``` + +4. 查看当前页面的查询: +```php +function debug_current_query() { + if ( current_user_can( 'administrator' ) ) { + global $wp_query; + echo ''; + echo '
'; + echo 'Current Query:
'; + echo '
';
+        print_r( $wp_query->query );
+        echo '
'; + echo '
'; + } +} +add_action( 'wp_footer', 'debug_current_query' ); +``` + +5. 显示已加载的脚本和样式: +```php +function debug_enqueued_scripts() { + if ( current_user_can( 'administrator' ) ) { + global $wp_scripts, $wp_styles; + echo ''; + echo '
'; + echo 'Enqueued Scripts:
'; + foreach( $wp_scripts->queue as $script ) { + echo $script . '
'; + } + echo '
Enqueued Styles:
'; + foreach( $wp_styles->queue as $style ) { + echo $style . '
'; + } + echo '
'; + } +} +add_action( 'wp_footer', 'debug_enqueued_scripts' ); +``` + +这些调试输出都: +1. 仅对管理员可见 +2. 添加在页面底部 +3. 使用容易识别的HTML注释 +4. 有基本的样式便于阅读 +5. 可以同时使用多个 + +使用时注意: +- 只在开发环境中使用 +- 正式环境记得删除或注释掉 +- 可以根据需要修改样式让显示更醒目 +- 可以添加更多你需要的信息 diff --git "a/blog/2024/12-21-\345\246\202\344\275\225\347\273\231wordpress\346\226\207\347\253\240\350\256\276\347\275\256\350\207\252\345\256\232\344\271\211\345\255\227\346\256\265 is doc=true.md" "b/blog/2024/12-21-\345\246\202\344\275\225\347\273\231wordpress\346\226\207\347\253\240\350\256\276\347\275\256\350\207\252\345\256\232\344\271\211\345\255\227\346\256\265 is doc=true.md" new file mode 100644 index 00000000..aa79315c --- /dev/null +++ "b/blog/2024/12-21-\345\246\202\344\275\225\347\273\231wordpress\346\226\207\347\253\240\350\256\276\347\275\256\350\207\252\345\256\232\344\271\211\345\255\227\346\256\265 is doc=true.md" @@ -0,0 +1,220 @@ +--- +date: 2024-12-21 09:47 +slug: 如何给wordpress文章设置自定义字段 is doc=true +--- + +有几种设置自定义字段 is_doc 的方法: + + + + + + + +1. ## 使用WordPress原生自定义字段(最简单): +```php +// 添加到functions.php,显示自定义字段框 +function show_is_doc_meta_box() { + // 确保自定义字段模块可见 + add_post_type_support('post', 'custom-fields'); + + add_meta_box( + 'is_doc_meta_box', // ID + '文档类型设置', // 标题 + 'is_doc_meta_box_callback', // 回调函数 + 'post' // 显示位置 + ); +} +add_action('add_meta_boxes', 'show_is_doc_meta_box'); + +// meta box的内容 +function is_doc_meta_box_callback($post) { + wp_nonce_field('is_doc_save', 'is_doc_nonce'); + $value = get_post_meta($post->ID, 'is_doc', true); + ?> + + $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 add_quick_edit_is_doc($column_name, $post_type) { + if ($column_name !== 'is_doc') return; + ?> +
+
+ +
+
+ + + + +完整步骤: + +### 首先创建编辑器专用的JS文件:`editor-custom.js` + +```javascript +// editor-custom.js +wp.domReady(() => { + // 获取所有块类型 + const blockTypes = wp.blocks.getBlockTypes(); + + blockTypes.forEach(blockType => { + // 扩展现有的块属性 + wp.blocks.unregisterBlockType(blockType.name); + + const settings = { + ...blockType, + attributes: { + ...blockType.attributes, + adminOnly: { + type: 'boolean', + default: false, + } + }, + edit: function(props) { + const { attributes, setAttributes } = props; + + // 创建原始的编辑界面 + const originalEdit = blockType.edit; + + return wp.element.createElement( + wp.element.Fragment, + null, + originalEdit(props), + wp.element.createElement( + wp.blockEditor.InspectorControls, + {}, + wp.element.createElement( + wp.components.PanelBody, + { title: '访问控制' }, + wp.element.createElement( + wp.components.ToggleControl, + { + label: '仅管理员可见', + checked: attributes.adminOnly, + onChange: (value) => setAttributes({ adminOnly: value }) + } + ) + ) + ) + ); + } + }; + + wp.blocks.registerBlockType(blockType.name, settings); + }); +}); +``` + +### 在`functions.php`中加载编辑器脚本、处理前端显示逻辑: + +```php +// 加载编辑器脚本 +add_action('enqueue_block_editor_assets', 'my_editor_scripts'); +function my_editor_scripts() { + wp_enqueue_script( + 'my-editor-custom-js', + get_stylesheet_directory_uri() . '/editor-custom.js', + array('wp-blocks', 'wp-element', 'wp-editor', 'wp-components'), + '1.0', + true + ); +} + +// 处理前端显示逻辑 +add_filter('render_block', 'filter_admin_only_blocks', 10, 2); +function filter_admin_only_blocks($block_content, $block) { + // 如果块没有设置adminOnly属性,直接返回原内容 + if (empty($block['attrs']) || !isset($block['attrs']['adminOnly'])) { + return $block_content; + } + + // 只有设置了adminOnly时才检查权限 + if ($block['attrs']['adminOnly'] && !current_user_can('manage_options')) { + return ''; + } + + return $block_content; +} +``` + +这个方案的特点: +1. 为所有块类型都添加了管理员可见选项 +2. 在块的右侧面板中显示控制开关 +3. 前端会自动过滤非管理员的访问 +4. 代码组织清晰,维护方便 + +使用方法: +1. 在编辑器中选择任意块 +2. 在右侧面板中找到"访问控制"选项 +3. 打开"仅管理员可见"开关即可 + +这样就完成了所需功能的实现! + +--- + +### 前端显示逻辑代码解释 + +这个过滤器的工作方式是这样的: + +1. WordPress在渲染页面时,会**逐个**处理每个块 +2. 对每个块,WordPress都会触发一次`render_block`过滤器 +3. 我们的函数会被调用,但**只处理当前块**,不是循环 + +页面内容: +[块1] -> 没有adminOnly属性 -> 直接返回原内容 +[块2] -> 有adminOnly=true -> 检查权限 +[块3] -> 没有adminOnly属性 -> 直接返回原内容 + + + +### 当普通访客访问时,该块不会输出到客户端浏览器: + +1. 服务器端处理: +```php +if ($block['attrs']['adminOnly'] && !current_user_can('manage_options')) { + return ''; // 返回空字符串 +} +``` +这里直接返回空字符串,意味着: +- 这个块的HTML完全不会输出到页面源代码中 +- 访客的浏览器不会收到任何相关的HTML代码 +- 不会留下任何痕迹(注释等) + +举个例子,假设页面有3个段落块: +```html + +

第一段(公开)

+

第二段(仅管理员)

+

第三段(公开)

+ + +

第一段(公开)

+

第三段(公开)

+``` + +这样做的好处是: +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 '
'; + dynamic_sidebar('left-doc'); + 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 '
'; + dynamic_sidebar('left-doc'); + 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 '
'; + dynamic_sidebar('left-doc'); + 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) + ├── 认证指南 + ├── 操作手册 + └── 标准解读 +``` + +这种方案特别适合内容管理型网站,既保持了简单性,又实现了文档管理的需求。