标签: wordpress

  • 实现wordpress文章(面包屑)导航

    什么是面包屑导航?看下下图就知道了。对于以内容为主,分类层次较多的站点来说,一个清晰的面包屑导航设计是非常重要的,因为它总能帮助用户在需要跳出的时候,如同灯塔一样迅速找到方向,所以快观察下你的网站是否有相关方面的考虑和设计,如果还没有面包屑导航的话,请结合自己的主题,按下面讲述的方法来实现wordpress文章面包屑导航.

    mbx

    具体方法,将下面的带代码增加到functions.php中。

    /* 面包屑导航 */
    function dimox_breadcrumbs() {
      $delimiter = '»';
      $name = '首页'; //text for the 'Home' link
      $currentBefore = '';
      $currentAfter = '';
      if ( !is_home() && !is_front_page() || is_paged() ) {
        echo '
    您当前位于: '; global $post; $home = get_bloginfo('url'); echo '' . $name . ' ' . $delimiter . ' '; if ( is_category() ) { global $wp_query; $cat_obj = $wp_query->get_queried_object(); $thisCat = $cat_obj->term_id; $thisCat = get_category($thisCat); $parentCat = get_category($thisCat->parent); if ($thisCat->parent != 0) echo(get_category_parents($parentCat, TRUE, ' ' . $delimiter . ' ')); echo $currentBefore . 'Archive by category ''; single_cat_title(); echo ''' . $currentAfter; } elseif ( is_day() ) { echo '' . get_the_time('Y') . ' ' . $delimiter . ' '; echo '' . get_the_time('F') . ' ' . $delimiter . ' '; echo $currentBefore . get_the_time('d') . $currentAfter; } elseif ( is_month() ) { echo '' . get_the_time('Y') . ' ' . $delimiter . ' '; echo $currentBefore . get_the_time('F') . $currentAfter; } elseif ( is_year() ) { echo $currentBefore . get_the_time('Y') . $currentAfter; } elseif ( is_single() ) { $cat = get_the_category(); $cat = $cat[0]; echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' '); echo $currentBefore; the_title(); echo $currentAfter; } elseif ( is_page() && !$post->post_parent ) { echo $currentBefore; the_title(); echo $currentAfter; } elseif ( is_page() && $post->post_parent ) { $parent_id = $post->post_parent; $breadcrumbs = array(); while ($parent_id) { $page = get_page($parent_id); $breadcrumbs[] = '' . get_the_title($page->ID) . ''; $parent_id = $page->post_parent; } $breadcrumbs = array_reverse($breadcrumbs); foreach ($breadcrumbs as $crumb) echo $crumb . ' ' . $delimiter . ' '; echo $currentBefore; the_title(); echo $currentAfter; } elseif ( is_search() ) { echo $currentBefore . 'Search results for '' . get_search_query() . ''' . $currentAfter; } elseif ( is_tag() ) { echo $currentBefore . 'Posts tagged ''; single_tag_title(); echo ''' . $currentAfter; } elseif ( is_author() ) { global $author; $userdata = get_userdata($author); echo $currentBefore . 'Articles posted by ' . $userdata->display_name . $currentAfter; } elseif ( is_404() ) { echo $currentBefore . 'Error 404' . $currentAfter; } if ( get_query_var('paged') ) { if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ' ('; echo __('Page') . ' ' . get_query_var('paged'); if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ')'; } echo '
    '; } }

    然和在页面的相应位置填写调用函数代码就可以了。

    代码作者博客地址:http://nook6.org.ru/

  • wordpress隐藏升级提示

    在functions.php里加上下面的代码:

    add_filter( 'pre_site_transient_update_core', create_function( '$a', "return null;" ) );

  • wordpress修改后台页脚的版权信息

    可以再主题目录的functions.php文件中修改,增加以下代码:

    function modify_footer_admin () {
      echo 'Created by King51.';
      echo 'Powered byWordPress.';
    }
    add_filter('admin_footer_text', 'modify_footer_admin');
    

    搞定!

  • wordpress3.+ 移除前台Admin Bar

    只需要在你的主题文件的Functions.php中增加如下代码:
    /* Remove Admin_bar */
    add_filter( 'show_admin_bar', '__return_false' );

    搞定!

  • WordPress 3.+ 的自定义分类功能

    WordPress 3.+ 的CMS功能真是很完善了,上篇说到WordPress3+的自定义内容类型功能详解,创建自定义内容类型之后就可以在后台看到你的左侧菜单多出来了一组独立的选项,但是这组选项中却不包含分类选项,这么看来怎么都不像是CMS。现在就倒腾一下这个分类的功能怎么实现,具体效果见下图:

    在这篇教程中,我们将讲解wordpress一个空前强大的功能:自定义分类法(taxonomy),wordpress自定义分类法可以让你强有力地将网站内容按自己需要的方式整理分类。虽然wordpress的分类法在2.3版本的时候就引入了,但是在3.0版本里,又被进一步改进了。

    之前我们已经讲解过如何在wordpress内自定义文章类型,配合本教程的wordpress自定义分类法,就可以更好地用wordpress进行站点和主题开发。

    1.什么是wordpress的分类法(Taxonomy)?

    分类法是组织数据的一种简单形式,同样,wordpress的分类法也是组织网站内容的一种方式。可能你没有意识到这个概念,但其实你至少已经熟悉wordpress分类法中的一种,那就是标签(Tag)。标签就是wordpress分类法中的一种,文章可以通过标签联系起来,也可以通过标签查看和组织起来,另一个wordpress自带的分类法是分类目录(post categories)。

    分类法让wordpress变得更强大,因为它可以让用户去帅选出他们需要的文章。自定义分类法,顾名思义就是让我们自己定义网站内容的组织形式,自定义分类法既可以运用在自定义的文章类型里,也可以运用在一般的文章和页面中。

    下面举一些自定义分类法的例子:

    • 电影的放映年份来分类
    • 省份、邮政编码、等地名来分类
    • 优先级的高低来分类

    从上面可以看到,你完全可以根据你的需要来对网站的内容进行自定义分类,如果你阅读过自定义文章类型,你会对之前的例子Event比较熟悉了。下面我们也将继续使用这个例子进行讲解。

    我们将在Event这个自定义的文章类型里添加一个自定义的分类法:按事件地点(location)分类,这样我们就可以通过地点来查看事件文章了。这里为了统一代码,还是使用wordpress3.0的默认主题,并且假设你已经按照之前的例子制作出Event的文章类型了。

    2.创建一个自定义分类法

    和创建自定义文章类型一样,在wordpress创建自定义分类法也非常简单。下面是具体的代码:
    [php]
    add_action( ‘init’, ‘create_locations’ ); function create_locations() { $labels = array( ‘name’ => _x( ‘Locations’, ‘taxonomy general name’ ), ‘singular_name’ => _x( ‘Location’, ‘taxonomy singular name’ ), ‘search_items’ => __( ‘Search Locations’ ), ‘all_items’ => __( ‘All Locations’ ), ‘parent_item’ => __( ‘Parent Location’ ), ‘parent_item_colon’ => __( ‘Parent Location:’ ), ‘edit_item’ => __( ‘Edit Location’ ), ‘update_item’ => __( ‘Update Location’ ), ‘add_new_item’ => __( ‘Add New Location’ ), ‘new_item_name’ => __( ‘New Location Name’ ), ); register_taxonomy(‘location’,’event’,array( ‘hierarchical’ => true, ‘labels’ => $labels )); }

    [/php]

    把上面的代码粘贴到主题文件夹的functions.php中。register_taxonomy这个wordpress函数就是用来创建一个分类法,先解释一下传递给这个函数的参数。

    location是这个分类法的内部名

    event告诉wordpress哪个文章类型将使用这个分类法,在这个例子里,我们用的是之前创建的event的文章类型,你也可以将它替换成postpage,这样就可以将分类法用在一般的文章和页面上。也可以同时运用在多个文章类型上(通过数组)。

    array(…)是传递给register_taxonomy的最后一个参数,它告诉wordpress分类法如何运行。具体来解释一下array里面的内容:

    hierarchical是一个布尔值,用来确定分类法是否有等级,即是否有子分类。对于地点(location)分类这个例子而言,我们的父分类是楼号(Buliding),子分类是房间号(Room)。

    labels是输出这个分类法的一些相关信息(由create_locations函数的$labels来定义)。

    add_action( ‘init’, ‘create_locations’ )是指wordpress初始化时,会调用create_locations这个函数。

    3.将自定义分类法添加到文章

    地点(location)这个分类法已经创建完成了,现在登陆到wordpress的后台,在自定义的文章类型Event里创建一些地点。在Events的目录下,可以看到一个新的链接Locations,点击它就可以进入如下图的页面,你可以在此进行新增、编辑、删除地点等操作。

    wp-自定义分类法

    下面来创建一些地点:

    1.Building1(父分类)

    2.Conference Room A(子分类)

    3.Conference Room B(子分类)

    完成之后,你可以看到一张地点的表格,如下图:

    wp-自定义分类法

    这样,当你创建一个新的Event文章时,你会在创建页面的右边看到一个新的地点(location)选项(如下图),因为我们在创建wordpress自定义分类法location时,已经把它传递给了自定义文章类型Event。

    wp-自定义分类法

    选择一个地点,然后点击发布就可以了,整个界面操作和wordpress的选择分类目录很接近,如果是使用没有等级的分类法,那就和标签的方法有些类似。

    我们已经创建完地点分类法,并且新建了一些地点,现在我们要在前台页面上显示这些地点,以便让用户看到。

    4.在前台页面显示分类法信息

    当打开一个单独的事件文章的页面时,我们要在这个页面上看到事件的地点。在之前的文章里,主题文件夹里创建过一个命名为single-event.php的文件,这是用来显示单独事件文章的页面模板。我们要把相关的地点信息加入到这个文件里。如果你要把地点信息加入到一般的文章和页面中,只需要编辑single.php或者page.php文件。

    下图是还没有加入地点信息的前台页面样式:

    wp-自定义分类法

    我们可以用get_the_term_list这个wordpress函数来将地点信息加入到页面中,代码如下:
    [php]
    get_the_term_list( $id, $taxonomy, $before, $sep, $after )
    [/php]

    下面是对这个函数的简单解释:
    1. $id – 事件文章的ID号
    2. $taxonomy – 想要显示的分类法 (如’tag’, ‘location’等)
    3. $before –列表之前的html标签
    4. $sep – 列表项目间的分隔
    5. $after –列表之后的html标签

    下面我们用get_the_term_list来显示事件文章的所有地点:
    [php]
    <?php echo get_the_term_list( get_the_ID(), ‘location’, "Location: " ) ?>
    [/php]
    这段代码中, get_the_ID()告诉wordpress使用当前页面的文章ID,使用location这个分类法,并在地点信息前加入文本“Location:”。

    默认的分隔符号是分号,你也可以用“-”或者“|”来代替默认分隔符。同样地点信息会有一个超链接,点击这个超链接可以进入所有和这个地点有关的事件文章。(随后我们会讲解如何自定义这个页面模板)。

    single-events.php文件中的参考代码如下:
    [php]<div class="entry-meta">
    <?php twentyten_posted_on(); ?>
    </div><!– .entry-meta –>
    <div class="entry-meta">
    <?php echo get_the_term_list( get_the_ID(), ‘location’, "Location: " ) ?>
    </div><!– .entry-meta –>
    [/php]
    现在在浏览器中刷新页面,你会看到如下效果:

    wp-自定义分类法

    5.通过自定义分类法来查看文章

    现在我们已经在每一个事件文章页面里显示了地点分类法的相关信息,下面我们要制作一个页面模板用来显示和特定地点相关的所有事件文章。例如点击Conference Room A,就会进入一个页面,这个页面显示出所有和Room A有关的事件文章。

    在还没开始之前,点击这个链接,会弹出如下错误提示:

    wp-自定义分类法

    了解这个错误原因,你可能需要具备一些WordPress模板等级的知识,当wordpress载入页面时,它会查找你的主题文件夹并根据命名载入正确的模板页面,当载入一个分类法页面时,wordpress的查找顺序如下:

    taxonomy-[your_taxonomy_term].php > taxonomy-taxonomy.php > taxonomy.php > archive.php > index.php

    wordpress会从左到右开始查找这些文件,如果文件不存在就跳到下一个文件。在wordpress3.0的默认主题TwentyTen中,第一个符合的文件是archive.php,因为前面三个文件在这个主题文件夹中都是不存在的,所以我们就会看到上面的错误页面。

    因此如果我们要正确显示分类法页面,就要建立一个新文件,把它命名为taxonomy-location.php。这样wordpress在载入分类法页面时,就会启用这个模板。因为我们的分类法页面和标签(Tags)页面外观比较像,为了方便起见,把tag.php中的内容复制到刚刚建立的文件中。

    先将下面的代码复制到get_header()的下面。
    [php]
    <?php $term = get_term_by( ‘slug’, get_query_var( ‘term’ ), get_query_var( ‘taxonomy’ ) ); ?>[/php]
    这样,和分类法有关的信息(ID,名称等)都存储在变量$term中,我们就可以将它输出到任何地方了。在这里,我们想把这些信息放置在页面的顶部,所以将tag.php文件的代码替换掉。
    原代码:
    [php]
    <h1 class="page-title"><?php
    printf( __( ‘Tag Archives: %s’, ‘twentyten’ ), ‘<span>’ . single_tag_title( ”, false ) . ‘</span>’ );
    ?></h1>
    [/php]
    新代码:
    [php]
    <h1 class="page-title"><?phpprintf( __( ‘Events in Location: %s’, ‘twentyten’ ), ‘<span>’ . $term->name . ‘</span>’ ); ?></h1>

    [/php]
    完成后,当我们再次点击Conference Room A这个链接时,就可以看到如下显示地点分类的页面:

    wp-自定义分类法

    但是这个页面还没有任何的事件文章,我们要通过修改WordPress loop代码来查找自定义文章类型Events的文章,而不是一般的文章。添加下面的代码,用来进行自定义的wordpress查询:
    [php]
    <?php query_posts(array( ‘post_type’=>’event’, ‘location’=>$term->slug)); ?>

    [/php]
    query_posts用来查询和当前locoation相关的所有事件文章。但是当前Wordpress有一个bug(不知截至发稿前是否修正),任何和这个location有关的文章类型的文章都会显示出来。现在刷新页面会发现和Conference Room A相关的事件文章都列在页面上了,如下图:

    wp-自定义分类法

    如果你想在页面显示和Conference Room A的相关描述(Description)的话也非常简单,只需要把下面的代码复制到h1的标签下面即可。
    [php]
    <strong>Description:</strong><?php echo term_description( ”, get_query_var( ‘taxonomy’ ) ); ?>
    [/php]
    完成后页面如下:

    wp-自定义分类法

    6.总结

    通过这个例子,你应该已经学会了如何在wordpress自定义分类法,我们再把流程总结一下:

    • 创建一个自定义的分类法(地点分类法)
    • 将自定义分类法加入到文章中
    • 在文章中显示自定义分类的信息
    • 通过自定义分类来查看和组织文章
    • 为自定义分类法创建一个页面模板

    通过结合自定义文章类型(Custom post type)和自定义分类法(Custom taxonomy),wordpress在内容管理方面已经非常强大了。

    原文链接:A Guide to WordPress Custom Taxonomy
  • wordpress3.1 功能解释之二-文章样式功能

    wordpress3.1版本 正式发布,看过官方说明之后,渐渐发现wp越来越像CMS了。虽然增加的功能很多,但是国内的教程少之又少,纯英文文档对很多童鞋来说还是有一点点难度的。所以我会陆陆续续写下wordpress3的新增功能的具体用法,助人助己。前面写过一篇WordPress3+的自定义内容类型功能详解,这一篇则是介绍wordpress3.1的文章样式功能。

     

    1.小窥wordpress3.1文章样式

    文章样式一种meta信息,主题可以通过这些信息来定制文章的样式。简单地说,文章样式就是设计某篇文章表现形式的一种方式。利用文章样式功能,你 可以指定某一篇文章所显示出的格式效果。这个功能挖掘出了WordPress在微博方面的潜力,用户可以把视频、链接、图像、音频、引用文字等整合到一 处,并进行相应样式设计。

    假设你发现某个外部网站的某篇文章很有意思,你想分享给你的读者。为了告诉读者你的分享,你得写一篇新文章并给出相关的外部链接,否则读者不知道这是篇什么类型的文章,他们要点开链接读完全文才可能了解你想告诉他们的内容。文章样式功能可以帮你解决这个问题。

    这有点类似于微博,你可以像在微博上一样发表一些小段子,然后不用费很大功夫就可以为不同文章设定不同的样式。例如,当你发现一条值得分享的句子,就可以立即在自己的WordPress博客上分享出来,并且只需要一个点击动作,就可以突出显示这句话。

    文章样式的主要目的就是让WordPress成为一个全方位的博客平台。

    和文章缩略图、菜单、自定义背景等功能一样,文章样式也需要通过主题激活。这意味着,如果你的主题不兼容,那么你就没法使用这个功能。

    警告:若要进行以下操作,最好熟悉HTML、CSS代码,并对WordPress循环函数具有一定了解。

    打开主题的functions.php文件,加入以下代码:

    add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

    注意:aside和galery只是列举出的两个可用的文章样式而已。可用的文章样式包括:

    aside —— 通常没有标题,类似于社交网站上的状态更新

    chat —— 聊天记录

    gallery —— 图片库(多幅图片)

    link —— 外部链接

    image —— 单幅图片

    quote —— 引用语句

    status —— 简短的状态更新,通常限制在140个字符内,类似微博

    video —— 单个视频

    在functions,php中加入代码后,你会在文章编辑界面右侧的文章发布设置区看到一些新内容。

    编辑完文章之后,你可以在这里更改文章的样式并点击发布,让文章以预先设置好的格式发布到前台。

    但是我们并没有预先设置任何文章样式,因此即使你在下拉菜单里选择了新的样式,前台所显示的效果也和其他文章没什么区别。所以现在我们需要做的就是编辑文章的主循环。

    我们会用到条件标签has_post_format()。

    if ( has_post_format( 'aside' ) {
    // code to display the aside format post here
    } else if (has_post_format('gallery')) {
    // stuff to display the gallery format post here
    } else if (has_post_format('link')) {
    // stuff to display the link format post here
    }else {
    // code to display the normal format post here
    }

    对开发人员来说,这或许算不上什么,但最终用户应该可以受益不少了。

     

  • WordPress3+的自定义内容类型功能详解

    WordPress3+进一步完善了自定义内容类型功能,也算是向CMS迈进了一大步。网络上关于这个功能的介绍少之又少,来来回回就那么几篇转来转去的,那我就来总结一下吧。

    实现方式一:辅助插件

    这里的插件只是辅助你利用这个功能的插件,并不是传统意义上的装上就完事ok的插件,关于插件的介绍大家可参见 wordpress.la的文章《如何在WordPress 3.0中使用自定义内容类型》 我就不多做介绍了

    实现方式二:functions.php中添加自定义代码

    对于完美主义者或者不喜欢插来插去的童鞋可以参考这个方法,废话不多说直接上例子;
    首先打开你的主题的functions.php文件,然后添加代码如下

    [php]
    add_action( ‘init’, ‘create_events’ );
    function create_events() {
    $labels = array(
    ‘name’ => _x(‘Events’, ‘post type general name’),
    ‘singular_name’ => _x(‘Event’, ‘post type singular name’),
    ‘add_new’ => _x(‘Add New’, ‘Event’),
    ‘add_new_item’ => __(‘Add New Event’),
    ‘edit_item’ => __(‘Edit Event’),
    ‘new_item’ => __(‘New Event’),
    ‘view_item’ => __(‘View Event’),
    ‘search_items’ => __(‘Search Events’),
    ‘not_found’ => __(‘No Events found’),
    ‘not_found_in_trash’ => __(‘No Events found in Trash’),
    ‘parent_item_colon’ => ”
    );

    $supports = array(‘title’, ‘editor’, ‘custom-fields’, ‘revisions’, ‘excerpt’);

    register_post_type( ‘event’,
    array(
    ‘labels’ => $labels,
    ‘public’ => true,
    ‘supports’ => $supports
    )
    );
    }
    [/php]

    参数详解:

    add_action告诉wordpress初始化时调用函数create_events

    $label数组告诉wordpress如何显示这个文章类型的相关信息

    $supports数组告诉wordpress这个文章类型可以支持什么(比如文章摘要excerpt)

    register_post_type就是在wordpress注册这个新的文章类型,这个函数有很多选项可用,具体可以参阅相关文章。

    一旦我们把代码添加到function.php后,我们可以在后台管理页面看到如下页面:

    wordpress-自定义文章类型

    点击添加新事件(Add New)你可以像发表一般文章一样来添加新的事情,如下图:

    wordpress-自定义文章类型

    显示自定义内容类型的文章

    为了显示自定义内容类型的文章,请添加下面的代码到循环(loop)中。将“name”用你的内容类型名称替换。 注意: 你不需要在index.php文件中添加自定义的内容类型。你可以创建一个自定义WordPress页面并循环(Loop)里运行下面的查询。
    query_posts( 'post_type=name');
    要显示来自多个内容类型下的文章,将上面的代码改成下面这样,并记得将“movie”改成自定义内容类型的名称。
    query_posts(array('post_type' => array('post', 'movies')));
    使用上面的代码将会显示所有来自普通的内容类型的文章以及其他自定义内容类型下的内容。

  • WordPress中is_single()与is_singular()的区别

    简单的认为is_sigular()相当于is_single()||is_page()||is_attachment()没有什么大问题。
    也就是说,有is_single()||is_page()

    <!–?php if ( is_single()||is_page() ) { ?–>

    的地方,都可以替换成is_singular()

    <!–?php if ( is_singular() ) { ?–>

    但是其实上述这种理解不是太准确。来比较一下is_single()与is_sigular()的文档。
    is_single()是可以加参数的。参数可以是post_id,post_slug,post_title。2.5之后还可以同时对这几个参数加以判断。
    当不带参数时,返回的是当前显示的是不是一个单独的post(而且类型不是page和attachment)。
    而带了参数,返回的就是当前显示的是不是编号/标题/标志为“XXX”的那篇post。
    在数据库里,is_single不仅要查询ID是否存在,还要保证type是“post”而不是“page”,“attachment”甚至“revision”。

    is_sigular()则简单的多。就是当前显示的是不是一条单独的post所形成的页面。
    在数据库里,is_sigular()也只是判断ID是否存在即可。

  • wordpress自带的缩略图功能全解析

    上篇(优化缩略图组件timthumb.php)说了外置缩略图组件timthumb.php的优化。接下来说一说如何利用wordpress2.9版本以上自带的缩略图功能:

    1.添加功能

    在function.php中插入代码

    add_theme_support( ‘post-thumbnails’ );

    或者你也可以增加个函数判断缩略图功能是否存在:
    if ( function_exists( 'add_theme_support' ) )
    add_theme_support( 'post-thumbnails' );
    (更多…)