首页
wjlink
投稿
视频
直播
壁纸
更多
留言
统计
LINK
Search
1
宝塔面板绑定域名套上cloudflare – 实现cdn访问拯救你的IP
110 阅读
2
Python 爬取YouTube某个频道下的所有视频信息
109 阅读
3
为你的 WordPress 站点配置 Telegram Instant View
63 阅读
4
苹果CMS(MACCMS)如何在标题中随机插入关键词
60 阅读
5
windows 使用 FFmpeg 按大小或时间来批量分割视频
58 阅读
技術類
自媒体
調查
问卷调查
美國站
英國站
注册丨登录
Search
标签搜索
wordpress
V2Ray
vps
苹果cms
面板
php
宝塔
ipfs
DD
脚本
语言
上传
判断
Youtube
cdn
ip
AI
HTML
1
2
Gengre
累计撰写
67
篇文章
累计收到
0
条评论
今日撰写
0
篇文章
️
首页
分类
技術類
自媒体
調查
问卷调查
美國站
英國站
页面
wjlink
投稿
视频
直播
壁纸
留言
统计
LINK
登录丨注册
搜索到
5
篇与
的结果
2024-09-07
WordPress火车头发布接口标准版Locoy.php(支持4.7至最新5.1.X)
首先,感谢作者Lily编写的代码,即便劣币驱逐良币的今天,这个版本的wordpress发布接口仍然算得上最经典之作。1、将Locoy.php文件放在WP站点的根目录,自行修改其中的发布密码2、模块文件导入方法:在采集任务中导入“Wordpress免登陆-发布接口.wpm”发布模块文件,或将文件拷贝到火车头的\Module\ 目录下。如果第二步看不懂,是因为你火车采集水平太LOW,好好百度一下,相信很快能掌握发布模块的正确使用方法。3、模块重点参数列表:post_title 必选 标题 post_content 必选 内容 tag 可选 标签 post_category 可选 分类 post_date 可选 时间 post_excerpt 可选 摘要 post_author 可选 作者 category_description 可选 分类信息 post_cate_meta[name] 可选 自定义分类信息 post_meta[name] 可选 自定义字段 post_type 可选 文章类型 默认为'post' post_taxonomy 可选 自定义分类方式 post_format 可选 文章形式 4、Locoy部分代码,重点区域:<?php /* WordPress免登录发布接口,支持最新Wordpress4.8.2 版本号: T3 适用于火车头采集器7.6-9.6 === 由小男孩伪原创友情提供:http://xiaoboy.CN === 更新说明 T3: 2017.11.03 1、优化了验证标题重复 2、优化了附件、图片、缩略图的上传和生成 T2: 2017.10.23 1、增加了对多个分类方式的发布参数(post_taxonomy_list),使用方法请参考功能特性 2、修复BUG: 分类名称如果含有数字会导致分类错误 T1:2017.10.12 1、旧版发布接口重新设计,新版本号为T1,以后不再对旧版升级维护.旧版本支持3.X-4.8.2 2、修复BUG:当规则中没有发布模块中某个参数时会导致发布数据异常(会显示db:标签名) 3、优化strtoarray函数 ■ 功能特性: 分类(category): 1、分类支持分类名和分类ID, 系统自动判断 2、多分类处理(多个分类请用逗号隔开) 3、自动创建分类,如果网站内没有这个分类,会自动创建分类。 4、自动创建父分类, 适用于想要设置父分类并且网站中不存在. 使用方法: WEB发布模块/高级功能/内容发布参数/ -> 增加 post_parent_cate 5、添加分类描述 使用方法: WEB发布模块/高级功能/内容发布参数/ -> 增加 category_description 标签: 1、多标签处理(多个标签请用逗号隔开) 作者: 1、多作者处理, 可设置多个作者随机发布文章, 发布参数中指定post_author 2、自定义作者功能,如果提交的数据为用户名的话,会自动检测系统是否存在该用户,如果已存在则以该用户发布,不存在则自动新建用户(接口以针对中文用户名进行了处理) 图片和缩略图: 1、Web图片上传,无需FTP上传 2、自动设置【标签:内容】的第一张图片为文章的特色图片. 3、支持自定定义缩略图(特色图像) 使用方法: WEB发布模块/高级功能/文件上传设置/ 增加 缩略图所在的标签,表单名为: thumb递增数字 3、标准的php.ini单次最大文件上传数为20个, 如果发布的内容附件超过20个,将会出错. 如果遇到此问题请更改php.ini的max_file_uploads 参数 . 或者更换上传方式为FTP 时间和预约发布: 1、正确的时间格式为2017-10-01 23:45:55或者2017-10-01 23:45 2、自动处理服务器时间与博客时间的时区差异 3、随机时间安排与预约发布功能: 可以设定发布时间以及启用预约发布功能. 启用预约发布后,如果POST过来的数据包涵时间,则以时间为准立即发布,反之则以接口文件配置时间发布。 评论: 1、发布评论,支持评论时间、评论作者、评论内容, 需要在火车头->Web发布模块/内容发布参数/ ->新增 comment、commentdate、commentauthor三个参数,分别对应评论内容、评论时间、评论作者. 三个参数缺一不可 其它: 1、标题重复判断, 打开参数配置中的$checkTitle,即可判断标题是否重复,对于重复结果不予发布. 2、发布文章后自动ping,需要再后台设置->撰写->更新服务 填入ping地址 3、'pending review' 更新文章状态pending(审核) 为 publish(所有人可见) 自定义字段 1、使用方法: WEB发布模块/高级功能/内容发布参数/ -> 增加 post_meta['字段名'] 自定义文章类型(post_type) 1、使用方法: WEB发布模块/高级功能/内容发布参数/ -> 增加 post_type 自定义文章形式(post_format) 1、使用此功能需要修改配置参数 $postformat=true;并在火车头->Web发布模块/内容发布参数/->新增发布参数post_format, 标签内容必须为: 图像: post-format-image 视频: post-format-video 自定义分类(taxonomy): 1、使用方法: WEB发布模块/高级功能/内容发布参数/ -> 增加 post_taxonomy, 使用taxonomy之后, 文章只能发布在taxonomy所属的分类下, 分类名称或者ID请填写在分类category 自定义分类--多个分类--(taxonomy): 1、使用方法: WEB发布模块/高级功能/内容发布参数/ -> 增加 post_taxonomy_list[taxonomy_name], 使用后可以将文章归属到多个自定义分类下, 多个term必须使用|||隔开 自定义分类信息(add_term_meta) 1、使用方法: WEB发布模块/高级功能/内容发布参数/ -> 增加 post_cate_meta['meta_key'], 标签内容可以为文本或者数组,数组必须参照格式: key$$value|||key$$value|||key$$value 模块参数列表: post_title 必选 标题 post_content 必选 内容 tag 可选 标签 post_category 可选 分类 post_date 可选 时间 post_excerpt 可选 摘要 post_author 可选 作者 category_description 可选 分类信息 post_cate_meta[name] 可选 自定义分类信息 post_meta[name] 可选 自定义字段 post_type 可选 文章类型 默认为'post' post_taxonomy 可选 自定义分类方式 post_format 可选 文章形式 */ //-------------------配置参数开始,根据需要修改------------------------- $post_author_default = 1; //默认作者的id,默认为admin(这里是作者ID号码,并非作者名) $post_status = 'publish'; //立即发布 pending 审核 draft 草稿箱 $time_interval = '1'; //发布时间间隔,单位为秒 。可设置随机数值表达式,如12345 * rand(0,17),设置为负数可将发布时间设置为当前时间减去这里设置的时间 $post_next = 'now'; //now:发布时间=当前时间+间隔时间值 //next: 发布时间=最后一篇时间+间隔时间值 $post_ping = false; //发布后是否执行ping $translate_slug = false; //是否将中文标题转换为MD5值,如需开启请设置为true或MD5值长度,建议设置为大于10,小于33的数字。 $secretWord = 'qq654321114'; //接口密码,如果需要密码,则设为$secretWord='你的密码'; $checkTitle = true; //检测标题是否重复 $audiosql = true; //是否添加媒体资源 $postformat = true; //开启文章形式 //-------------------配置参数结束,以下请勿修改------------------------- //开始 if (isset($_GET['action'])) { $hm_action = $_GET['action']; } else { die("操作被禁止>"); } $post = $_POST; include_once "./wp-config.php"; if ($post_ping) require_once("./wp-includes/comment.php"); if ($hm_action == "list") { hm_print_catogary_list(); }elseif($hm_action == "update") { hm_publish_pending_post(); }elseif($hm_action == "save") { //检查通讯密码 if (isset($secretWord) && ($secretWord != false)) { if (!isset($_GET['secret']) || $_GET['secret'] != $secretWord) { die('接口密码错误,请修改配置文件或者修改发布参数,保持两者统一。'); } } extract($post); //判断标题是否为空 if ($post_title == '[标签:标题]' || $post_title == '') { die('标题为空'); } //if ($post['post_meta']['down_url']=='[标签:下载地址]'||$post['post_meta']['down_url']=='') {die('下载地址为空');} //检查标题是否重复 if ($checkTitle) { $post_title = trim(hm_strip_slashes($post_title)); $sql = "SELECT `ID` FROM $wpdb->posts WHERE `post_title` = '$post_title'"; $t_row = $wpdb -> query($sql); if ($t_row) { die('标题重复,发布成功'); }; } //判断标题是否为空 if ($post_content == '[标签:内容]' || $post_content == '') { die('内容为空'); } //检查自定义文章类型 if (empty($post_type) || strpos($post_type, '[') || strpos($post_type, ']')) { $post_type = 'post'; } //检查自定义分类目录 if (empty($post_taxonomy) || strpos($post_taxonomy, '[') || strpos($post_taxonomy, ']')) { $post_taxonomy = 'category'; } //检查分类描述是否未设置 if (empty($category_description) || strpos($category_description, '[') || strpos($category_description, ']')) { $category_description = ''; } //检查自定义字段 if (array_key_exists('post_meta', $post)) { $post_meta = $post['post_meta']; } //检查自定义分类信息 if (array_key_exists('post_cate_meta', $post)) { $post_cate_meta = $post['post_cate_meta']; } //检查发布时间 if (!isset($post_date) || strlen($post_date) < 8) $post_date = false; //检查作者 if (empty($post_author)) { $post_author = $post_author_default; } else { $post_author = hm_add_author($post_author); } $post_content = fileHandle('fujian', $post_content); //echo $post_content; fileHandle('thumb'); hm_do_save_post(array( 'post_title' => $post_title, 'post_content' => $post_content, 'post_category' => $post_category, 'post_excerpt' => $post_excerpt, 'post_type' => $post_type, 'post_taxonomy' => $post_taxonomy, 'tags_input' => $tag, 'post_date' => $post_date, 'post_author' => $post_author, 'fujianid' => $fujianid ) ); echo '发布成功'; } else { echo '非法操作['.$hm_action.']'; } //附件处理 //$filename 附件名称 //$content 标签内容,为空返回首张图片ID function fileHandle($filesnames, $content = null) { global $thumbid, $audiosql; if (!empty($_FILES[$filesnames.'0']['name'])) { require_once('./wp-load.php'); require_once('./wp-admin/includes/file.php'); require_once('./wp-admin/includes/image.php'); $i = 0; while (isset($_FILES[$filesnames.$i])) { $fujian[$i] = $_FILES[$filesnames.$i]; $filename = $fujian[$i]['name']; //print_r ($fujian[$i]); $fileExt = array_pop(explode(".", $filename)); //附件保存格式【时间】 $upFileTime = date("YmdHis"); //更改上传文件的文件名为时间+随机数+后缀 $fujian[$i]['name'] = $upFileTime."-".uniqid().".".$fileExt; $uploaded_file = wp_handle_upload($fujian[$i], array('test_form' => false)); //print_r ($uploaded_file); $content = str_replace("\'".$filename."\'", "\"".$uploaded_file['url']."\"", $content); $content = str_replace($filename, $uploaded_file['url'], $content); //echo $content; if (isset($uploaded_file['error'])) { echo "文件上传失败"; wp_die($uploaded_file['error']); } $file = $uploaded_file['file']; $new_file = iconv('GBK', 'UTF-8', $file); $url = iconv('GBK', 'UTF-8', $uploaded_file['url']); $type = $uploaded_file['type']; $attachment = array( 'guid' => $url, 'post_mime_type' => $type, 'post_title' => $filename, 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment($attachment, $new_file); if ($audiosql) { if (strpos($fujian[$i]['type'], 'audio') !== false) { $newcontent = ''; $content = str_replace($url, $newcontent, $content); } } if (strpos($fujian[$i]['type'], 'image') !== false) { if (empty($thumbid) || $filesnames == 'thumb') $thumbid = $attach_id; $attach_data = wp_generate_attachment_metadata($attach_id, $file); $attach_data['file'] = iconv('GBK', 'UTF-8', $attach_data['file']); foreach($attach_data['sizes'] as $key => $sizes) { $sizes['file'] = iconv('GBK', 'UTF-8', $sizes['file']); $attach_data['sizes'][$key]['file'] = $sizes['file']; } wp_update_attachment_metadata($attach_id, $attach_data); } $i++; } } return $content; } function hm_tranlate($text) { global $translate_slug; $pattern = '/[^\x00-\x80]/'; if (preg_match($pattern, $text)) { $htmlret = substr(md5($text), 0, $translate_slug); } else { $htmlret = $text; } return $htmlret; } function hm_print_catogary_list() { $cats = get_categories("hierarchical=0&hide_empty=0"); foreach((array) $cats as $cat) { echo '<<<'.$cat -> cat_ID.'--'.$cat -> cat_name.'>>>'; } } function hm_get_post_time($post_next = "normal") { global $time_interval; global $wpdb; $time_difference = absint(get_option('gmt_offset')) * 3600; $tm_now = time() + $time_difference; if ($post_next == 'now') { $tm = time() + $time_difference; } else { //if ($post_next=='next') $tm = time() + $time_difference; $posts = $wpdb -> get_results("SELECT post_date FROM $wpdb->posts ORDER BY post_date DESC limit 0,1"); foreach($posts as $post) { $tm = strtotime($post -> post_date); } } return $tm + $time_interval; } function hm_publish_pending_post() { global $wpdb; $tm_now = time() + absint(get_option('gmt_offset')) * 3600; $now_date = date("Y-m-d H:i:s", $tm_now); $wpdb -> get_results("UPDATE $wpdb->posts set `post_status`='publish' WHERE `post_status`='pending' and `post_date`<'$now_date'"); } function hm_add_category($post_category, $post_taxonomy = 'category') { if (!function_exists('wp_insert_category')) { include_once "./wp-admin/includes/taxonomy.php"; } global $wpdb, $post_cate_meta, $post_parent_cate, $category_description; $post_category_new = array(); $post_category_list = array_unique(explode(",", $post_category)); foreach($post_category_list as $category) { $cat_ID = $category; if (!isInteger($cat_ID) || $cat_ID < 1) { $category = $wpdb -> escape($category); $term = get_term_by('name', $category, $post_taxonomy, 'ARRAY_A'); $cat_ID = $term['term_id']; if ($cat_ID == 0) { //检查父分类是否存在和创建父分类->start if (!empty($post_parent_cate) && $post_parent_cate != '[标签:父分类]') { $parent = intval($post_parent_cate); if ($parent == 0) { $post_parent_cate = $wpdb -> escape($post_parent_cate); $term = get_term_by('name', $post_parent_cate, $post_taxonomy, 'ARRAY_A'); $cat_ID = $term['term_id']; if ($parent == 0) { $parent = wp_insert_category(array('cat_name' => $post_parent_cate, 'taxonomy' => $post_taxonomy)); } } $cat_ID = wp_insert_category(array('cat_name' => $category, 'category_description' => $category_description, 'category_parent' => $parent, 'taxonomy' => $post_taxonomy)); } else { $cat_ID = wp_insert_category(array('cat_name' => $category, 'category_description' => $category_description, 'taxonomy' => $post_taxonomy)); } //检查父分类是否存在和创建父分类->end //定义分类信息->start if (!empty($post_cate_meta)) { foreach(array_unique(array_filter($post_cate_meta)) as $key => $value) { $value = strtoarray($value); add_term_meta($cat_ID, $key, $value); } } //定义分类信息->end } } array_push($post_category_new, $cat_ID); } return $post_category_new; } function add_category($post_category, $post_taxonomy = 'category') { if (!function_exists('wp_insert_category')) { include_once "./wp-admin/includes/taxonomy.php"; } global $wpdb; $post_category_new = array(); $post_category_list = array_unique(explode(",", $post_category)); foreach($post_category_list as $category) { $cat_ID = $category; if (!isInteger($cat_ID) || $cat_ID < 1) { $category = $wpdb -> escape($category); $term = get_term_by('name', $category, $post_taxonomy, 'ARRAY_A'); $cat_ID = $term['term_id']; if ($cat_ID == 0) { $cat_ID = wp_insert_category(array('cat_name' => $category, 'taxonomy' => $post_taxonomy)); } } array_push($post_category_new, $cat_ID); } return $post_category_new; } function isInteger($value) { return is_numeric($value) && is_int($value + 0); } function hm_add_author($post_author) { global $wpdb, $post_author_default; $User_ID = intval($post_author); if ($User_ID == 0) { $pattern = '/[^\x00-\x80]/'; if (preg_match($pattern, $post_author)) { $LoginName = substr(md5($post_author), 0, 10); } else { $LoginName = $post_author; } $User_ID = $wpdb -> get_col("SELECT ID FROM $wpdb->users WHERE user_login = '$LoginName' ORDER BY ID"); $User_ID = $User_ID[0]; if (empty($User_ID)) { $website = 'http://'.$_SERVER['HTTP_HOST']; $userdata = array( 'user_login' => "$LoginName", 'first_name' => $post_author, 'user_nicename' => $post_author, 'display_name' => $post_author, 'nickname' => $post_author, 'user_url' => $website, 'role' => 'contributor', 'user_pass' => NULL ); $User_ID = wp_insert_user($userdata); } $post_author = $User_ID; } else { $post_author = $post_author_default; } return $post_author; } function hm_strip_slashes($str) { if (get_magic_quotes_gpc()) { return stripslashes($str); } else { return $str; } } function checkDatetime($str) { $date = strtotime($str); if ($date > 31500000) { return true; } else { return false; } } function formatdate($date) { $d = date('Y-m-d'); if (strpos($date, 'today') !== false) { return str_replace('today at', $d, $date); } if (strpos($date, 'Today') !== false) { return str_replace('Today at', $d, $date); } $dd = date('Y-m-d', time() - 84600); if (strpos($date, 'yesterday') !== false) { return str_replace('yesterday at', $d, $date); } if (strpos($date, 'Yesterday') !== false) { return str_replace('yesterday at', $d, $date); } } //字符串转换为数组 //字符串的格式必须为 //$str = 'eo_description$$seo_description|||seo_keywords$$seo_keywords|||seo_title$$seo_title'; function strtoarray($str) { if (strpos($str, '|||') !== false) { $str = explode('|||', $str); if (strpos($str[0], '$$') !== false) { foreach($str as $k => $v) { $v = explode('$$', $v); $r[$v[0]] = $v[1]; } $str = $r; } } return $str; } function hm_do_save_post($post_detail) { global $post, $post_author, $post_ping, $post_status, $translate_slug, $post_next, $post_meta, $comment, $commentdate, $commentauthor, $wpdb, $postformat, $post_format, $post_taxonomy_list, $thumbid; extract($post_detail); $post_title = trim(hm_strip_slashes($post_title)); $post_name = $post_title; if ($translate_slug) $post_name = hm_tranlate($post_name); $post_name = sanitize_title($post_name); if (strlen($post_name) < 2) $post_name = ""; $post_content = hm_strip_slashes($post_content); //echo $post_content; $tags_input = str_replace("|||", ",", $tags_input); if (isset($post_date) && $post_date && checkDatetime($post_date)) { $tm = strtotime($post_date); $time_difference = absint(get_option('gmt_offset')) * 3600; $post_date = date("Y-m-d H:i:s", $tm); $post_date_gmt = gmdate('Y-m-d H:i:s', $tm - $time_difference); } else { $tm = hm_get_post_time($post_next); $time_difference = absint(get_option('gmt_offset')) * 3600; $post_date = date("Y-m-d H:i:s", $tm); $post_date_gmt = gmdate('Y-m-d H:i:s', $tm - $time_difference); if ($post_status == 'next') $post_status = 'publish'; } $post_category = hm_add_category($post_category, $post_taxonomy); $post_data = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_type', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_name', 'tags_input'); $post_data = add_magic_quotes($post_data); $postID = wp_insert_post($post_data); //设置文章显示类型format @preg_match_all('/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i', $post_content, $match); //print_r ($match); if (count($match[2]) >= 3) { set_post_format($postID, 'image'); for ($i = 0; $i < 3; $i++) { add_post_meta($postID, "mult_img".$i, $match[2][$i], true); } } else { set_post_format($postID, 'gallery'); } fileHandle($match[2][0]); //设定缩略图 set_post_thumbnail($postID, $thumbid); //自定义分类方式(taxonomy) if ($post_taxonomy != 'category' && !empty($post_taxonomy)) { wp_set_object_terms($postID, $post_category, $post_taxonomy); } //多个自定义分类方式(taxonomy) if (!empty($post_taxonomy_list)) { foreach($post_taxonomy_list as $k => $v) { $v = strtoarray($v); if (is_array($v)) { foreach($v as $kk => $vv) { $vv = add_category($vv, $k); wp_set_object_terms($postID, $vv, $k); } } else { $v = add_category($v, $k); wp_set_object_terms($postID, $v, $k); } } } //归档文章形式->start if (!empty($post_format) && $postformat == true) { if ($post_format == 'post-format-image' || $post_format == 'post-format-video') { wp_set_post_terms($postID, $post_format, 'post_format'); } } //归档文章形式->end //发布自定义栏目 if (!empty($post_meta)) { foreach($post_meta as $key => $value) { $ret = add_post_meta($postID, $key, $value, true); if (!$ret) { delete_post_meta($postID, $key); add_post_meta($postID, $key, $value, true); } } } //发布评论->start if (!empty($comment)) { //格式化评论内容 $comment = str_replace(array("\r\n", "\r", "\n"), "", $comment); $arraycomment = explode('|||', $comment); //格式化评论时间 $commentdate = str_replace(array("\r\n", "\r", "\n"), "", $commentdate); $arraycommentdate = explode('|||', $commentdate); //格式化评论作者 $commentauthor = str_replace(' ', '', $commentauthor); $commentauthor = str_replace(array("\r\n", "\r", "\n"), "", $commentauthor); $arraycommentauthor = explode('|||', $commentauthor); //评论计数 $comment_count = count($arraycomment) - 1; //更新文章评论数 $wpdb -> get_results("UPDATE $wpdb->posts set `comment_count` = $comment_count WHERE `ID` = $postID"); //写入评论 foreach($arraycommentauthor as $k => $v) { //判断评论时间 if ($v != '') { $format = "Y-m-d H:i:s"; $d = formatdate($arraycommentdate[$k]); $d = strtotime($d); if ($d != '') { $date = date($format, $d); $gmtdate = gmdate($format, $d); } else { $date = date($format); $gmtdate = gmdate($format); } //写入数据库 $res = $wpdb -> get_results("INSERT INTO $wpdb->comments (`comment_post_ID`,`comment_author`,`comment_date`,`comment_date_gmt`,`comment_content`,`user_id`) VALUES ($postID,'$v','$date','$gmtdate','$arraycomment[$k]',1)"); } } } //发布评论->end // 自定PING,需要再网站后台设置->撰写->更新服务器 下面填写PING地址 if ($post_ping) generic_ping(); }
2024年09月07日
48 阅读
0 评论
0 点赞
2023-10-21
WordPress判断用户特定内容只对管理员可见
WordPress特定内容只对管理员可见之前判断登录用户的角色用的是current_user_can()方法,比如判断当前用户是否是作者用current_user_can('author'),但对于WordPress 5不再可行。current_user_can的用法变了,正确的用法是传递$capability。除此之外,还有哪些更高效的方法来判断WordPress用户角色呢? 今天体验盒子在baidu和Google谷歌镜像上搜了一圈“WordPress判断用户角色和权限及管理员,WordPress特定内容只对管理员可见”,发现很多结果都过于老旧,于是重新总结了一下,本文内容适用于最新的WordPress5。 一、用current_user_can判断当前用户是否具有特定权限与功能。1<?php current_user_can( $capability , $object_id ); ?> $capability(string) (必须) [角色或功能].默认: 无 $object_id(int) (可选的) .默认: 无 不要将角色名称传递给current_user_can(),因为这不能保证其正常工作。传递用户角色名称(如author、contributor)作为参数不能100%保证返回正确的结果,正确的用法是传递$capability,用权限值比角色名称更靠谱。 所以,要根据不同角色拥有的权限来判断用户角色,用户权限可以在Roles and Capabilities中找到。判断示例判断用户是否为管理员(Administrator) if( current_user_can( 'manage_options' ) ) { echo 'The current user is a administrator'; } 判断用户是否为编辑(Editor) if( current_user_can( 'publish_pages' ) && !current_user_can( 'manage_options' ) ) { echo 'The current user is an editor'; } 判断用户是否为作者(Author) if( current_user_can( 'publish_posts' ) && !current_user_can( 'publish_pages' ) ) { echo 'The current user is an author'; } 判断用户是否为投稿者(Contributor) if( current_user_can( 'edit_posts' ) && !current_user_can( 'publish_posts' ) ) { echo 'The current user is a contributor'; } 判断用户是否为订阅者(Subscriber) if( current_user_can( 'read' ) && !current_user_can( 'edit_posts' ) ) { echo 'The current user is a subscriber'; } 二、用$current_user判断$current_user是WordPress的一个全局变量,当用户登录后,这个里面就会有用户的角色和权限信息。当WordPress的init action执行后,就可以安全的使用$current_user全局变量了。在模板文件中判断登录用户是否为作者(Author) global $current_user; if( $current_user->roles[0] == 'author' ) { echo 'The current user is an author'; } 在functions.php中判断用户是否为作者(Author) add_action( 'init', 'check_user_role' ); function check_user_role() { global $current_user; if( $current_user->roles[0] == 'author' ) { echo 'The current user is an author'; } } 检查用户角色之前,还可以先检查一下用户是否登录 三、使用WordPress Levels判断用户角色和权限及管理员扩展一下。我们用第一个方法的current_user_can来更灵活的判断用户角色、权限、管理员,下图展示了WordPress各个用户组所对应的级别,那么我们需要来判断是否为管理员,也就是Administrator(level_10):WordPress用户级别的范围是0到10。用户级别0(零)是最低级别,用户级别10是最高级别-意味着用户级别10具有绝对权限(最高权限级别)。用户级别功能表WordPress User Level空白单元格意味着该功能甚至不适用于特定的用户级别。“-”表示用户级别具有功能,但仅部分功能。“ +”表示用户级别具有该功能,但只能影响其自己的对象(例如,帖子)或较低用户级别的对象。“ x”表示用户具有该菜单项可用的全部功能。User Level:012345678910Dashboard—–xxxxxxxxxxxWrite—–Write Post –xxxxxxxxx—–Write Page xxxxxxManage—–Posts –++++++++x—–Pages +++++x—–Categories –––xxxxxxx—–Comments xxxxxxxxxx—–Awaiting Moderation –––xxxxxxxLinks—–Manage Links +++++x—–Add Links xxxxxx—–Link Categories xxxxxx—–Import Links xxxxxxPresentation—–Themes xxx—–Theme Editor xxxPlugins—–Plugins xxx—–Plugin Editor xxxUsers—–Your Profilexxxxxxxxxxx—–Authors and Users –++++xOptions—–General xxxxx—–Writing xxxxx—–Reading xxxxx—–Discussion xxxxx—–Permalinks xxxxx—–Miscellaneous xxxxxUpload—–(only if enabled) xxxxxxxxxx012345678910用level_10判断是否为wordpress管理员代码如下 if(current_user_can('level_10')){ //加入符合管理员后需要添加的内容 } 这样想判断其他权限用户也就是换个级别就可以了。四、更简单高效的方法还有一种更直接的方法,例如判断当前用户是否为管理员 global $current_user; if(in_array( 'administrator', $current_user->roles )){ echo 'administrator'; } 也可以这样 administrator 不太严谨的高效写法,需要修改administrator为你的管理员用户名
2023年10月21日
4 阅读
0 评论
0 点赞
2021-08-20
wordpress主循环显示文章列表不同样式的方法
假如我们选择首页显示最新文章,并且:第一篇文章显示摘要,后面的只显示标题。。。还有第一篇文章显示广告之类的。。。那么如何利用循环控制呢?1、首页显示文章的代码一般都是:<?php if (have_posts()) : ?> <!--检查是否有文章如果有,继续执行,没有就跳到 else 那里--> <?php while (have_posts()) : the_post(); ?> <!--开始准备文章内容,开始循环,每次循环输出一篇文章--> 此处显示文章内容或标题之类的。。 <?php endwhile ; ?> <!-- while 循环结束--> <?php else : ?> 此处显示未找到文章时的信息,比如404相关 <?php endif ; ?> <!-- if 结束-->2、要想精确的控制每篇文章,我们先在循环前定义一个变量 $ashu_i=1 来计数,变量名随便,然后每循环一次,$ashu_i加1,例子我把index.php中的代码改成下面的--<?php if (have_posts()) :$ashu_i=0;?> <?php while (have_posts()) : the_post();$ashu_i++;?> <?php echo "这是第 $ashu_i 篇文章:<br/>";?> <?php the_title();?> <?php echo "<hr>"; <?php endwhile; ?> <?php else : ?> 此处显示未找到文章时的信息,比如404相关 <?php endif; ?>上面的例子就给每篇文章来了个简单控制。3、具体要想让第一篇文章显示摘要,而余下的显示标题--代码:<?php if (have_posts()) :$ashu_i=0;?> <!--检查是否有文章,并定义计数变量初始值为0 --> <?php while (have_posts()) : the_post();$ashu_i++;?> <!-- 开始循环,第一次循环$sahu_i为1,第二次为2,依次。。 --> <?php if($ashu_i==1){?> <!-- 如果是第一篇文章 --> <?php the_content();}else{?> <!-- 显示内容 --> <?php the_title();}?> <!-- 如果不是第一篇显示标题 --> <?php endwhile; ?> <!-- 一次while循环结束 --> <?php else : ?> <!--如果没有文章--> 此处显示未找到文章时的信息,比如404相关 <?php endif; ?> <!--if结束 -->
2021年08月20日
5 阅读
0 评论
0 点赞
2021-08-20
如何在 WordPress 文章列表中完美的插入一篇或几篇广告跳转文章
前段时间在知更鸟那看到一个非常有趣的事,他博客首页中文章列表处的第一篇文章居然是个广告,点击以后不是进入他博客的文章页,而是跳到了一个广告页面,欺骗性简直逆天了!随之而来的广告点击量可想而知了~通常我们想达到这样的效果的话,就需要设置一个额外的广告位(方法见下面的额外补充 1),如果你想放在不同的地方的话(如,首页的不同结构中或侧边栏的不同结构中),则需要将各个广告位的结构调成与它们一样才行....昨天,在胖子马博客发现了一个非常完美的方法,操作起来远没有上面描述的这样复杂!可以在文章列表中的任意位置插入一篇或多篇广告跳转文章,完美的与主题结构融合,与主题列表的展现形式一模一样,不用去额外的改变任何结构!而且可以一键无痕的将发布的任何文章变成广告跳转文章!实现过程非常简单,利用了 wordpress 强大的自定义字段~首先,打开主题文件 functions.php,粘贴下面的代码到里面:/** * 如何在 WordPress 文章列表中完美的插入一篇或几篇广告跳转文章 * https://www.ilxtx.com/link-to-some-external-ressource-naturally.html */ function lxtx_post_link() { global $post; $thePostID = $post->ID; $post_id = get_post($thePostID); $title = $post_id->post_title; $perm = get_permalink($post_id); $post_keys = array(); $post_val = array(); $post_keys = get_post_custom_keys($thePostID); if (!empty($post_keys)) { foreach ($post_keys as $pkey) { if ($pkey=='url1' || $pkey=='title_url' || $pkey=='url_title') { $post_val = get_post_custom_values($pkey); } } if (empty($post_val)) { $link = $perm; } else { $link = $post_val[0]; } } else { $link = $perm; } echo $link; }再把主题中输出文章固定链接地址的函数:the_permalink() 替换为我们上面自定义的这个函数:lxtx_post_link() 即可!最后,当你要将文章链接到博客之外的页面时,只要在这篇文章中创建自定义字段url1或title_url或url_title ,再输入外部 URL 地址作为值就可以了。完成这个操作后,当你发表一篇文章时,系统会查找字段url1或title_url或url_title的值,如果找到,那么就会直接链接到外部站点而不是本博客文章;如果没有找到自定义字段值,就会简单地显示链接本身。如下图,图中的这篇“测试文章”的链接就是指向外链的!你看不出来吧~~{callout color="#f0ad4e"}友情提示:1.可以把多篇文章变为广告跳转文章哦,而且通过调节时间,可以在任意位置显示。 这样访客在浏览你的文章时,肯定想不到这是一个广告!当然这样做肯定不是很合适啦~~2.上面的代码还可以进一步精简的,我感觉不需要设置这么多的自定义字段~{/callout}额外补充 1 WordPress 的分类页、Search 页,Tag 页等输出的文章列表时,如果想在中间位置(比如第 5 个文章后面)出现,可以用下面的代码:<?php if ($wp_query->current_post == 4) : ?> <div> 广告代码 </div> <?php endif; ?> <?php if ($wp_query->found_posts < 5 and $wp_query->current_post == ($wp_query->found_posts - 1)): ?> <div> 广告代码 </div> <?php endif; ?>$current_post 属性,必须用在 Loop 里面,表示当前显示的文章索引值;它是以 0 为起始值,如果想要在第 5 个文章后面,$wp_query->current_post 等于 4 即可。$found_posts 属性,表示按 $wp_query 匹配的文章总数。上面的代码只能放在 Loop 里面,比如 <?PHP if (have_posts()) : while (have_posts()) : the_post(); ?> 后面,表示广告代码将在文章列表的第 5 个文章后面出现,如果列表匹配出来的文章总数不到 5 个,就在列表的最后位置出现广告代码。额外补充 2 在陌小雨博客那又发现了另一个方法~ 只需要在发布文章时切换成文本,然后加入如下代码即可:<script type="text/javascript">document.location = "https://www.ilxtx.com"</script>注意替换网址为你想跳转的链接。可用于老文章失效,跳转到新文章哦~额外补充 3:WordPress 在文章内容中间插入广告 下面的代码可以实现在文章的第几段后面插入广告,注意按照下面的注释修改广告代码和段落数,转自WP 大学。/** * WordPress 在文章内容中间插入广告 * https://www.ilxtx.com/link-to-some-external-ressource-naturally.html */ //在文章内容的第二段后面插入广告 add_filter( 'the_content', 'lxtx_prefix_insert_post_ads' ); function lxtx_prefix_insert_post_ads( $content ) { $ad_code = '<div>添加你的广告代码</div>'; if ( is_single() && ! is_admin() ) { // 修改 2 这个段落数 return lxtx_prefix_insert_after_paragraph( $ad_code, 2, $content ); } return $content; } // 插入广告所需的功能代码 function lxtx_prefix_insert_after_paragraph( $insertion, $paragraph_id, $content ) { $closing_p = '</p>'; $paragraphs = explode( $closing_p, $content ); foreach ($paragraphs as $index => $paragraph) { if ( trim( $paragraph ) ) { $paragraphs[$index] .= $closing_p; } if ( $paragraph_id == $index + 1 ) { $paragraphs[$index] .= $insertion; } } return implode( '', $paragraphs ); }
2021年08月20日
27 阅读
0 评论
0 点赞
2020-08-20
WordPress实现外链加密和伪静态跳转代码
外链转内链地址Base64加密地址的详细步骤:1、将以下跳转代码保存为 go.php,然后在网站根目录新建一个 go 文件夹,并把 go.php 上传到 go 文件夹中:<?php if(strlen($_SERVER['REQUEST_URI']) > 255 || strpos($_SERVER['REQUEST_URI'], "eval(") || strpos($_SERVER['REQUEST_URI'], "base64")) { @header("HTTP/1.1 414 Request-URI Too Long"); @header("Status: 414 Request-URI Too Long"); @header("Connection: Close"); @exit; } //通过 QUERY_STRING 取得完整的传入数据,然后取得 url=之后的所有值,兼容性更好 $t_url = preg_replace('/^url=(.*)$/i','$1',$_SERVER["QUERY_STRING"]); //此处可以自定义一些特别的外链,不需要可以删除以下 5 行 if($t_url=="febdays" ) { $t_url="https://www.febdays.com"; } elseif($t_url=="news") { $t_url="https://www.febdays.com/news"; } //数据处理 if(!empty($t_url)) { //判断取值是否加密 if ($t_url == base64_encode(base64_decode($t_url))) { $t_url = base64_decode($t_url); } //对取值进行网址校验和判断 preg_match('/^(http|https|thunder|qqdl|ed2k|Flashget|qbrowser):\/\//i',$t_url,$matches); if($matches){ $url=$t_url; $title='页面加载中,请稍候...'; } else { preg_match('/\./i',$t_url,$matche); if($matche){ $url='http://'.$t_url; $title='页面加载中,请稍候...'; } else { $url = 'http://'.$_SERVER['HTTP_HOST']; $title='参数错误,正在返回首页...'; } } } else { $title = '参数缺失,正在返回首页...'; $url = 'http://'.$_SERVER['HTTP_HOST']; } ?> <HTML> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="robots" content="noindex, nofollow" /> <noscript><meta http-equiv="refresh" content="1;url='<?php echo $url;?>';"></noscript> <script> function link_jump() { //禁止其他网站使用我们的跳转页面 var MyHOST = new RegExp("<?php echo $_SERVER['HTTP_HOST']; ?>"); if (!MyHOST.test(document.referrer)) { location.href="http://" + MyHOST; } location.href="<?php echo $url;?>"; } //延时 1S 跳转,可自行修改延时时间 setTimeout(link_jump, 1000); //延时 50S 关闭跳转页面,用于文件下载后不会关闭跳转页的问题 setTimeout(function(){window.opener=null;window.close();}, 50000); </script> <title><?php echo $title;?></title> <style type="text/css"> body{background:#555}.loading{-webkit-animation:fadein 2s;-moz-animation:fadein 2s;-o-animation:fadein 2s;animation:fadein 2s}@-moz-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-o-keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes fadein{from{opacity:0}to{opacity:1}}.spinner-wrapper{position:absolute;top:0;left:0;z-index:300;height:100%;min-width:100%;min-height:100%;background:rgba(255,255,255,0.93)}.spinner-text{position:absolute;top:45%;left:50%;margin-left:-100px;margin-top:2px;color:#000;letter-spacing:1px;font-size:20px;font-family:Arial}.spinner{position:absolute;top:45%;left:50%;display:block;margin-left:-160px;width:1px;height:1px;border:20px solid rgba(255,0,0,1);-webkit-border-radius:50px;-moz-border-radius:50px;border-radius:50px;border-left-color:transparent;border-right-color:transparent;-webkit-animation:spin 1.5s infinite;-moz-animation:spin 1.5s infinite;animation:spin 1.5s infinite}@-webkit-keyframes spin{0%,100%{-webkit-transform:rotate(0deg) scale(1)}50%{-webkit-transform:rotate(720deg) scale(0.6)}}@-moz-keyframes spin{0%,100%{-moz-transform:rotate(0deg) scale(1)}50%{-moz-transform:rotate(720deg) scale(0.6)}}@-o-keyframes spin{0%,100%{-o-transform:rotate(0deg) scale(1)}50%{-o-transform:rotate(720deg) scale(0.6)}}@keyframes spin{0%,100%{transform:rotate(0deg) scale(1)}50%{transform:rotate(720deg) scale(0.6)}} </style> </head> <body> <div class="loading"> <div class="spinner-wrapper"> <span class="spinner-text">页面加载中,请稍候...</span> <span class="spinner"></span> </div> </div> </body> </html>其中第12行代码中自定义的一些特别外链,这个功能特别好,因为我们每个站点都或多或少有一些特殊的外链,如果也变成 Base64 加密地址就不好看了,所以此处我们可以多添加几个比较有个性化的外链跳转地址。2、将以下代码添加到我们的 Nginx 服务器相应配置文件中的 location / { 前面,保存配置文件后平滑重启 Nginx 即可:rewrite ^/goto/(.*)$ /go/go.php?url=$1 last;Apache服务器修改根目录.htaccess文件,添加以下代码RewriteRule ^goto/(.*)$ /go/go.php?url=$1 [L]3、替换文章原外链跳转地址格式(/go/?url=外链)变更为新的外链格式(/goto/ base64 加密串),我们只需要将以下代码代替主题文件的 functions.php 文件中原先给外部链接加上跳转的代码即可: //文章外链跳转伪静态版 add_filter('the_content','link_jump',999); function link_jump($content){ preg_match_all('/<a(.*?)href="(.*?)"(.*?)>/',$content,$matches); if($matches){ foreach($matches[2] as $val){ if(strpos($val,'://')!==false && strpos($val,home_url())===false && !preg_match('/\.(jpg|jepg|png|ico|bmp|gif|tiff)/i',$val) && !preg_match('/(ed2k|thunder|Flashget|flashget|qqdl):\/\//i',$val)){ $content=str_replace("href="$val"", "href="".home_url()."/goto/".base64_encode($val).""",$content); } } } return $content; }4、对于评论的外链,在function文件添加如下函数。//评论者链接重定向 function commentauthor($comment_ID = 0) { $url = get_comment_author_url( $comment_ID ); $author = get_comment_author( $comment_ID ); if ( empty( $url ) || 'http://' == $url ) { echo $author; } else { if (!preg_match(home_url(),$url)) { echo "<a href='".home_url()."/goto/".base64_encode($url)."' rel="nofollow noopener noreferrer" target='_blank' class='url'>$author</a>"; } else { echo "<a href='$url' target='_blank' class='url' rel="noopener noreferrer">$author</a>"; } } } }5、将下载原外链跳转地址格式(/go/?url=外链)变更为新的外链格式(/goto/ base64 加密串),我们首先将以下代码添加到主题文件 functions.php 文件最后一个?>(记得修改代码中的 febdays.com 为自己的域名)。 // 下载外链跳转 function links_nofollow($url) { if(strpos($url,'://')!==false && strpos($url,'febdays.com')===false && !preg_match('/(ed2k|thunder|Flashget|flashget|qqdl):\/\//i',$url)) { $url = str_replace($url, home_url()."/goto/".base64_encode($url),$url); } return $url; }然后将主题文件中关于下载链接的地址改为以下代码即可:<?php echo links_nofollow($url);?>不同其他主题下载链接文件位置不同,请自行寻找,然后将四个下载链接地址分别改成上述相对应的代码即可,如将第一个下载链接地址:<?php echo $url1; ?>改为:<?php echo links_nofollow($url1);?>至此,外链及下载地址均变成新的跳转格式(/goto/ base64 加密串),最难得的是原旧跳转格式(/go/?url=外链)依然有效.
2020年08月20日
8 阅读
0 评论
0 点赞