外部调用WordPress最新文章方法

外部调用WP的文章一般有两种情况,一是在同一个站点,二是不同站点

同一个站点

同一个站点的话,假设WP安装在blog目录,在主页调用博客的文章,也是最多的情况

<?php
define('WP_USE_THEMES', false);
require 'blog/wp-blog-header.php'; //修改博客的路径
query_posts('showposts=20'); //显示文章条数
?>
<?php while (have_posts()): the_post();?>
    <li><a href="<?php the_permalink();?>" target="_blank"><?php echo mb_strimwidth(strip_tags(apply_filters('the_title', $post->post_title)), 0, 50, " "); ?></a></li>
<?php endwhile;?>

不在一个站点

一种方法是使用同一站点的方法,在博客根目录中新建blog_call.php文件,内容同上面给出的代码,然后在需要调用的站点使用file_get_contents读取

<?php
$str = file_get_contents("http://www.xxx.com/blog_call.php");
echo $str[0];
?>

另一种方法是读取博客RSS的方式,下面这段PHP读取RSS的代码在网上流传已久,但是很多朋友不知道,其实它是可以用在WP外部调用上的

<?php
// RSS源地址列表数组
$rssfeed = array(
    "http://rss.sina.com.cn/news/allnews/sports.xml", 
    "http://ent.163.com/special/00031K7Q/rss_toutiao.xml"
);

header('Content-Type:text/html;charset= UTF-8'); // 设置编码为UTF-8
for ($i = 0; $i < sizeof($rssfeed); $i++) {
    // 分解开始
    $buff    = "";
    $rss_str = "";
    $fp = fopen($rssfeed[$i], "r") or die("can not open $rssfeed"); // 打开rss地址,并读取,读取失败则中止
    while (!feof($fp)) {
        $buff .= fgets($fp, 4096);
    }
    fclose($fp); // 关闭文件打开
    $parser = xml_parser_create(); // 建立一个 XML 解析器
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); // xml_parser_set_option -- 为指定 XML 解析进行选项设置    
    xml_parse_into_struct($parser, $buff, $values, $idx); // xml_parse_into_struct -- 将 XML 数据解析到数组$values中
    xml_parser_free($parser); // xml_parser_free -- 释放指定的 XML 解析器
    foreach ($values as $val) {
        $tag = $val["tag"];
        $type  = $val["type"];
        $value = $val["value"];
        $tag = strtolower($tag); //标签统一转为小写
        if ($tag == "item" && $type == "open") {
            $is_item = 1;
        } else if ($tag == "item" && $type == "close") {
            //构造输出字符串
            $rss_str .= "<a href='" . $link . "' target=_blank>" . $title . "</a><br />";
            $is_item = 0;
        }
        //仅读取item标签中的内容
        if ($is_item == 1) {
            if ($tag == "title") {$title = $value;}
            if ($tag == "link") {$link = $value;}
        }
    }
    echo $rss_str . "<br />"; //输出结果
}?>

同域名下不同Wordpress间文章调用

<?php
$loca = "/blog"; // 这里定义你的WP目录
require_once dirname(__FILE__) . $loca . '/wp-load.php'; // 注意这里是wp目录下的wp-load.php
wp(); // 这样wp的加载就完成了,我们不需要加载模板。
?>
<?php
query_posts('showposts=10'); //就是这里加了一句query_posts,这样也可以实现调用条数的指定。
while (have_posts()): the_post();?>
    <div class="excerpt"><?php the_excerpt();?></div>
<?php endwhile;?>

<!--导航开始-->
<p align="center">
<?php
global $paged, $wp_query;
if ($paged > 1) {
    echo '<a href=' . str_replace($loca, '', get_previous_posts_page_link()) . '>&laquo; Previous Entry</a> ';
}
if ($paged < $wp_query->max_num_pages) {
    echo ' <a href=' . str_replace($loca, '', get_next_posts_page_link()) . '>Next Entry &raquo;</a>';
}?>
</p>
<!--导航结束-->


PS:这个方法只能用在同一个站点下.如果是不同域名,也就是跨站的情况下,是不能使用这个方法的.

如果跨站的话还是只能使用javascript方式调用。JS调用可以采用Feed to JS来实现。

不用插件实现侧栏带头像的最新评论

WordPress非插件侧栏带头像最新评论:在主题模板的侧边栏模板sidebar.php适当位置添加以下代码:

<?php
    global $wpdb;
    $sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved,comment_author_email, comment_type,comment_author_url, SUBSTRING(comment_content,1,25) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) WHERE comment_approved = '1' AND comment_type = '' AND comment_author != 'Admin' AND post_password = '' ORDER BY comment_date_gmt DESC LIMIT 10";
    $comments = $wpdb->get_results($sql);
    $output = $pre_HTML;
    foreach ($comments as $comment) {
        $output .= "\n<li>".get_avatar(get_comment_author_email('comment_author_email'), 18). " <a href=\"" . get_permalink($comment->ID) . "#comment-" . $comment->comment_ID . "\" title=\"" . $comment->post_title . " 上的评论\">". strip_tags($comment->comment_author) .": ". strip_tags($comment->com_excerpt) ."</a></li>";
    }
    $output .= $post_HTML;
    $output = convert_smilies($output);
    echo $output;
