自用WordPress代码片段分享

自用WordPress代码片段分享

WordPress使用久了,给主题添加的功能较多,年纪大了,怕忘记,就记下来,方便自己寻找,本次代码均添加在主题文件的functions.php中。

1、移除站点健康仪表盘小工具,代码来自WordPress大学

/** * 移除 工具-站点健康 菜单 */function wpkj_remove_site_health_menu(){ remove_submenu_page( 'tools.php','site-health.php' );}add_action( 'admin_menu', 'wpkj_remove_site_health_menu' );

2、更新文章的自动更新时间为当前时间

//时间function update_post_publish_date_on_update( $post_id, $post, $update ) { global $wpdb; // 跳过:自动保存、修订、未发布、非文章 if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( wp_is_post_revision( $post_id ) ) return; if ( $post->post_type !== 'post' ) return; if ( ! $update ) return; // 检查是否已执行过(避免重复) if ( get_post_meta( $post_id, '_custom_updated_date_once', true ) ) { return; } // 获取当前时间(本地时间) $current_time = current_time( 'mysql' ); $current_time_gmt = get_gmt_from_date( $current_time ); // 使用直接 SQL 更新 post_date,避免触发额外钩子 $wpdb->update( $wpdb->posts, array( 'post_date' => $current_time, 'post_date_gmt' => $current_time_gmt ), array( 'ID' => $post_id ) ); // 设置标记,避免重复更新 update_post_meta( $post_id, '_custom_updated_date_once', 1 ); // 可选:删除标记(只在这次保存中有效) add_action( 'shutdown', function() use ( $post_id ) { delete_post_meta( $post_id, '_custom_updated_date_once' ); } );}add_action( 'save_post', 'update_post_publish_date_on_update', 10, 3 );

3、给网站添加CDN,代码来自zhang.ge

// **// * 原文地址:https://zhang.ge/4905.html// **function QiNiuCDN(){ function Rewrite_URI($html){ /* 前面自己的域名域名,后面是需要加速的静态文件类型,使用分隔符 | 隔开即可 */ $pattern ='/https:\/\/(www\.|)5v13\.com\/wp-([^"\']*?)\.(jpg|webp|js|gif|png|jpeg)/i'; /* CDN 地址,请自行替换成腾讯、阿里等cdn地址 */ $replacement = 'https://cdn.5v13.com/wp-$2.$3';$html = preg_replace($pattern, $replacement,$html);return $html;} if(!is_admin()){ ob_start("Rewrite_URI"); } } add_action('init', 'QiNiuCDN');

4、给经典编辑器添加首行缩进,同时需要添加js,js路径我这里为主题目录下的/js/indent-first-line.js,可以根据自己的实际情况修改

// 添加自定义按钮到经典编辑器function add_indent_first_line_button($buttons) { array_push($buttons, 'indent_first_line'); return $buttons;}add_filter('mce_buttons', 'add_indent_first_line_button');// 注册并添加自定义 TinyMCE 插件function register_indent_first_line_plugin($plugin_array) { $plugin_array['indent_first_line'] = get_template_directory_uri() . '/js/indent-first-line.js'; return $plugin_array;}add_filter('mce_external_plugins', 'register_indent_first_line_plugin');

js代码如下,请自行创建

(function() { tinymce.PluginManager.add('indent_first_line', function(editor) { editor.addButton('indent_first_line', { text: '首行缩进', icon: false, onclick: function() { var selectedNode = editor.selection.getNode(); editor.dom.setStyle(selectedNode, 'text-indent', '2em'); } }); });})();

 


5.统计网站所有的草稿并列出,搭配https://seo.juziseo.com/tools/kai/

