WordPress教程

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

最近给一个客户二次开发主题,需要加多条件筛选,其中有个筛选就是根据文章的某个post_meta值进行排序,一般的方法是: $args = array( 'paged' => $paged ); $args['meta_key'] = 'favorites'; //这个就是post_meta $args['orderby'] = 'meta_value_num'; query_posts($args); 但是以上代码有个问题,当文章没有此post_meta时,是不会显示出来的,这个很尴尬吧~那个解决方案如下: $args = array( 'paged' => $paged ); //$args['meta_key'] = 'favorites'; //这个就是post_meta $args['meta_query'] = array(); array_push($args['meta_query'], array( 'relation' => 'OR', 'exist_clause' => arra...

将以下php代码复制到当前主题目录下的functions.php中,即可让WordPress支持使用中文用户名注册和登录: function MBT_sanitize_user ($username, $raw_username, $strict) { $username = wp_strip_all_tags( $raw_username ); $username = remove_accents( $username ); $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username ); $username = preg_replace( '/&.+?;/', '', $username );  if ($strict) { $username = preg_replace ('|[^a-z\p{Han}0-9 _.\-@]|iu', '', $username); } $username = trim( $username ); $username = preg_replace( '|\s+|', ' ', $username ); return $username; ...

最近给用户定制了一款wordpress主题,其中有个需求就是首页与分类页的文章列表里,要是有相同的custom taxonomy,仅显示一篇。(由于网站是教程类网站,可能一个教程有多篇文章连载,要是把每篇文章都显示在列表里,显得有些臃肿,所以这里给文章加了一个自定义分类法-专辑,每个专辑仅在列表里显示一篇。) 于是模板兔google了大量教程,都没有一个完美的答案,但是根据零散的教程,拼凑出了最终完美的代码。 此教程属于高阶教程,需收费!有类似需求的小伙伴可以咨询我们~

