WordPress教程

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

WordPress教程:模板兔在给客户定制开发模板的过程中遇到一个需求就是自定义文章类型topic列表每页显示15条,而默认的post类型每页显示10条,在topic的archive页面先使用了以下代码: global $query_string; query_posts( $query_string . '&posts_per_page=15'); 发现第一页显示正常,可是其他分页就404。 后来看了官方的文档,将以下代码放进functions.php里,当然,上面的两行代码就不需要了哦。 function topic_posts_per_page($query){     if( is_post_type_archive('topic') ) {         $query->set('posts_per_page', 15);     } } add_action('pre_get_posts', 'topic_posts_per_page'); 搞定!

WordPress教程:很多用户都希望在自己的wordpress网站前台增加投稿功能,虽然有很多插件可以实现此功能,但是能不用插件尽量不用插件,那么我们可以新建一个页面模板来实现投稿功能。 form表单的html代码我就不写了,这里主要写后台处理逻辑,代码如下: $last_post = $wpdb->get_var("SELECT post_date FROM $wpdb->posts WHERE post_author='{$uid}' AND post_type = 'post' ORDER BY post_date DESC LIMIT 1"); if ( time() - strtotime($last_post) < 120 ){ print_r(json_encode(array('error'=>1, 'msg'=>'两次提交文章时间间隔太短,请稍候再来'))); exit(); } $title = $wpdb->escape($_POST['post_title']); $cat...

WordPress教程:WordPress 有个自动分段机制,只要你在可视化下敲击一次回车(文本模式敲击两次回车),就会在前台html自动添加分段标签<p>,其实这个功能也是很方便的,但是有时候我们输入摘要时需要对其样式进行美化,自动分段标签就显得多余了。 这个自动分段机制,使用的是 wpautop() 函数,只会对文章内容和摘要生效,如果你希望禁用它,可以将下面的代码添加到主题的 functions.php 文件即可: remove_filter( 'the_excerpt', 'wpautop' ); 其他地方以此类推。

WordPress教程:模板兔开发的主题里基本都有微博登录,而这个功能里需要模拟post提交来获取用户权限,奇怪的是前几天给客户迁移了服务器后以前的代码(使用的curl)就无法获取用户权限了,检查了服务器函数是支持此函数的,后来换了file_get_contents后才解决。 下面的两种方法,$url是链接,$data是传入参数(格式:"meta_one=1&meta_two=2")。 curl方法: function do_post($url, $data) { $ch = curl_init (); 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, CURLO...

WordPress教程:一直都有用户反馈,WordPress默认的找回密码功能总是提示“抱歉,该key似乎无效”,其实问题是邮件里重置链接的最后面多出了一个 > 符号。修复办法如下 在当前主题的 functions.php 添加下面的代码即可: function MBT_reset_password_message( $message, $key ) { if ( strpos($_POST['user_login'], '@') ) { $user_data = get_user_by('email', trim($_POST['user_login'])); } else { $login = trim($_POST['user_login']); $user_data = get_user_by('login', $login); } $user_login = $user_data->user_login; $msg = __('有人要求重设如下帐号的密码:'). "\r\n\r\n"; $msg .= network_site_url() . "\r\n\...

WordPress教程:最近有人使用Monkey主题出现文章内的图片很小,明明上传的是大图,却显示的小图,原来从WordPress 4.4开始,系统将可以根据不同的条件(屏幕大小、可视区大小 和 屏幕分辨率等)为用户显示不同大小的图片,详见。查看源码会看到img标签里出现 sizes="(min-width: {img.width}px) {img.width}px, 100vw" 这样的代码。 这个是默认开启的功能,好像对于我们来说不是很需要,你可以添加下面的代码到当前主题的 functions.php 文件即可关闭此功能: /** * 禁用 WordPress 4.4+ 的响应式图片功能 */ add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) ); 如果你不想编辑文件,可以下载安装 Disable Responsive...

WordPress教程:最近wordpress官方发布了wordpress 4.4版,其中新增的特性就是给分类法新增自定义字段函数:add_term_meta() , get_term_meta() , update_term_meta() , delete_term_meta() 。 正好在给客户开发一款主题,其中要用到筛选分类(不是通过分类筛选文章,而是通过分类自定义字段筛选分类),类似于将分类来归类吧~~要用到get_terms函数里的meta_query 代码: get_terms( 'category', array('hide_empty' => true, 'parent' => '0','child_of'=> 0, 'meta_query'=>array(array('key'=>'coursecat','value'=>$courseCat->term_id)) ) ); 具体怎么给分类新增自定义字段,可以看看这篇文章。 www.smashingmagazine.c...

