-
wordpress如何删除长时间不登录的用户/利用sql数据库代码
wordpress如何删除长期不活跃用户,删除最近1年未登录用户删除空闲用户, 下面我们就来准备删除一些很久未登录的僵尸用户。由于wordpress网站之前按照网上教程照搬了综合版代码 , 支持显示用户昵称、网站、注册时间、注册IP、最近登录时间、登录IP,默认按照注册时间排序:分析数据库发现 网站的wp_usermeta数据表占用很多空间,下面开始操作删除不活跃用户,操作前请先将数据库备份,以免操作失误误删无法找回。 1.根据最近登录时间列出用户ID作为分析将数据库的用户表wp_users 和用户信息表wp_usermeta 里的用户ID ,最后登录时间的标签和最后登录时间筛选出来作为分析。 SELECT `ID`,`user_id`,`meta_key`,`meta_value` from `wp_users` inner join `wp_usermeta` on `wp_users`.`ID`=`wp_usermeta`.`user_id` WHERE `wp_usermeta`.`meta_key` LIKE 'last_login' 2.由于网站最后是2017年9月份建立的距今差不多2年,决定删除最近半年未登录的用户。 先做筛选看是否正确。 先尝试筛选最后登录时间为2017年的用户,一定要用多条件查询,因为wp_usermeta表里面还有你的注册时间,也是时间格式,不用多条件查询会被误删。 SELECT `ID`,`user_id`,`meta_key`,`meta_value` from `wp_users` inner join `wp_usermeta` on `wp_users`.`ID`=`wp_usermeta`.`user_id` WHERE( `wp_usermeta`.`meta_value` LIKE '%2017%') AND(`wp_usermeta`.`meta_key` LIKE 'last_login') 返回数据分析一下没问题。 3.分析上面筛选数据返回正确的,开始删除不活跃用户。 如以下格式删除 最后登录 时间为2017年的用户,2018年的类似 条件更改为 2018- 即可。 DELETE FROM `wp_users` WHERE `wp_users`.`ID` = any(SELECT `user_id` from `wp_usermeta` WHERE (`wp_usermeta`.`meta_value` LIKE '%2017%') AND(`wp_usermeta`.`meta_key` LIKE 'last_login')) 以下删除2019年每月的用户,可以一个一个月的删,如以下删除 最后登录 时间 为2019年1月的用户。 DELETE FROM `wp_users` WHERE `wp_users`.`ID` = any(SELECT `user_id` from `wp_usermeta` WHERE (`wp_usermeta`.`meta_value` LIKE '%2019-01%') AND(`wp_usermeta`.`meta_key` LIKE 'last_login')) 其他月份类似………..如以下删除 删除 最后登录 时间 为2019年6月的用户。 DELETE FROM `wp_users` WHERE `wp_users`.`ID` = any(SELECT `user_id` from `wp_usermeta` WHERE (`wp_usermeta`.`meta_value` LIKE '%2019-06%') AND(`wp_usermeta`.`meta_key` LIKE 'last_login'))- 6
- 0
-
多个wordpress共享同一用户数据库
思路1. 两个 wordpress 站共享用户数据,其他(文章、主题、设置等)数据不共享。 2. 共享 cookie,即登录 A 站后切换为 B 站后仍为登录状态。 教程前提:A、B 两站为同顶级域名(a.abc.com 与 b.abc.com)或同根目录(abc.com/a 与 abc.com/b) A 为主站,B 共享 A 的用户数据,新建 B,安装时数据库选择和 A 同一数据库下,A 的数据库表头为 wp_,B 的改为和 A 的不一样,如:wp2_,安装 B 站时管理员任意填写,反正用不到(B 站的管理员账户从 A 站)。 打开 B 站的 wp-config.php 文件,添加: define('CUSTOM_USER_TABLE ',' wp_users'); define('CUSTOM_USER_META_TABLE ',' wp_usermeta '); 这时候,用 A 的用户数据去登录 B,可以登录但无后台权限。 然后在 A 的 functions.php 添加: add_action( 'user_register', 'dup_capabilities' ); add_action('profile_update', 'dup_capabilities'); Function dup_capabilities( $user_id ){ //在这里设置数据表前缀,所有站的数据库表前缀全部写上即可。 $prefixs = array('wp_','wp2_'); Global $table_prefix; $cap_val = get_user_meta( $user_id, $table_prefix.'capabilities',true); If( !Empty( $cap_val ) ) { Foreach( $prefixs as $prefix ){ if( $prefix != $table_prefix ) update_user_meta( $user_id, $prefix.'capabilities', $cap_val ); } } } 然后回头管理员身份登录 A 站,后台用户编辑功能里把每个用户重新编辑一下,不修改任何信息即可。编辑过后,就可以用 A 站的账户登录 B 站了。 所以如果要做类似数据共享的站,最好是在一开始主站用户数量很少的时候就开始操作,不然一个个用户编辑下去也很麻烦。 A 作为主站,操作用户数据或注册新用户就在 A 站上操作,然后同步给 B。 <span style="color: #ff0000;">(以下没测试,请自行测试:</span> <span style="color: #ff0000;">如果在B站上注册新用户是否能同步给A,可以在B的functions.php里也添加以上代码)</span> 这时候 A 站 B 站不同 cookie,无法免登录自由切换,接下来实现同步 cookie。 打开 A 站的 wp-config.php 文件,复制身份认证密钥,共 8 行。 把 B 站的身份认证密钥替换为 A 的,保证 A、B 一模一样。 在 A、B 两站的 wp-config.php 文件里同时添加: define('COOKIEPATH ','/'); define('COOKIE_DOMAIN', '这里填写A、B两站的顶级域名'); define('SECRET_SALT', '这里任意自定义一串字符串或密码'); define('ADMIN_COOKIE_PATH ','/'); define('SITECOOKIEPATH ','/'); define('COOKIEHASH', md5('这里任意自定义一串字符串或密码'));- 95
- 0
-
WordPress文章发布后自动同步,无需插件API
WordPress 文章发布后自动同步文章到其他 wordpress 博客,无需插件 API前些日子在贴吧看到一位小伙伴需要这个功能,现在将我的实现方法分享给大家。WordPress 文章发布后同步文章到其他 wordpress 博客教程思路是:在另一个 WordPress 站点创建一个 API,文章发布时用 cURL 模拟 POST 请求 API 利用 wp_insert_post () 函数来创建文章。支持同步文章标题、内容、类型、分类、标签,分类需要另一个站点也有创建相同名称的分类,别名和 ID 不需要相同。实现:在博客站点的根目录创建一个文件,命名为 xxxxxxxx-post.php,代码如下:并设置用于启动 API 的 key <?php /* 文章发表后同步到另一个站点(接收) */ define('WP_USE_THEMES ', false); require_once("wp-load.php"); $key='xxxxxxxxxx'; //设置API的密钥,建议设置复杂 if($_POST['key']==$key){ $categorys=explode(',',$_POST['category']); $category=array(); for($x=1;$x<count($categorys);$x++) { $category[$x-1]=get_cat_ID($categorys[$x]); } $info = array( 'post_title' => $_POST['title'], 'post_content' => $_POST['content'], 'post_status' => 'publish', 'post_author' => 1, //发布文章的作者ID,1 为管理员 'post_date' => $_POST['date'], 'tags_input' => $_POST['tags'], 'post_category' => $category, 'post_type' => $_POST['type'] ); wp_insert_post( $info ); } ?> 在主博客主题的 functions.php 文件的最后一个?> 前加入已下代码,并设置 key,修改 API 地址: /* 文章发表后同步到另一个站点(发送) */ add_action('publish_post', 'E_sync_post'); //钩子,在文章发布时执行 Function E_sync_post($post_ID) { $key='xxxxxxxxxxxxx'; //输入你设置的密钥 $url='http://xxxxxx/xxxxxxxxxxxx-post.php';//API地址(接受同步文章博客地址,例:xx表示为发布文章主博客,那填写API地址就是负博客地址) $post_info = get_post($post_ID); If ( $post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) { $title=$_POST['post_title']; $content=$_POST['content']; $date=$_POST['aa'].'-'.$_POST['mm'].'-'.$_POST['jj'].' '.$_POST['hh'].':'.$_POST['mn'].':'.$_POST['ss']; $category=''; for($x=1;$x<count($_POST['post_category']);$x++) { $category.=','.get_cat_name($_POST['post_category'][$x]); } $type=$_POST['post_type']; $tags=str_replace('、',',',$_POST['tax_input']['post_tag']); if($_POST['newtag']['post_tag']){ $tags.=','.str_replace('、',',',$_POST['newtag']['post_tag']); } $data = 'key='.$key.'&title='.$title.'&content='.$content.'&date='.$date.'&category='.$category.'&type='.$type.'&tags='.$tags; $ch = curl_init (); //cURL模拟POST curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, TRUE ); curl_setopt ( $ch, CURLOPT_POST, TRUE ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE); $ret = curl_exec ( $ch ); curl_close ( $ch ); Return $ret; } } 这样一来,在主站发表一篇文章后,镜像站点也就会发表出来一篇文章了,但也会有一些意外情况,比如不是马上发表出来,而是显示计划中,正常隔几分钟后会发表好,但也会有发表失败,需要在后台文章管理中,选择该发表失败文章,状态修改为已发布,更新即可。一些意外情况的解决: 问题 1,由于主题升级后,functions.php 代码会被置换。用以上方法实现的内容镜像每次在主题升级后都需要修改 functions.php 代码,这会造成麻烦。 所以有如下解决办法,代码如下: <?php //文章推送 add_action('publish_post', 'fanly_sync_post'); //钩子,在文章发布时执行 Function fanly_sync_post($post_ID) { $key='123456'; //输入你设置的密钥 $url='http://6.3838521.com/post.php';//API 地址,就是接受数据的那个站点 $post_info = get_post($post_ID); If (…- 64
- 0
-
WordPress给网站右键添加自定义的按钮美化
要给 WordPress 网站右键添加自定义按钮实现美化,可以按照以下步骤进行操作: 在 WordPress 后台添加功能代码:将以下代码添加到主题的 functions.php 文件中,这将在前端页面的 标签之间添加一段 JavaScript 代码。 function custom_right_click_menu() { ?> <script type="text/javascript"> (function($) { $(document).ready(function() { $('body').on('contextmenu', function() { var top = event.pageY + 'px'; var left = event.pageX + 'px'; $('<div>').attr({ id: 'my-custom-menu', }).css({ display: 'none', position: 'fixed', top: top, left: left, border: '1px solid #ccc', background: '#fff', padding: '8px', 'z-index': '9999' }).html('<ul><li><a href="#">自定义按钮1</a></li><li><a href="#">自定义按钮2</a></li></ul>').appendTo('body').fadeIn(200); return false; }); $('body').click(function() { $('#my-custom-menu').fadeOut(200, function() { $(this).remove(); }); }); }); })(jQuery); </script> <?php } add_action('wp_head', 'custom_right_click_menu'); 修改自定义按钮:将上述代码中的自定义按钮名称和链接修改为你需要的名称和链接。你可以根据需求添加更多的按钮。设计菜单样式:根据需求,将自定义按钮菜单样式进行修改。保存并应用:最后,在 WordPress 后台将修改后的主题文件保存并应用即可。通过以上步骤,就可以为 WordPress 网站添加自定义按钮实现美化。- 74
- 0
-
通过原型工具直接生成APP的案例,后端采用的WordPress
原型工具可以将原型转换为移动应用程序。其中之一是 Proto.io。Proto.io 可以将您的原型直接转换为 iOS 和 Android 应用程序。这是使用 WordPress 作为后端的一个示例: 步骤 1: 创建原型 使用 Proto.io 创建您的移动应用程序原型。 Proto.io 是一个在线移动原型工具,可以让您设计和交互您的应用程序原型,而无需编写代码。 步骤 2:连接 WordPress 到 Proto.io Proto.io 可以与 WordPress 集成。在 WordPress 中,您需要安装并启用 WP REST API 插件。这将启用 WordPress 的 REST API,并允许 Proto.io 访问您的 WordPress 帖子和页面。 步骤 3:创建 API 密钥 在 WordPress 中,您需要创建一个 API 密钥,以便 Proto.io 可以通过 REST API 访问您的 WordPress 网站。导航到您的 WordPress 仪表板 > 用户 > 个人资料。从个人资料页面中,单击生成新的 API 密钥按钮。复制并保存 API 密钥。 步骤 4:将 WordPress 数据添加到 Proto.io 使用 Proto.io,您可以添加 WordPress 页面和帖子到您的移动应用程序原型中。通过 Proto.io 插件,您可以轻松地将 WordPress 数据添加到您的手机应用程序原型中,并且将 WordPress 仪表板和新闻页面添加到应用程序底部栏中,以便您的用户可以浏览您的网站。 步骤 5:导出应用程序 完成应用程序原型后,您可以将其导出为 iOS 或 Android 应用程序。Proto.io 将利用您创建的原型,将其转换为应用程序原型,并添加所需的移动应用程序功能和功能。 这就是一个通过原型工具直接生成 APP 的案例,后端采用的 WordPress。- 9
- 0
-
如何保护WordPress的wp-cron.php
直接屏蔽外部访问,仅允许服务器自身访问 (因为 Wordpress 执行任务的时候,就是在服务器上请求的)。在你的域名 conf 下,添加下面语句: #禁止外网访问wp-cron location ~ ^/wp-cron\.php { allow 127.0.0.1;#本地IP allow 127.255.255.255;#服务器IP deny all; location ~ .*\.php?$ { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; } } 这样就 ok 了。现在的 Wordpress 的安装文件(/wp-admin/install.php)建议安装后,禁止访问吧。只要: #禁止读取install location ~ ^/wp-admin/install\.php { deny all; log_not_found off; access_log off; } 为什么不直接删除呢,因为每次 Wordpress 更新后,都有。至于为什么屏蔽,原因就是,访问它,它会读取内部 cache(一般在 MySQL,如果你没转移的话),如果不存在,读取 MySQL 数据库,确认安装,返回安装完毕,设置 cache(同样,如果没有外部 Cache,那么就在 MySQL 里面)。- 14
- 0
-
WordPress插件 用于用户登陆后不显示部分广告
首先在 WordPress 插件目录下创建一个新目录,并在其中创建一个名为 "hide-ads-on-login" 的新文件夹。在此文件夹中创建一个新 PHP 文件,命名为 "hide-ads-on-login.php" ,并将以下代码添加到该文件中: <?php /* Plugin Name: Hide Ads on Login Description: Hides ads for logged in users Version: 1.0 Author: Your Name Here License: GPL2 */ // Set cookie on login function hide_ads_set_cookie() { if ( is_user_logged_in() ) { setcookie( 'hide_ads', 'true' ); } } add_action( 'wp_login', 'hide_ads_set_cookie' ); // Check cookie and hide ads function hide_ads_hide_content() { if ( isset( $_COOKIE['hide_ads'] ) && $_COOKIE['hide_ads'] == 'true' ) { echo '<style type="text/css">#ad-section { display:none; }</style>'; } } add_action( 'wp_head', 'hide_ads_hide_content' ); 此插件将在用户登录时设置一个名为 "hide_ads" 的 cookie。插件还使用了一个名为 "hide_ads_hide_content" 的函数,该函数检查 cookie,并在页面顶部添加 CSS 样式,以将 ID 为 "ad-section" 的广告部分隐藏。现在将 "hide-ads-on-login" 文件夹上传到 WordPress 插件目录中的 "wp-content/plugins" 目录。在 WordPress 后端页面中,启用 "Hide Ads on Login" 插件。现在,在用户登录后,将显示页面上 ID 为 “ad-section” 的广告部分。如果它存在,将在检查 cookie 时隐藏它。如果您希望在其他部分隐藏广告,只需将 CSS 样式中的 "ad-section" ID 更改为要隐藏的部分的 ID 即可。 另外一个方法是: 让注册用户登陆 WordPress 后不显示广告 在 WordPress 插入广告代码的时候加上判断。通过 get_current_user_id () 返回当前的用户,如果没有登陆用户,那么就是 0. $ad_code = '广告代码放这里..'; if (get_current_user_id()) { $ad_code = ''; } echo $ad_code; 或者是: <php if (!get_current_user_id()) { ?> // 广告代码HTML <php } ?> 这样,只要平时登陆 WordPress, 页面就不会显示广告。一般来说是不会和缓存插件冲突的,因为一般缓存只有在不是 WordPress 用户登陆的时候才会生成缓存。当然,如果你只想你登陆的时候不显示广告 (比如有多个 wordpress 用户), 那么只要知道你用户的 user id 就可以。假设是 1 的话: $ad_code = 'Ads code put here.'; if (get_current_user_id() == 1) { $ad_code = ''; } echo $ad_code; 或者,也许长这样: <php if (get_current_user_id() != 1) { ?>…- 62
- 0
-
火车头发布文章自动发布到了页面里的处理方法
Wordpress 升级到 6.3 后,一些使用火车头发布模块的朋友,会自动把文章发布到页面下面,而非文章下面。 出现问题原因: WordPress 内核升级到 6.3 后,$post_type被作为全局变量了,在火车头发布接口内的 post_type 被默认成了page,最终导致文章被发布到了page页面下。解决方法:如果不需要发布到其他地方,可以打开火车头发布接口文件,搜索post_type替换成其他任意字符串即可,替换成post_type2即可。- 60
- 0