标签 WordPress 下的文章

Greasemonkey脚本:让wp-markdown编辑器和预览并列显示,适合大屏幕显示器

开始用wp-markdown写博文之后,发现了一个弊端。在编辑非常长的文章的时候。鼠标要狂滚动到下面的预览窗口查看效果。非常不方便。完全没有把我的24寸大显示器的空间给利用起来。

以下四行代码让wp-markdown编辑器和预览窗口水平显示。刚测试了发现仅支持我的1920X1080分辨率。不知道怎么兼容其他分辨率。没办法,CSS学得太烂了。不过小分辨率的显示器并列显示就显得太窄了点。

// ==UserScript==
// @name WP-Markdown parallel view
// @version 0.1
// @namespace localhost
// @author tunpishuang
// @description Let WP-Markdown preview section parallel to editor
// @match http://tunps.com/wp-admin/*
// @grant none
// ==/UserScript==


var editor = document.getElementById("wp-content-editor-container");
var preview = document.getElementById("wmd-previewcontent");
editor.setAttribute('style', 'float:left;width:50%');
preview.setAttribute('style', 'float:left;width:45%;clear:none');

将以上代码保存为markdownStyle.user.js。 修改@match为你的博客域名。放入Chrome或Firefox浏览器即可。

让WordPress插件Simple Tags 2.2支持中文支持没有空格tag的匹配

Simple Tags是 Wordpress 功能强大的Tag插件。但是对中文支持欠佳。通过手动的修改一下代码,可以让它更完美的支持中文。

第一步,找到 \inc\class.client.autoterms.php 文件,在大约第100行,

将类似如下语句:

if ( preg_match("/\b".$term."\b/i", $content) );

中的两个 \b 去掉,\b 在正则表达式中表示单词边界,但是中文跟英文不一样,字(单词)与字(单词)之间没有边界。即:

if ( preg_match("/".$term."/i", $content) );

第二步,找到 \inc\class.client.autolinks.php 文件,在大约第160行,

将类似如下语句的行首添加双斜杠,将这两句话注释掉:

//$match = '/(\PL|\A)(' . preg_quote($term_name, "/") . ')(\PL|\Z)/u'.$case; 
//$substitute = '$1<a href="'.$term_link.'" class="st_tag internal_tag" '.$rel.' title="'. esc_attr( sprintf( __('Posts tagged with %s', 'simpletags'), $term_name ) )."\">$2</a>$3";

然后将紧跟在下面的原本被注释掉的语句启用,并去掉其中的两个 \b ,即:

$match = "/" . preg_quote($term_name, "/") . "/".$case;
$substitute = '<a href="'.$term_link.'" class="st_tag internal_tag" '.$rel.' title="'. esc_attr( sprintf( __('Posts tagged with %s', 'simpletags'), $term_name ) )."\">$0</a>";

好了,现在就OK了。

wordpress删除指定term_id的所有文章

delete a,b,c,d
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp_terms e ON ( e.term_id = d.term_id )
WHERE e.term_id =733

wp_terms.term_id 表示一个term的id。这个term可以是post tag、post category、nav menu、post-format等类型。

过滤post-format-aside文章

wordpress在3.X版本中加入了post-format概念,默认是standard,其他的可选的还有aside,gallary,status,video等。

本博客一直使用aside形式来发布一些简短的信息,而且这些信息是“无聊”的,比如“刚吃完饭,好饱啊”之类没有任何价值的信息。所以需要在primary loop中过滤掉,然后在一个“僻静”的地方(比如某个页面)显示出来。

方法很简单,不过我股沟了很久

primary loop中过滤post-format-aside

在主题文件(我用的twentyten)loop.php文件中找到代码:while ( have_posts() ) : the_post();。此行上面添加以下代码:

<?php
$my =array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => 'post-format-aside',
            'operator' => 'NOT IN',
        )
    )
);
$my = array_merge( $my , array_filter( $wp_query->query_vars ) );
query_posts($my);
?>

这样primary loop中就不再显示post-format-aside文章。

