WordPress给文章里的URL地址自动生成超链接

在WordPress里写文章的时候,有时候会需要添加一些URL地址,比如outsiderla.me。

但是WordPress并不能自动识别这个地址,所以显示给读者的只是一个普通文本形式的URL地址,通常我们需要通过所见即所得编辑器来给这个地址添加超链接。

不过实际上WordPress提供了一个可识别URL地址的函数——make_clickable,只要激活这个函数,当你再次输入URL地址时,读者看到的就是一个带有超链接的URL地址了。

打开functions.php文件,在里面加上:

add_filter('the_content', 'make_clickable');

函数就激活成功了。这个函数可以将URI、www、ftp以及E-mail地址转换成超链接形式。

add_meta_box()

函数描述

add_meta_box()这个函数是在wordpress v2.5中添加的,它的主要作用就是为插件开发人员提供一个接口,可以为你所发布的文章,页面,链接添加一些自定义的字段。

用法

 <?php
add_meta_box( $id, $title, $callback, $page, $context, $priority, $callback_args );
?>

参数说明

$id
(string)(必要的参数)新添加自定义面板的html的id,默认:none
$title
(string)(必要的参数)新添加自定义面板的标题 默认:none
$callback
(回调函数)(必要的参数) 用来打印出自定义面板的HTML
$screen
(string)(必要的参数) 设置你想用来添加自定义面板的是文章,页面还是链接或者是自定义文章类型 (‘post’, ‘page’, ‘link’, or ‘custom_post_type’)
$context
(string) (可选参数)
$priority
(string) (可选参数) 设置自定义面板的样式(‘high’, ‘core’, ‘default’ or ‘low’)
$callback_args
(array) (可选参数) 这个可选参数会传递给之前的Callback 默认:none

例子

下面是一个添加自定义栏目的例子

<?php
/* 添加自定义面板 */
 
add_action( 'add_meta_boxes', 'myplugin_add_custom_box' );
 
// 为了兼容 v3.以前的版本
// add_action( 'admin_init', 'myplugin_add_custom_box', 1 );
 
/* 保存数据 */
add_action( 'save_post', 'myplugin_save_postdata' );
 
/* 在页面中添加一个自定义面板 */
function myplugin_add_custom_box() {
    add_meta_box( 
        'myplugin_sectionid',
        __( 'My Post Section Title', 'myplugin_textdomain' ),
        'myplugin_inner_custom_box',
        'post' 
    );
    add_meta_box(
        'myplugin_sectionid',
        __( 'My Post Section Title', 'myplugin_textdomain' ), 
        'myplugin_inner_custom_box',
        'page'
    );
}
 
/* 输入自定义面板 */
function myplugin_inner_custom_box( $post ) {
 
  // Use nonce for verification
  wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' );
 
  //输入数据的input
  echo '<label for="myplugin_new_field">';
       _e("Description for this field", 'myplugin_textdomain' );
  echo '</label> ';
  echo '<input type="text" id="myplugin_new_field" name="myplugin_new_field" value="whatever" size="25" />';
}
 
/*保存自定义面板中的值*/
function myplugin_save_postdata( $post_id ) {
 
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
      return;
 
  if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) )
      return;
 
  if ( 'page' == $_POST['post_type'] ) 
  {
    if ( !current_user_can( 'edit_page', $post_id ) )
        return;
  }
  else
  {
    if ( !current_user_can( 'edit_post', $post_id ) )
        return;
  }
 
  $mydata = $_POST['myplugin_new_field'];
 
}
?>

下面这个例子就用class 类添加 meta

/**
 * Calls the class on the post edit screen
 */
function call_someClass() 
{
    return new someClass();
}
if ( is_admin() )
    add_action( 'load-post.php', 'call_someClass' );
 
/** 
 * The Class
 */
class someClass
{
    const LANG = 'some_textdomain';
 
    public function __construct()
    {
        add_action( 'add_meta_boxes', array( &$this, 'add_some_meta_box' ) );
    }
 
    /**
     * Adds the meta box container
     */
    public function add_some_meta_box()
    {
        add_meta_box( 
             'some_meta_box_name'
            ,__( 'Some Meta Box Headline', self::LANG )
            ,array( &$this, 'render_meta_box_content' )
            ,'post' 
            ,'advanced'
            ,'high'
        );
    }
 
 
    /**
     * Render Meta Box content
     */
    public function render_meta_box_content() 
    {
        echo '<h1>TEST OUTPUT - this gets rendered inside the meta box.</h1>';
    }
}

WordPress上传文件自动重命名

用过wordpress的应该都知道如果我们上传的文件的名字中有中文,上传到linux服务上后发现会是乱码,所以有必要把上传的文件做一个自动重命名…这样也会方便我们管理

在functions.php中加入以下代码:

