WordPress发布新文章Email通知注册用户

在当前的WordPress主题目录下的functions.php中,添加以下php代码:

function newPostNotify($post_ID) {
     if( wp_is_post_revision($post_ID) ) return;
 
     global $wpdb;
     $get_post_info = get_post($post_ID);
     if ( $get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) {
         // 读数据库,获取所有用户的email
         $wp_user_email = $wpdb->get_results("SELECT DISTINCT user_email FROM $wpdb->users");
 
         // 依次给每个Email发邮件
        foreach ( $wp_user_email as $email ) {
             // 邮件标题:xx博客有新文章
            $subject = 'xx博客有新文章';
 
             // 邮件内容:新文章网址:+ URL
             $message = '新文章网址:' . get_permalink($post_ID);
 
             // 发邮件
            wp_mail($email->user_email, $subject, $message); 
         }
     }
}
 
// 钩子,一旦WordPress有新文章发布或文章被修改即刻执行newPostNotify函数
add_action('publish_post', 'newPostNotify');

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文章修订版本和自动保存功能

大家在发表和编辑文章的时候,可能都不喜欢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 在编辑器以外的地方使用 shortcode

我们发布文章时可以通过wordpress的shortcode(短码)来添加一些文章之外的内容,也许你也已经使用过wordpress的 shortcode ,一个简单的例子就是在发布文章的时候加入google广告代码。

但有时我们可能会在主题模板中使用wordpress shoutcode,或者你想在编辑器以外使用这个功能,如你想把你的 shortcode 添加到文章的自定义字段中。那应该怎么做用呢?
继续阅读“wordpress 在编辑器以外的地方使用 shortcode”