WordPress教程:由于模板兔开发的一些主题首页多数是有焦点图的,这些焦点图的来源就是顶置文章,那么有些用户需要在顶置文章下面的最新文章列表里不显示顶置文章,这里给出代码: $sticky = get_option( 'sticky_posts' ); $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'caller_get_posts' => 1, 'post__not_in' => $sticky, 'paged' => $paged ); query_posts($args); get_template_part( 'content', get_post_format() ); 将以上代码替换主题目录里的index.php里的相关代码即可 不过,使用此代码后,模板兔建议顶置文章数量尽量保持焦点图显示的数量,比如4个,如果你一直顶置新的文章...

WordPress教程:有时候我们需要给菜单添加额外的class类来标记某个menu item,比如出现多级分类时,要显示出层级关系,我们可以把active的item统一绑定一个cur的class。 将以下代码添加至主题functions.php里: function MBT_special_nav_class($classes, $item){ if( in_array('current-menu-item', $classes) || in_array('current-menu-ancestor', $classes) || in_array('current-post-parent', $classes) || in_array('current-post-ancestor', $classes)){ $classes[] = 'cur '; } return $classes; } add_filter('nav_menu_css_class' , 'MBT_special_nav_class' , 10 , 2);

WordPress教程:wordpress 4.2新增了emoji表情,导致之前自定义的表情无法显示。 add_filter('smilies_src','custom_smilies_src',1,10); function custom_smilies_src ($img_src, $img, $siteurl){ return get_bloginfo('template_url').'/static/img/smilies/'.$img; } function mbtheme_init_smilies(){ global $wpsmiliestrans; $wpsmiliestrans = array( ':mrgreen:' => 'icon_mrgreen.gif', ':neutral:' => 'icon_neutral.gif', ':twisted:' => 'icon_twisted.gif', ':arrow:' => 'icon_arrow.gif', ':shock:' => 'icon_eek.gif', ':smile:' => 'icon_smile.gif', ':???:' => 'icon_confused.gif', ':c...

WordPress教程:开发模板的过程中,难免会需要添加自定义文章类型,但是默认的链接结构都是类似forum/标题 这种结构,可能对搜索引擎不友好,所以我们需要做些修改,下面有两种方法。将代码贴进主题的functions.php里,然后更新下固定链接即可! 方法一: add_filter('post_type_link', 'custom_blog_link', 1, 3); function custom_blog_link( $link, $post = 0 ){ if ( $post->post_type == 'blog' ){ return home_url( 'blog/' . $post->ID .'.html' ); } else { return $link; } } add_action( 'init', 'custom_blog_rewrites_init' ); function custom_blog_rewrites_init(){ add_rewrite_rule( 'blog/([0-9]+)?.html$', ...

WordPress教程:默认调用: <?php previous_post_link('上一篇: %link') ?> <?php next_post_link('下一篇: %link') ?> 当文章处于首篇或末篇时,会显示空白,但可以通过增加判断还填补空白: <?php if (get_previous_post()) { previous_post_link('上一篇: %link');} else {echo "已是最后文章";} ?> <?php if (get_next_post()) { next_post_link('下一篇: %link');} else {echo "已是最新文章";} ?> 经过测试虽然显示同分类下的文章,但首篇文章和末尾的文章会不显示对应的提示信息“已是最后文章”和“已是最后文章”。只要在get_previous_post()函数中指定一下文章所属分类ID便能使代码完全有效。 <?php $categ...

WordPress教程:比如要在后台文章列表里显示文章点击量,将下面的代码添加到主题的functions.php中即可: add_action('manage_posts_custom_column', 'add_postviews_column_content'); add_filter('manage_posts_columns', 'add_postviews_column'); add_action('manage_pages_custom_column', 'add_postviews_column_content'); add_filter('manage_pages_columns', 'add_postviews_column'); function add_postviews_column($defaults) { $defaults['views'] = '点击量'; return $defaults; } function add_postviews_column_content($column_name) { if($column_name == 'views') { if(function_exists('MBT_views')) { MBT_views(...

WordPress教程:模板兔开发的部分主题里会有前端头像上传的功能,那么怎么才能让头像同步后台与前端呢?我们这里去除默认的头像,用固定的某张图片代替,大大加快加载速度。 代码如下: add_filter('get_avatar', 'MBT_get_avatar', 10, 3); function MBT_get_avatar($avatar, $id_or_email, $size){ $default_avatar = get_bloginfo('template_url').'/img/avatar.png'; //默认头像 if(is_object($id_or_email)) { if($id_or_email->user_id != 0) { $email = $id_or_email->user_id; $user = get_user_by('email',$email); $user_avatar = get_user_meta($id_or_email->user_id, 'avatar', true); if($user_avatar) return '...

WordPress教程:有时候我们需要在菜单里加入额外的一些元素,可以用Walker_Nav_Menu类来完成。 class description_walker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args) { global $wp_query; global $wpdb; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) ); $class_names = ' class="' . esc_attr( $class_n...