function new_filename($filename) {
    $info = pathinfo($filename);
    $ext = empty($info['extension']) ? '' : '.' . $info['extension'];
    $name = basename($filename, $ext);
    return md5($name) . $ext;
}
 
add_filter('sanitize_file_name', 'new_filename', 10);

添加保存之后,就可以实现了文件的自动更名,自动生成的是一个32个的md5加密的文件名,如果你认识32位的文件名太长了
你可以使用 substr()来截取你想要的长度,代码如下,我使用的是15位

function new_filename($filename) {
    $info = pathinfo($filename);
    $ext = empty($info['extension']) ? '' : '.' . $info['extension'];
    $name = basename($filename, $ext);
    return substr(md5($name), 0, 15) . $ext;
}
 
add_filter('sanitize_file_name', 'new_filename', 10);

WordPress 调用特定分类下的标签

新不了情 — 萧敬腾

有时候我们想要获得特定的一个分类或者多个分类下的标签
可以在当前主题的Functions.php文章中添加以下代码

    function get_category_tags($args) {
    global $wpdb;
    $tags = $wpdb->get_results
    ("
    SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, null as tag_link
    FROM
    wp_posts as p1
    LEFT JOIN wp_term_relationships as r1 ON p1.ID = r1.object_ID
    LEFT JOIN wp_term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
    LEFT JOIN wp_terms as terms1 ON t1.term_id = terms1.term_id,
 
    wp_posts as p2
    LEFT JOIN wp_term_relationships as r2 ON p2.ID = r2.object_ID
    LEFT JOIN wp_term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
    LEFT JOIN wp_terms as terms2 ON t2.term_id = terms2.term_id
    WHERE
    t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms1.term_id IN (".$args['categories'].") AND
    t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
    AND p1.ID = p2.ID
    ORDER by tag_name
    ");
    $count = 0;
    foreach ($tags as $tag) {
    $tags[$count]->tag_link = get_tag_link($tag->tag_id);
    $count++;
    }
    return $tags;
    }

添加保存之后直接可以调用以下函数来获得相应分类下的标签

$args = array('categories' => '64');
$tags = get_category_tags($args);
 foreach ($tags as $tag) {
        echo "<a href=" . $tag->tag_link . ">" . $tag->tag_name . "</a>";
    }

WordPress 用query_posts分页失效解决的方法

听海

query_post的功能的确强大,可以使用它来自定义你想要调用的文章,现在要说的是通过它来实现文章的分页,在我的主题中我后台设置的是每一页10篇文章,但在我图片这个分类中我想显示9张图片,这就要用到以下代码

<?php
 query_posts('showposts=9&cat=64');
if (have_posts()) : while (have_posts()) : the_post();?>
                <div class="pic" id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                   .....
                </div>
<?php endwhile;endif; ?>

这样是实现了每页9张图片,但是到第二页的时候发现内容和第一页一样…
在这里得把这里的代码改下

<?php
 $limit = get_option('posts_per_page');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('&showposts=' . $limit = 9 . '&paged=' . $paged . '&cat=9');
$wp_query->is_archive = true;
$wp_query->is_home = false;
if (have_posts()) : while (have_posts()) : the_post();?>
   <div class="pic" id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
     .....
   </div>
<?php endwhile;endif; ?>

WordPress 获得文章中图片的数量

美女水下唯美摄影

在做图片墙的时候要在缩略图下显示文章中一共有多少张图片。也许你在制作主题的过程中也会有这方面的需要,可以在当前主题目录下的functions.php文件中加入以下代码来实现

//获取文章图片数量
function pic_total() {
    global $post;
    $post_img = '';
    ob_start();
    ob_end_clean();
    $output = preg_match_all('/\<img.+?src="(.+?)".*?\/>/is ', $post->post_content, $matches, PREG_SET_ORDER);
    $post_img_src = $matches [0][1];
    $cnt = count($matches);
    return $cnt;
}

添加之后在主题模板中调用 这个函数就行了

<?php echo pic_total(); ?> 张图片

WordPress文章修订版本和自动保存功能

大家在发表和编辑文章的时候,可能都不喜欢WordPress 自动保存(AutoSave)和文章历史修订版本(Revisions)的功能。一方面网速不好的时候,它会影响编辑和发表文章页面的加载速度;另一方面这些文章的历史修订版本都会写入数据库保存,无形中大大增加了数据库的膨胀速度,冗余数据太多也影响数据库的存取查询效率。wp管理后台并没有提供关闭功能选项。那么如何禁用WordPress自动保存和文章历史修订版本功能呢?这也是WordPress优化数据库第一步要做的内容。

首先我们可以使用WordPress插件,禁用自动保存和关闭文章修订版本的插件有很多,本文最后列举了几个供参考。如果你不想安装插件,那也可以手动修改代码关闭和禁用WordPress自动保存和文章修订版本功能。

关闭WordPress 自动保存功能(AutoSave)

个人觉得WordPress自动保存功能对于经常写原创文章的wper来说还是比较实用的。有时候花了很长时间写一篇博客文章,若突然碰到停电,电脑死机之类的突发情况,没有自动保存那将是很郁闷的事情,所以建议最好还是不要禁用WordPress自动保存功能。如果你是用office word文档等其他编辑器,那就完全可以用下面的方法关闭WordPress自动保存功能:

找到wordpress/wp-admin/目录下的post-new.php,post.php,page-new.php,page.php这四个文件。找到代码wp_enqueue_script(‘autosave’); 直接删除,或者在前面加上”//”将代码注释掉:

// wp_enqueue_script('autosave');

或者打开wp-config.php文件,在

require_once(ABSPATH . 'wp-settings.php');

前添加这段代码:

define('AUTOSAVE_INTERVAL', 3600 ); AUTOSAVE_INTERVAL表示自动保存的时间间隔,

3600表示1个小时,时间随意设,1小时差不多也写完了。

禁用WordPress文章历史修订版本(Revisions)

同关闭自动保存功能一样,在wp-config.php中的代码

require_once(ABSPATH . 'wp-settings.php');

前增加以下代码:

define('WP_POST_REVISIONS',false);

清理数据库中以前的文章历史修订版本

另外你也可以通过phpmyadmin定期清理和删除数据库中的冗余文章修订版本,清理以前的文章修订版本也一样。数据库操作前最好先进行备份。在 phpmyadmin 中进行数据库管理,SQL语句命令行中写入以下运行代码执行(若你设置了数据库表名的前缀,需要将数据表名称中wp改成你的前缀):

DELETE FROM wp_posts WHERE post_type='revision';

另外还可以再用SQL语句:

DELETE FROM wp_postmeta WHERE meta_key= '_edit_lock';
 
DELETE FROM wp_postmeta WHERE meta_key ='_edit_last';

删除数据库中文章特殊数据表wp_postmeta中meta_key字段为_edit_lock(代表上次修改post的修改时间)和_edit_last(指最后一次编辑时间)的数据,然后全选所有表,下拉列表中选择使用phpmyadmin“优化表”功能。

本文转自 http://farlee.info/archives/wordpress-autosave-revisions-closed.html

WordPress缩略图

WordPress 2.9 以后开始WordPress 开始提供了文章缩略图的功能,专门使用一些函数来设置和调用文章的缩略图
首先要开启 WordPress 的缩略图功能,在当前 WordPress 主题的 functions.php 添加以下函数

add_theme_support('post-thumbnails');

开启这个功能之后我们要做的是设置缩略图的默认大小,如果你没有设置默认的是 200X200 可以通过以下函数来设置

set_post_thumbnail_size(200, 200 ); //200 像素宽和 200 像素高

这个函数还有第三个参数 设置 的是如果图片大小超过了我们设置的200X200 是否 对图片进行被裁剪。。。默认为空也就是不裁剪,如果设置为 true 则是要进行裁剪…

set_post_thumbnail_size(200, 200, true ); // 200 像素宽和 200 像素高,裁剪

调用 我们设置的缩略图 可以通过以下函数来实现

<?php
if (has_post_thumbnail() ) {
	the_post_thumbnail(); //如果当前文章有缩略图就在这里输出
} else {
	//如果当前文章没有设置缩略图 可以输出一张默认的图片在这里
}
?>

有时还需要同时生成别的大小的缩略图,可以使用以下函数

add_image_size( 'single-post-thumbnail',660, 99999 )//生成一张660px宽(高度不限制)的图片

可以这样调用刚才生成的图片

<?php the_post_thumbnail( 'single-post-thumbnail' ); ?>

wordpress 获得评论最多的文章

在制作主题中,我们有时需要获得网站中评论最多的文章,可以直接使用以下代码:

$result = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 10");
                    foreach ($result as $topten) {
                        $postid = $topten->ID;
                        $title = $topten->post_title;
                        $commentcount = $topten->comment_count;
                        if ($commentcount != 0) {
                            ?>
                            <li><a href="<?php echo get_permalink($postid); ?>" title="<?php echo $title ?>"><?php echo $title ?></a> <?php $commentcount ?></li>
                            <?php
                        }
                    }

jQuery load用法

jquery的load函数是请求另一个文件并加载到当前DOM里的调用,load方法的完整格式是:load( url, [data], [callback] )(注意没有参数是GET方式请求,有参数则是 POST方法)。

url:是指要导入文件的地址。
data:可选参数;因为Load不仅仅可以导入静态的html文件,还可以导入动态脚本,例如PHP文件,所以要导入的是动态文件时,我们可以把要传递的参数放在这里。
callback:可选参数;是指调用load方法并得到服务器响应后,再执行的另外一个函数。
继续阅读“jQuery load用法”