有时候我们给网站增加了一些功能,比如在线充值,那么需要在后台能看到用户的充值记录,所以需要添加一个后台菜单。 add_action('admin_menu', 'credit_logs_page'); function credit_logs_page() { add_menu_page('充值记录', '充值记录', 'manage_options', 'CREDIT_LOGS', 'credit_logs'); add_submenu_page( 'CREDIT_LOGS', '购买记录', '购买记录','manage_options', 'ORDER_LOGS', 'order_logs'); add_submenu_page( 'CREDIT_LOGS', '后台充值', '后台充值','manage_options', 'CREDIT_ADD', 'credit_add'); } function credit_logs(){ global $wpdb; $total   = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb-&g...

以前做微信登录仅限于微信客户端打开网页,一直用的都是微信公众号接口的网页授权得到openId来记录区别的,后来要求在PC端网页也使用微信登录,即微信扫码登录,结果发现得到的openid是跟在网页授权里得到的openid不同。这就导致用户通过微信客户端授权登录与网页扫码登录生成的不是同一个账号的问题。 那么如何解决这个问题?这就牵扯到微信的UnionID机制。 关于UnionID机制: 1、请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。  2、UnionID机制...

目前,我们开发的一款wordpress插件erphpdown已经广受大家喜爱,在功能方便也基本满足了多数人的要求,不过有些用户可能对下载地址一栏输入的方式有点不习惯,比如:用户的资源是百度网盘,在网盘那边直接复制链接+密码得到的是类似  (链接: https://pan.baidu.com/s/1bo88u3X 密码: h9mx)这样的字符串,那么怎样直接把这个字符串输入到erphpdown的下载地址框里就OK了呢,这里模板兔提供一个自动解析的方法。 <?php $regex='/((http:\/\/|www\.|https:\/\/)(\w+|\.|\?|\=|\/|\&|\:|\d+)+)/'; echo preg_replace_callback($regex,function($matches){ if(!empty($matches[0]) && (strstr($matches[0],'http://')||str...

在wordpress里有个函数wp_link_pages是给文章内容分页的,可是默认的只支持要么显示数字,要么显示下一页按钮,而没有同时显示的,肿么办,将以下代码加入主题的functions.php里即可: add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add'); function wp_link_pages_args_prevnext_add($args){ global $page, $numpages, $more, $pagenow; if (!$args['next_or_number'] == 'next_and_number') return $args; # exit early $args['next_or_number'] = 'number'; # keep numbering for the main part if (!$more) return $args; # exit early if($page-1) # there is a previous page $args['before'] ...

最近给一个客户定制一款wordperss主题,其中需要一个显示一个月内的热门文章,模板兔相信这个功能很常见,简单点的就是根据访问量来排序了,下面核心代码如下: $date_query=array( array( 'column' => 'post_date', 'before' => date('Y-m-d',time()+3600*24), 'after' =>date('Y-m-d',time()-3600*24*30) ) ); $args = array( 'order' => 'DESC', 'orderby' => 'meta_value_num', 'cat' => $cat, 'meta_key' => 'views', 'date_query' => $date_query, 'showposts' => $limit, 'ignore_sticky_posts' => 1 ); query_posts($args);

wordpress自带的文本编辑器功能一般有限,无法设置字体大小,这个很鸡肋。 将以下代码加入到主题的functions.php里即可: function MBT_add_editor_buttons($buttons) { $buttons[] = 'fontselect'; $buttons[] = 'fontsizeselect'; $buttons[] = 'cleanup'; $buttons[] = 'styleselect'; $buttons[] = 'del'; $buttons[] = 'sub'; $buttons[] = 'sup'; $buttons[] = 'copy'; $buttons[] = 'paste'; $buttons[] = 'cut'; $buttons[] = 'image'; $buttons[] = 'anchor'; $buttons[] = 'backcolor'; $buttons[] = 'wp_page'; $buttons[] = 'charmap'; return $buttons; } add_filter("mce_buttons_2", "M...

有很多用户跟模板兔反应在wp默认页面注册时,提示点击链接设置密码,可是点击后会提示“要设置您的密码,请访问以下地址:”。这里模板兔提供一个比较死板的方法,就是修改默认的wp-login.php文件。 1.修改wordpress目录下的 wp-login.php文件 将 $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n"; 修改为: $message .=network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n"; 2.wordpress安装目录下的/wp-includes/pluggable.php文件 将: $message .= '<' . network...

最近模板兔在给一个客户弄ucenter的集成,虽然之前有一个开发者已经开发了一个ucenter插件,可是由于作者长期不更新,可能导致功能失效或不完善了,为了广大用户,于是模板兔开发了一个wordpress ucenter的插件,过程中遇到过一个问题就是无法同步修改密码,通过研究一番后得知Ucenter服务端在修改密码通知应用时传的是一个空值,无语了,提供了接口居然不实现其功能。。。那怎么办,只能修改Ucenter(版本:UCenter_1.6.0_SC_UTF8)源码呗。 1、修改Ucenter后台修改密码后的通知(文件路径:Ucenter安装目录/control/admin/user.php) 找到onedit函数(254行),然后修改286行,看标红部分。 $_ENV['note']->add('updatepw', 'us...

之前有个客户找模板兔做wordpress多重筛选功能,主要通过自定义分类法来筛选。下面给出大致的代码片段,供有一定开发基础的人看,若不懂代码,可联系模板兔开发。 处理过滤的代码: $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'post_type' => 'post', 'paged' => $paged ); $args['tax_query'] = array(); if(isset($_GET['city']) && $_GET['city'] > 0){ array_push($args['tax_query'], array('taxonomy' => 'city','field' => 'term_id','terms' => $_GET['city']) ); } if(isset($_GET['function']) && $_GET['function'] > 0){ ...

很多用户遇到一个烦人的问题,那就是只要网站的用户修改了密码,都会给管理员发送邮件,这个模板兔相信大多数站长都不需要收到此通知。 如果要禁用这个通知的话,可通过插件的方式来实现,在网站后台插件安装界面搜索 Disable Password Changed Notifications 在线安装后激活即可生效。 也可以不用插件,加以下代码: if ( ! function_exists( 'wp_password_change_notification' ) ) { function wp_password_change_notification( $user ) { return; } } 如果要禁止给用户自己发修改密码成功通知,可加以下代码: add_filter( 'send_password_change_email', '__return_false' ); 同时都禁用的话,用模板兔修改了一下的这...

最近有个客户提到这样一个需要,就是首页先显示20篇文章,再每页加载10篇(点击加载更多),这样就与一般的分页不一样了,既要保证文章不重复,也要保证分页正确。请看下面代码: function MBThemes_offset_firstpage( $query ) { if ( $query->is_main_query() && !is_admin() && $query->get('post_type') != 'project') { $offset = 10; $query->set( 'post_type', 'post' ); $query->set( 'post_status', 'publish' ); $query->set( 'ignore_sticky_posts', '-1' ); $ppp = get_option('posts_per_page'); if (!$query->is_paged()) { $query->set('posts_per_page',$offset + ...

// remove the old box function remove_default_categories_box() { remove_meta_box('categorydiv', 'post', 'side'); } add_action( 'admin_head', 'remove_default_categories_box' ); // add the new box function add_custom_categories_box() { add_meta_box('customcategorydiv', 'Categories', 'custom_post_categories_meta_box', 'post', 'side', 'low', array( 'taxonomy' => 'category' )); } add_action('admin_menu', 'add_custom_categories_box'); /** * Display CUSTOM post categories form fields. * * @since 2.6.0 * * @param object $post */ function custom_post_categories_meta_b...