?>

其中的“Admin”换成自己的博主作者名,主要是为了限制输出博主的最新评论。然后保存文件即可。其中的CSS样式需要自己定义。也可以使用最新评论插件WP-RecentComments可以很容易地实现WordPress侧边栏最新评论带avatar头像效果

如何自动替换评论中的不雅关键词

有时候访客的评论中含有不雅的词汇,这让你的博客看上去不那么美,或者有些词比较敏感,最好给过滤掉,或者你想让有些词特定显示成你喜欢的字词,让博客比较有趣。这时你就可以使用下面这段代码加在functions.php,让你在评论中替换一些关键词。

add_filter( 'pre_comment_content', 'wpFilterComment' );
function wpFilterComment($comment) {
  $replace = array(
    // 'WORD TO REPLACE' => 'REPLACE WORD WITH THIS'
    'foobar' => '*****',
    'hate' => 'love'
  );
  $comment = str_replace(array_keys($replace), $replace, $comment);
  return $comment;
}

定义WordPress评论最少字数限制

复制下面的函数代码并将其添加到 functions.php 文件中。当访客尝试发布字数小于预定义长度的评论内容时,这段代码会自动触发错误信息。

add_action('publish_post', 'minComment');
function minComment($content){
  global $comment;
  $num = 10; //设置评论最少字数限制为 10
  $content = $comment->comment_content;
  if(str_word_count($content) < $num)
    wp_die('错误: 字数不足');
}

WordPress博客首页添加站点统计显示

在首页显示博客的文章数量、评论数量、留言数量、浏览数量等相关信息

添加站点统计方法步骤:

1、登陆博客后台,进入外观菜单下的编辑页面

2、选择index.php或其它文件,在相应位置添加函数调用代码:

文章:<?php $count_posts = wp_count_posts(); echo $published_posts = $count_posts->publish; ?> 篇
页面:<?php $count_pages = wp_count_posts('page'); echo $page_posts = $count_pages->publish; ?> 个
草稿:<?php $count_posts = wp_count_posts(); echo $draft_posts = $count_posts->draft; ?> 篇
分类:<?php echo $count_categories = wp_count_terms('category'); ?> 个
标签:<?php echo $count_tags = wp_count_terms('post_tag'); ?> 个
会员:<?php $users = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->users"); echo $users; ?> 个
链接:<?php $link = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->links WHERE link_visible = 'Y'"); echo $link; ?> 个
评论:<?php $total_comments = get_comment_count(); echo $total_comments['approved'];?> 条
浏览:<?php get_totalviews(true, true, true); ?> 次
更新:<?php $last = $wpdb->get_results("SELECT MAX(post_modified) AS MAX_m FROM $wpdb->posts WHERE (post_type = 'post' OR post_type = 'page') AND (post_status = 'publish' OR post_status = 'private')");$last = date('Y年n月j日', strtotime($last[0]->MAX_m));echo $last; ?>

3、更新文件,然后打开添加了调用函数的页面,即可看见显示的状态

WordPress上传附件中文乱码最简单解决方法

把以下代码添加到主题目录functions.php 文件 里面 判断如果是中文就自动改成md5的储存名

add_filter('sanitize_file_name', 'uploadFile', 5, 1);
function uploadFile($filename){
    $parts     = explode('.', $filename);
    $filename  = array_shift($parts);
    $extension = array_pop($parts);
    foreach ((array) $parts as $part) {
        $filename .= '.' . $part;
    }
    if (preg_match('/[一-龥]/u', $filename)) {
        $filename = md5($filename);
    }
    $filename .= '.' . $extension;
    return $filename;
}

修改WordPress默认头像地址

方法一:使用代码自定义 WordPress 的默认 Gravatar 头像

在你的主题的 functions.php 的最后一个 ?> 前面添加下面的代码:

add_filter('avatar_defaults', 'newGravatar');
function newGravatar($avatar_defaults){
    $myavatar = get_bloginfo('template_directory') . '/images/gravatar.jpg';
    $avatar_defaults[$myavatar] = "WordPress社区 默认头像";
    return $avatar_defaults;
}

修改提示:

1.第四行代码是头像的URL地址,以上为现用主题的images文件夹下的gravatar.jpg,请根据实际修改;

2.第五行是自定义头像名称,以上为 WordPress社区默认头像 ,请自行修改。

保存好以后,就可以在 后台 – 设置 – 讨论 下看到新增的头像,将其设置为默认即可:

方法二:使用 Add New Default Avatar 插件

如果你不想折腾代码,也可以直接在后台安装 Add New Default Avatar 插件,启用后,就可以在 后台 – 设置 – 讨论 下添加自定义头像,非常简单。