在新建页面(“僻静的地方”)中显示aside文章,并实现分页

新建一个页面,名字随意。记录下page ID,我的是7856。所以在主题目录下建立page-7856.php,文件代码如下:

<?php
get_header(); ?>
        <div id="container">
            <div id="content" role="main">

            <?php
            $pp = isset($_GET['pp'])?$_GET['pp']:0;
            
            if(!is_numeric($pp))
                $pp=0;
            $offset = $pp*10;
            $args =array(
                'tax_query' => array(
                    array(
                        'taxonomy' => 'post_format',
                        'field' => 'slug',
                        'terms' => 'post-format-aside'
                    )
                ),
                'offset' => $offset
            );
            // The Query
            $the_query = query_posts( $args );
            ?>
            
            <?php while (have_posts() ) : the_post(); 
                // The Loop?>
                <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

                <?php if (is_search() ) : // Display excerpts for archives and search. ?>
                    <div class="entry-summary">
                        <?php the_excerpt(); ?>
                    </div><!-- .entry-summary -->
                <?php else : ?>
                    <div class="entry-content">
                        <?php the_content( __( 'Continue reading <span class="meta-nav">→</span>', 'twentyten' ) ); ?>
                        <hr />
                    </div><!-- .entry-content -->
                <?php endif; ?>

                    <div class="entry-utility">
                        <?php twentyten_posted_on(); ?>
                        <span class="meta-sep">|</span>
                        <span class="comments-link"><?php comments_popup_link( __( 'Leave a comment', 'twentyten' ), __( '1 Comment', 'twentyten' ), __( '% Comments', 'twentyten' ) ); ?></span>
                        <?php edit_post_link( __( 'Edit', 'twentyten' ), '<span class="meta-sep">|</span> <span class="edit-link">', '</span>' ); ?>
                    </div><!-- .entry-utility -->
                
            </div><!-- #post-## -->
                
            <?php endwhile; ?>
            <?php
            // Reset Post Data
            wp_reset_postdata();
            wp_reset_query();

            ?>
                <div id="nav-below" class="navigation">
                <?php
                //pagenation function
                    $older = $pp-1;
                    $newer = $pp+1;
                ?>
                <?php if($pp != 0){?>
                    <a href="<?php echo "doing?pp=".$older ?>">上一页</a>
                <?php } else { ?>
                    上一页
                <?php } ?>
                <a href="<?php echo "doing?pp=".$newer ?>">下一页</a>
                </div><!-- #nav-below -->
            </div><!-- #content -->
            <?php /* Display navigation to next/previous pages when applicable */ ?>
        </div><!-- #container -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

feed中过滤掉aside文章

页面上的工作我们完成了,接下来我们要过滤掉feed中的aside文章,也就是不让aside文章在feed中输出。为什么要过滤捏?难道你觉得你的博客订阅用户会对你什么时候吃饭了?吃得是否很饱感兴趣?答案是否定的。方法很简单,我们在主题目录找到functions.php,在末尾添加如下代码即可:

//feed filter aside posts
function wp_exclude_category(WP_Query $query) {
    if($query->is_feed){
        $args = array(
            array(
                'taxonomy' => 'post_format',
                'field' => 'slug',
                'terms' => 'post-format-aside',
                'operator' => 'NOT IN'
            )
        );
    $query->set('tax_query',$args);
    }
    return $query;
}
add_filter('pre_get_posts','wp_exclude_category');

ckeditor for wordpress 3.6.2.1 HTML转义bug

blogging的时候添加代码喜欢用

标签,然后c代码里面有很多的#include <stdio.h>之类的头文件引用。

在wysiwyg模式下输入<>后html模式下应该转义成<和>,但是这个bug直接转成了<>,当再切换到wysiwyg的时候,#include <stdio.h>已经变成了#include <stdio.h></stdio.h>。因为把<stdio.h>当成了一个html tag。

This bug has been reported a week ago in this post. michal_cksource (the author of ckeditor) said bug has been fixed, but it will be available in next release.:(

只能忍忍了,现在暂时用KindEditor.Everything is just fine.