WordPress教程

模板兔提供专业的wordpress建站教程、wordpress主题开发教程、wordpress插件开发教程、wordpress二次开发教程等。

WordPress教程:wordpress的get_users是获取用户列表的,我们可以获取所有角色是author的用户,但是这个排序却没有基于最新发布文章时间(get_users order by author last post date)来排序用户列表的。 我们可以通过以下函数来实现: function get_users_ordered_by_post_date($args = '') { // Prepare arguments if (is_string($args) && '' !== $args) parse_str($args, $args); $asc = (isset($args['order']) && 'ASC' === strtoupper($args['order'])); unset($args['orderby']); unset($args['order']); // Get ALL users $users = get_users($args); $post_dates = array(); if ($users) { // For EACH user ... ...

WordPress教程:天下武功,唯快不破!我们的wordpress网站也不意外,也需要访问速度快,那么怎样才能使自己的wordpress站访问速度尽可能的快呢? 模板兔在这里说明几点加速网站的因素: 1、服务器 你的服务器质量是对网站访问速度有很大的影响的,我们一般推荐的服务器配置是2核4G1M,这样的配置前期对一般的网站来说足够。 2、CDN加速 说到CDN加速,可能有些人对CDN的理解不一样,其实CDN分两种,一种是静态资源加速(把图片、js、css等一些静态资源放到第三方存储比如阿里云OSS、七牛云存储等,这样用户访问网站时加载的图片jscss就不是请求网站服务器,这样可以大大节省服务器资源,提升网站加载速度),另一种是域名CDN解析(通过把域名解析到CDN...

WordPress教程:在我们wordpress开发中经常会遇到编辑器的问题,wordpress自带有个编辑器wp_editor,编辑器有上传图片功能,但是是需要添加到媒体且需要弹出媒体库的窗口,这样对于在前台投稿的用户来说可能不太友好。那么我们如何能在前台添加一个极简且带图片上传的编辑器呢?这里模板兔给大家讲解一下。 首先调用编辑器,我们需要对编辑器上面的按钮简化一下。 wp_editor( '', 'task_content', task_editor_settings(array('textarea_name'=>'content', 'height'=>250, 'allow_img'=> 1)) ); 然后我们定义一些函数以及处理上传的逻辑 function task_editor_settings($args = array()){ $allow_img = isset($args['allow_img']) &&...

WordPress教程:在我们做wordpress网站时很多时候都需要筛选功能,筛选的条件越多,得到的结果就越精确,这里模板兔就说明一下常见的自定义分类法筛选。 至于怎么创建自定义分类法就不多说了,核心筛选代码: array_push($args['tax_query'], array('taxonomy' => 'size','field' => 'term_id','terms' => $_GET['sz']) ); 这里的size就是自定义分类法,传过来的sz参数就是分类法的term_id。 $arms = array_merge($args, $wp_query->query); query_posts($arms); 这里就是执行结果。 如果有需要给自己的网站加自定义分类法筛选或者多条件筛选的用户,可联系我们进行开发。

WordPress教程:今天给主题加了一个发布文章奖励积分的功能,配合erphpdown实现用户前台投稿通过后奖励积分。 顺便起底一下关于wordpress发布文章的一些HOOK: publish_post:参数一个($post_ID),点击发布文章时就会被触发; save_post:参数一个($post_ID),发布或更新文章时就会被触发; edit_post:参数两个($post_ID, $post),只要编辑已经存在的文章就会被触发; publish_future_post:参数一个($post_ID),到定时发布文章设定的时间点就会被触发,如果设定的时间早于发布时间,不会被触发; transition_post_status:参数三个($new_status, $old_status, $post),实现功能比较强大,可以根据文章发布状态的变化实现一些功能。 {$o...

WordPress教程:前些日子模板兔给用户二次开发一个小功能,需要制作一个页面模板,输入关键词后,页面会输出相关关键词的文章。这里就需要给这个页面模板添加一个自定义字段来设置关键词。 那么后台如何判断页面是使用了此页面模板呢?我们可以用到函数get_page_template_slug。 add_action( 'admin_menu', 'keywords_page_metabox' ); function keywords_page_metabox() { global $pagenow; if($pagenow == 'post.php'){ if(isset($_GET['post']) && isset($_GET['action']) && $_GET['action'] == 'edit'){ if(get_page_template_slug($_GET['post']) == 'template/keywords.php'){ add_meta_box( 'keywords-postmeta-box','文章...

WordPress教程:最近给一个客户定制开发一个wordpress主题,其中需要在搜索页面加一个搜索记录,这个记录我直接保存在用户浏览器本地存储。 通过js存储,核心代码如下: <script> function storageObj(obj) { var checkedIdStr = JSON.stringify(obj); sessionStorage.setItem("search_logs", checkedIdStr); }; var arrBefor = []; if(sessionStorage.getItem("recode_search_logs")){ arrBefor = JSON.parse(sessionStorage.getItem("search_logs")); } <?php if(isset($_GET['s']) && $_GET['s']){?> arrBefor.unshift({"key":"<?php echo $_GET['s'];?>", "date":"<?php echo date("m-d H:i");?>"}); <...

WordPress教程:WordPress的搜索一直是一个很占内存的功能,如果你的文章很多,那么执行一次搜索会相对卡顿,那么我们如何尽可能的防范一下呢?比如机器人扫描到了搜索页面,那将可能直接导致内存爆满mysql进程被终止。 这里,我们可以加一个搜索验证码,用户在第一次搜索时需要进行简单的人机验证。一来这样可以有效防止恶意扫描导致内存崩溃,二来可以防止恶意请求关键字生成结果页面。 模板兔写了一个简单的验证机制,可将下面代码加到主题的functions.php里即可。 /* Plugin Name: 搜索验证码 Plugin URI: https://www.mobantu.com Description: WordPress 搜索验证码 Version: 1.0 Author: 模板兔 Author URI: https://www.mobantu.com */...

WordPress教程:最近模板兔给客户二次开发任务插件(Erphp Task Pro),需要在任务大厅里加一项用户权限筛选,哪些任务仅限制VIP用户投标,除了每个任务可单独设置是否仅VIP投标外,插件还增加了一项设置就是金额高于多少时仅限VIP投标,所以在进行筛选的时候需要对预算金额进行比较,但是compare用>=时始终不生效,很奇怪。 最后,看了官方文档后发现还有一个参数type,设置成numeric后就可以进行比较了。 部分代码如下: array_push($args['meta_query'], array( 'relation' => 'OR', array('key' => 'task_bid_vip','compare' => '>=','value'=>'1','type' => 'numeric'), array('key' => 'task_budget_money','compa...

WordPress教程:最近模板兔发现wordpress5.9+版本会在前台头部插入了global-styles 内联样式,并向底部插入了很多的 svg 图像,对于我们来说这个些代码显得有些多余了,因此决定把这些去掉。 在主题的functios.php添加 function mbt_remove_global_styles(){    wp_dequeue_style( 'global-styles' ); } add_action( 'wp_enqueue_scripts', 'mbt_remove_global_styles' ); 那么,如何移除svg图像呢?在使用主题的根目录下新建一个theme.json文件,写入下面代码 { "version": 1, "settings": { "color": { "duotone": null } } } 一键移除内联样式和svg图像 function remove_global_styles(){ remove_action('wp_enqueue_scripts', 'wp_...

WordPress教程:相信很多人网站都遇到过报502 bad gateway错误,那么究竟是什么导致的呢? 据模板兔了解,很多时候WordPress网站莫名其妙报502错误很有可能是PHP版本导致,比如你一开始用的PHP7.4报502,那么换成PHP8.0可能就解决了问题。至于为什么有的网站会出现,有的网站不会出现,这里可能与服务器系统版本有关,比如今天模板兔给一个客户安装了一个wp,安装完成后就直接报502了,没有一点点防备!服务器系统用的是centos 8.3,php用的7.4,是直接装的宝塔面板,很奇怪吧。百思不得其解,然后把PHP换成8.0就解决了问题。 总之,具体什么原因,说不清,但是当你刚安装完wordpress就遇到502,不妨试试换PHP版本,大大的有效!当然也可以重启下nginx...

WordPress教程:WordPress的is_home()或is_front_page()是判断是否为首页的函数方法,有时候我们在进行WordPress开发时出现不生效,或者明明不是首页的页面,is_home()却判断成了首页。那么,究竟为何会出现这个奇怪的现象呢? 经模板兔研究发现,原因可能出在is_home()之前有个 query_posts(),然后又使用了wp_reset_query()(在单独页面里使用这个,会造成这个bug)。 is_home() 函数在首页的时候会返回一个 true 来判断,而 query_posts()会阻断这一判断。 解决方法是在 is_home()之前加一个 wp_reset_query()。例如: wp_reset_query(); if ( is_home() ) { echo 'is mobantu homepage'; }

WordPress教程:有时候由于网站域名更换,可能涉及到需要更换一些资源的下载地址域名,那么如何批量替换erphpdown插件的下载地址域名呢? 新建一个php文件,将以下代码放进去保存,然后将这个php文件放到网站根目录,最后通过域名直接访问这个文件,页面打印出success时说明替换完了。 <?php require( dirname(__FILE__).'/wp-load.php' ); $result = $wpdb->query("update $wpdb->usermeta set meta_value=REPLACE(meta_value, 'old.mobantu.cn', 'new.mobantu.cn') where meta_key='down_url' "); if($result){ echo 'success'; }

WordPress教程:有时候我们想对指定搜索关键词进行更好的结果显示聚合,可能会需要把搜索结果页跳转到指定的归档页面,那么如何实现呢? 下面模版兔来写出主要的方法代码: function mobantu_search_jump( $query, $error = true ) { if (is_search() && !is_admin()) { $jump = 0;$url = ''; $epd_game_search = get_option('epd_game_search'); if($epd_game_search){ $cnt = count($epd_game_search['buy']); for($i=0; $i<$cnt;$i++){ if( strpos($query->query['s'], $epd_game_search['buy'][$i]) !== false ){ $jump = 1; $url = $epd_game_search['get'][$i]; break; } } } if($jump==1){ $query->is_search =...

WordPress教程:安装imagick 宝塔里PHP里可以安装扩展imagick。 安装ghostscript https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9550/ghostscript-9.55.0.tar.gz 安装很简单,将下载的source code(tar.gz格式)放到服务器任意一个位置 # tar -xzvf ghostscript-9.55.0.tar.gz # cd ghostscript-9.55.0 # ./configure # make # make install 装完之后输入查看是否安装成功,如果输入下面这个命令会显示版本号,说明安装成功。 # gs --version php代码 function pdf2png($pdf,$path,$page=0) { if(!is_dir($path)) { mkdir($path,0777,true); } if(!extension_loaded('imagick')) { echo '没...