WordPress教程

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

if( !class_exists('CustomPostTypeArchiveInNavMenu') ) { class CustomPostTypeArchiveInNavMenu { function CustomPostTypeArchiveInNavMenu() { add_action( 'admin_head-nav-menus.php', array( &$this, 'cpt_navmenu_metabox' ) ); add_filter( 'wp_get_nav_menu_items', array( &$this,'cpt_archive_menu_filter'), 10, 3 ); } function cpt_navmenu_metabox() { add_meta_box( 'add-cpt', __('自定义文章类型存档'), array( &$this, 'cpt_navmenu_metabox_content' ), 'nav-menus', 'side', 'default' ); } function cpt_navmenu_metabox_content() { $post_types = get_post_types( array( 'show_in...

有时候,我们需要通过分类的序号来排序分类列表,wordpress的分类有个term_order属性,默认为0。 <?php function mbt_add_category_field(){ echo '<div class="form-field"> <label for="cat-num">序号</label> <input name="_term_order" id="cat-num" type="text" value="" size="40"> <p>专题列表排序,数字越好,越靠前</p> </div>'; } add_action('category_add_form_fields','mbt_add_category_field',10,2); // 分类编辑字段 function mbt_edit_category_field($tag){ echo '<tr class="form-field"> <th scope="row"><label for="c...

有时候,我们需要显示指定文章ID数组的文章列表,那么看看下面代码,可能会帮助到你: 方法一: <?php $ids = array(548,555,587,583,585); $my_query = query_posts(array('post__in' => $ids,'post_type'=> 'parks')); global $post; foreach ($my_query as $post) { $posts_by_id[$post->ID] = $post; } foreach ($ids as $id) { if (!$post = $posts_by_id[$id]) continue; setup_postdata($post); echo '<p>TITLE: ';the_title();echo ' - ';the_ID(); '</p>'; the_content(); } ?> 方法二:(如果需要分页) <?php global $wp_query; $args = array_merge( $wp_query->q...

/* 评论作者和谐,使昵称部分隐藏,例如:ad**n 。*/ function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') { if($code == 'UTF-8') { $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; preg_match_all($pa, $string, $t_string); if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen)); return join('', array_slice($t_string[0], $start, $sublen)); } else { $start = $start*2; $sublen ...

有时候我们需要在列表里显示某个自定义字段不为空的文章,比如用woocommerce插件时,只显示on sale的产品,那么代码如下: $args = array( 'post_type' => 'product', 'meta_query' => array( array( 'key' => '_sale_price', //自定义字段 'value'=> '', 'compare' => '!=' ) ) ); //另一种形式 array( 'prdctfltr' => 'active', 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => $prdctfltr_global['posts_per_page'], 'meta_query' => array( array( 'key' => '_visibility', 'value' => array('catalog', 'visible'), 'compare...

WordPress中创建一个公用帐号,密码公开,任何人都可以使用。但是又不想让使用这个帐号的人修改帐号的密码等个人资料信息,那怎么办呢? 既然如此,因为这个帐号是唯一的,所以问题也很好解决,禁止该用户浏览后台的个人资料页面即可。我们在当前主题的functions.php中添加以下代码: function mobantu_disable_user_profile() {   if ( is_admin() ) {     $user = wp_get_current_user();     if ( 2 == $user->ID )  // 2 改成该用户的id       wp_die( '禁止访问' );   } } add_action( 'load-profile.php', 'mobantu_disable_user_profile' ); 当然,如果你使用前台的用户管理功能,以上方法就失效了。

我在WordPress后台某篇文章的编辑页面,给这篇文章选择了分类:WordPress,接着同时选择了标签:php、主题制作,这时分类(WordPress)就与标签(php、主题制作)建立了关联,利用这种关联我们实现很多种需求,最典型的是细化WordPress文章分类功能,在子分类无法达到我们的需求时,可以使用标签来细化。我只需要提供WordPress分类的id,就可以得到它关联的标签:php、主题制作。 调用函数 我们可以先在主题目录的下的functions.php添加以下函数: function mobantu_get_category_tags($args) {     global $wpdb;     $tags = $wpdb->get_results     ("         SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_na...

WordPress自带一项功能,就是访客对文章发表评论后,可以设置:在评论显示之前 须经由管理员审核,这可以避免了一些垃圾评论对网站的影响。对此,有评论等待审核时,WordPress会自动给网站管理员发送一封通知邮件,但是评论被管理员审核通过后,WordPress并不会给评论者发送通知,这会给正常的评论者造成一些困惑。 如何让评论通过审核后,给评论者发送一封通知邮件呢?我们可以在当前主题的functions.php中添加以下PHP代码: add_action('comment_unapproved_to_approved', 'mobantu_comment_approved'); function mobantu_comment_approved($comment) {   if(is_email($comment->comment_author_email)) {     $post_link = get...

回复某位评论者的留言时,在留言前面加个 @评论者,这样可以更好地分辨是给谁回复。 也许网上已经有相关的教程,但是这里也分享一下我的实现方法,在当前主题functions.php中添加以下代码: function mobantu_comment_add_at( $commentdata ) {   if( $commentdata['comment_parent'] > 0) {     $commentdata['comment_content'] = '@<a href="#comment-' . $commentdata['comment_parent'] . '">'.get_comment_author( $commentdata['comment_parent'] ) . '</a> ' . $commentdata['comment_content'];   }   return $commentdata; } add_action( 'preprocess_comment' , 'mobantu_comment_add_at', 20); 以...

首先,定义实现函数,将以下php代码复制到当前主题的functions.php中: function mobantu_get_cat_postcount($id) { //id是分类ID    // 获取当前分类信息    $cat = get_category($id);    // 当前分类文章数    $count = (int) $cat->count;    // 获取当前分类所有子孙分类    $tax_terms = get_terms('category', array('child_of' => $id));    foreach ($tax_terms as $tax_term) {       // 子孙分类文章数累加       $count +=$tax_term->count;    }    return $count; } //使用方法 <?php echo 'ID为123的分类及其子孙分类的文章数量为:' . mobantu_get_cat_postcount(123);?>

什么是模板呢?默认情况 WordPress是使用主题目录下page.php来作为模板显示页面的,但是有时候我们需要不同的模板来显示页面,比如登录、注册和投稿页面等,这些页面跟普通的页面是有所区别,这时候WordPress提供了页面模板让开发者可以自定义WordPress页面外观甚至功能。 页面模板php文件的匹配 WordPress中是通过自定义栏目来记录页面所使用的模板的,自定义栏目名称:_wp_page_template,值为模板的文件名: 如果是默认模板page.php,那么 _wp_page_template 的值为:default。如果从始至终都是默认模板,WordPress不会添加此自定义栏目 如果是主题根目录下的自定义页面模板,那么那么 _wp_page_template 的值为文件名,如:page-l...

今天介绍的方法可以实现给多媒体添加独立的分类,而不必混用文章的分类,而且在WordPress后台的多媒体列表页可以直观显示媒体的分类。 使用方法,同样是在当前主题的functions.php中添加php代码: function mobantu_create_media_category() {   $args = array(     'label' => '媒体分类',     'hierarchical' => true,     'show_admin_column' => true,     'show_ui'      => true,     'query_var'    => true,     'rewrite'      => true,   );   register_taxonomy( 'attachment_category', 'attachment', $args ); } add_action( 'init', 'mobantu_create_media_category' ); 如果你不排斥使...

有些主题的特色图像会显示在文章内页里面,多数情况我们不想让它显示在内页里,那么我们可以添加一个选项控制显示。代码如下: function prefix_featured_image_meta( $content ) { global $post; $text = __( 'Don\'t display image in post.', 'prefix' ); $id = 'hide_featured_image'; $value = esc_attr( get_post_meta( $post->ID, $id, true ) ); $label = '<label for="' . $id . '" class="selectit"><input name="' . $id . '" type="checkbox" id="' . $id . '" value="' . $value . ' "'. checked( $value, 1, false) .'> ' . $text .'</label>'; return $content .= $label; } add_filter( ...

将以下php代码复制到当前主题目录下的functions.php中,即可让WordPress支持使用中文用户名注册和登录: function mobantu_sanitize_user ($username, $raw_username, $strict) { $username = wp_strip_all_tags( $raw_username ); $username = remove_accents( $username ); // Kill octets $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username ); $username = preg_replace( '/&.+?;/', '', $username ); // Kill entities // 网上很多教程都是直接将$strict赋值false, // 这样会绕过字符串检查,留下隐患 if ($strict) { $username = preg_replace ('|[^a-z\p{Han}0-9 _.\-@]|iu', '', $us...

当评论者添加评论的时候,WordPress默认不转义评论内容中的所有代码,这就意味着评论者在评论中输入 html 代码,其他访客查看到的评论就是被浏览器解释过的html内容! 上面说得可能很抽象,你可以尝试给你的文章添加以下评论内容: <a href="http://www.example.com">送钱啦</a>  评论添加成功后,是不是看到一个链接"送钱啦"呢?你点击看一下是什么效果。如果看不到"送钱啦"链接而是以上html代码,恭喜你,你的博客挺安全的,以下内容可看可不看。  其实上面的代码只是超链接,没有任何恶意。但是你应该提高警惕了,并不是所有的评论者都是善意的,他们可能会往评论内容中添加恶意代码(典型方式:广告链接等)!另外,Word...