分类: 写写代码

  • 使用wp_reset_query()重置query

    琢磨着为单篇文章添加上随机文章之类,因为已经写好了一个随机文章的函数,所以,直接在 single.php 中调用即可。

    可是,页面卡住了,CPU 100了。换了个浏览器,依然如此。将新添加的语句注释掉,正常。函数的问题?可是,404 页面工作正常啊!将语句替换为简单的 echo 语句,一切正常。

    再次调用函数,刷新,等待加载。N久之后,终于开始刷新出来了。可是,为什么是无数的文章而不是原本的单篇文章的呢?赶紧停止加载,去看代码。

    仔细查看代码,终于发现了问题。我写的随机文章函数使用的是 wp_query() 方法,然后,里面是一个 loop,而添加的单篇文章的时候又位于其 loop 里面。而 $post 之类都是全局变量,这样,随机文章函数就重写了一系列的全局变量,从而导致了悲剧。
    (更多…)

  • 添加页内跳转

    页内跳转,在我这里,其实就是锚跳转(包括回到顶部、直达底部、阅读评论这三个),只是做了些美化和 JS 效果而已,最终效果见页面右侧(单页和非单页有所不同)。

    一开始,我是直接把 HTML/PHP 代码放进 footer.php 文件中的,后来采用 hook 的方法。虽说,就得到的 HTML 结构来说,可能不是非常好;但个人感觉比直接修改 footer.php 好。

    HTML/PHP 代码

    <?php
        // add updown access, needs hook wp_footer() in footer.php
        function up_down() {
    ?>
        <div id="updown">
            <a href="#" title="返回顶部" id="goUp"></a>
            <?php if(is_single()):?>
            <a href="#comments" title="阅读评论" id="goComments"></a>
            <?php endif;?>
            <a href="#footer" title="直达底部" id="goDown"></a>
        </div>
    <?php
        }
        add_action('wp_footer', 'up_down');
    ?>
    

    使用这种方法,需要 footer.php 文件中有调用到 wp_footer() 函数,否则是无法 hook 的。
    (更多…)

  • WordPress带Home链接导航栏

    WordPress 3.0 之后,我们可以使用 wp_nav_menu 来生成导航菜单,这样可以支持自定义菜单。

    若没有在后台中添加菜单,那么该函数就会 fallback 回 wp_page_menu。而默认情况下,这样产生的导航栏是没有 home 菜单的。

    添加 home 菜单的方法也很简单,在 functions.php 文件中添加以下代码即可:

    /**
     * Get our wp_nav_menu() fallback, wp_page_menu(), to show a home link.
     */
    function dj_page_menu_args( args ) {args['show_home'] = true;
        return $args;
    }
    add_filter( 'wp_page_menu_args', 'dj_page_menu_args' );
    

    其中,参数 show_home 的可取值有:

    0 (false) – default;
    1 (true);
    <any text> – 用来替换默认的 “home” 文字

  • CSS逆序列表

    默认的有序列表是从1开始递增计数的,如果想使用CSS将其逆序,那么可以使用以下方法。

    <!-- HTML 代码 -->
    <ol><strong>逆序</strong>
        <li>line 1</li>
        <li>line 2</li>
        <li>line 3</li>
        <li>line 4</li>
        <li>line 5</li>
    </ol>
    

    (更多…)

  • Table注意事项

    首先是一段 HTML 代码:

    <table id="tb">     
        <tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
        <tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
        <tr><td>9</td><td>10</td><td>11</td><td>12</td></tr>            
        <tr><td>13</td><td>14</td><td>15</td><td>16</td></tr>
    </table>
    

    DOM解析

    对于一段 table 的 HTML 代码,即使没有显式写出 tbody 结构,浏览器在解析的时候都会加上 tbody 结构。所以,对于以上代码,若想获取第一行,需要使用代码:

    document.getElementById('tb').lastChild.firstChild; //第一行
    //document.getelementById('tb').lastChild 得到的不是最后一行而是 tbody
    

    (更多…)

  • CSS3中box-shadow的性能问题

    在对主题评论列表处理的过程中,突然发现嵌套回复性能低下,页面拖动也一卡一卡的。排除法后锁定了目标——box-shadow。

    于是做了一些实验,发现如果大量使用box-shadow,又或者容器比较大的时候,性能都会降低很多。如果容器不是很大,数量不是很多,倒没多大的感觉。

    如果将box-shadow应用到评论列表中,这个问题就比较明显了,特别是在评论不分页、支持嵌套的情况下。

    无论是Firefox还是Chrome,对box-shadow的支持都存在这个问题,Opera则好上很多,带来的迟滞感不是很强。

    模仿评论列表小小地做了一个Demo,可以体验到带box-shadow和不带box-shadow的明显区别。

    更极端的一个Demo

  • 为原生comment_form添加表情

    若主题的 comment form 是重写的,那么添加表情的方法可以参考这个

    在 WP 3中,系统提供了 comment_form() 这个函数来生成评论框以免重复开发。如果使用这个来生成评论框,那么不能直接在对应源码中添加代码的方式来添加表情。

    在这种情况下,可以用下面的方法来添加表情:

    首先参照以上的方法的步骤1,然后在functions.php中添加以下代码:

    function add_smilies_to_form(){
        include(TEMPLATEPATH . '/smiley.php');
    }
    //下面之所以区别对待,是因为默认情况下用户登录与否comment_form有所不同
    if (is_user_logged_in()) {//用户登录情况下,加到登录信息下面(留言框顶部)
        add_filter('comment_form_logged_in_after', 'add_smilies_to_form');
    }
    else { //非登录情况下,加到fields下(留言框顶部)
        add_filter( 'comment_form_after_fields', 'add_smilies_to_form');
    }
    

    如无意外,这样即可。

  • JavaScript 中的闭包

    一个闭包,简单地说,就是一个函数以及其定义时的上下文环境。

    用代码来解释会更直观一点:

    function outerFn() {
        var name = "outer";
        function innerFn() {
            alert(name);
        }
        return innerFn;
    }
    var myFunc = outerFn();
    myFunc();   // output "outer"
    

    这样,myFunc 便是一个闭包,其包括了函数 innerFn() 和其上下文环境 name
    (更多…)

  • JavaScript中字符串连接性能

    看到很多书或文章中都有说在JavaScript中进行字符串连接时最好使用Array的join而不是字符串的“+”操作。因为,join的性能更好,速度更快,可我使用以下代码测试时却得到相反的结果。

    Demo页面
    (更多…)

  • Firefox Box-shadow & Outline bug

    Firefox同时使用outline和boxshadow时会出现outline被shadow撑开的bug,Chrome、Opera不存在此问题。

    如以下代码:

    <style type="text/css">
        #ffbug{
            margin:30px auto;
            width:200px;
            height:200px;
            border:2px solid blue;
            outline:5px dotted green;
            box-shadow: 0 0 10px red;
            -moz-box-shadow: 0 0 10px red;
            -webkit-box-shadow: 0 0 10px red;           
        }
    </style>
    <div id="ffbug">
        蓝色为border<br />
        绿色为outline<br />
        红色为box-shadow<br /><br />
        Firefox会将box-shadow的宽度计算进width中,从而导致border变化,于是outline偏移。
    </div>
    

    (更多…)