// 添加后台菜单项:草稿编辑链接add_action('admin_menu', function () { add_menu_page( '草稿链接', '草稿链接', 'edit_posts', 'theme-draft-links', 'theme_draft_links_page_callback', 'dashicons-media-code', 25 );});// 页面输出函数(含复制按钮)function theme_draft_links_page_callback() { if (!current_user_can('edit_posts')) { wp_die(__('你无权限查看此页面。')); } echo '<div class="wrap">'; echo '<h1>草稿编辑链接</h1>'; // 使用 transient 缓存草稿链接 $cache_key = 'cached_draft_edit_links'; $cached_links = get_transient($cache_key); if ($cached_links === false) { $query = new WP_Query(array( 'post_status' => 'draft', 'post_type' => 'post', 'posts_per_page' => -1, 'fields' => 'ids', 'no_found_rows' => true, 'cache_results' => true, )); if (!empty($query->posts)) { $links = array_map(function ($post_id) { return esc_url(get_edit_post_link($post_id)); }, $query->posts); $cached_links = implode("\n", $links); } else { $cached_links = ''; } set_transient($cache_key, $cached_links, 60); } if (empty($cached_links)) { echo '<p>暂无草稿文章。</p>'; } else { echo '<p>以下是草稿文章的编辑链接:</p>'; // 复制按钮 echo '<button id="copyLinksBtn" class="button button-primary" style="margin-bottom:10px;">复制全部</button>'; echo '<span id="copyStatus" style="margin-left:10px;"></span>'; // 链接显示区域 echo '<pre id="linksOutput" style="background:#f5f5f5; padding:15px; border-radius:6px; overflow:auto; font-size:13px;"><code>'; echo esc_html($cached_links); echo '</code></pre>'; // JS 脚本:复制逻辑 echo <<<HTML<script>document.getElementById('copyLinksBtn').addEventListener('click', function() { const content = document.getElementById('linksOutput').innerText; navigator.clipboard.writeText(content).then(function() { document.getElementById('copyStatus').innerText = "已复制!"; setTimeout(() => document.getElementById('copyStatus').innerText = "", 2000); }, function() { document.getElementById('copyStatus').innerText = "复制失败!"; });});</script>HTML; } echo '</div>';}

6.在WordPress文章后台添加一个复制按钮,快速复制一篇并添加为草稿

// 复制文章function zm_clone_post_as_draft() {global $wpdb;if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'zm_clone_post_as_draft' == $_REQUEST['action'] ) ) ) {wp_die('No post to clone has been supplied!');}// Nonce 验证if ( !isset( $_GET['clone_nonce'] ) || !wp_verify_nonce( $_GET['clone_nonce'], basename( __FILE__ ) ) )return;// 获取原文章ID$post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );// 所有文章数据$post = get_post( $post_id );// 如果不希望当前用户作为新文章作者,将下两行替换为$new_post_author = $post->post_author;$current_user = wp_get_current_user();$new_post_author = $current_user->ID;// 如果发布数据存在,则创建发布克隆if (isset( $post ) && $post != null) {// 创建新文章数组$args = array('comment_status' => $post->comment_status,'ping_status' => $post->ping_status,'post_author' => $new_post_author,'post_content' => $post->post_content,'post_excerpt' => $post->post_excerpt,'post_name' => $post->post_name,'post_parent' => $post->post_parent,'post_password' => $post->post_password,'post_status' => 'draft','post_title' => $post->post_title,'post_type' => $post->post_type,'to_ping' => $post->to_ping,'menu_order' => $post->menu_order);// 通过wp_insert_post() 函数添加文章$new_post_id = wp_insert_post( $args );// 将新的文章设置为草稿$taxonomies = get_object_taxonomies($post->post_type); // 返回文章类型的分类数组,例如:array("category", "post_tag");foreach ($taxonomies as $taxonomy) {$post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);}// 查询复制所有文章信息 post meta$post_meta_infos = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");if (count($post_meta_infos)!=0) {$sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";foreach ($post_meta_infos as $meta_info) {$meta_key = $meta_info->meta_key;if( $meta_key == '_wp_old_slug' ) continue;$meta_value = addslashes($meta_info->meta_value);$sql_query_sel[]= "SELECT $new_post_id, '$meta_key', '$meta_value'";}$sql_query.= implode(" UNION ALL ", $sql_query_sel);$wpdb->query($sql_query);}wp_redirect( admin_url( 'edit.php?post_type='.$post->post_type ) );exit;} else {wp_die('Post creation failed, could not find original post: ' . $post_id);}}add_action( 'admin_action_zm_clone_post_as_draft', 'zm_clone_post_as_draft' );// 复制文章并添加到列表function zm_clone_post_link( $actions, $post ) {if (current_user_can('edit_posts')) {$actions['clone'] = '<a href="' . wp_nonce_url('admin.php?action=zm_clone_post_as_draft&post=' . $post->ID, basename(__FILE__), 'clone_nonce' ) . '" title="Clone this '.$post->post_type.'" rel="permalink">复制</a>';}return $actions;}add_filter( 'post_row_actions', 'zm_clone_post_link', 10, 2 );add_filter('page_row_actions', 'zm_clone_post_link', 10, 2);

 

声明:本站所有软件资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
Mac软件

Flow 3.3.1 激活版/ 番茄工作法&专注计时器

2025-4-25 11:28:34

Mac软件

Adguard 2.7.0 Mac中文激活版

2022-4-3 1:00:09

0 条回复A文章作者M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索