姐姐做事情一向不喜欢从头开始搞,主要是水平太菜,搞php真的是不专业。于是就只能到处抄作业了。好在wp算是使用比较广泛的系统,相对来说查找各种资料还不算太麻烦,但是国内的互联网环境嘛,就一言难尽了。各种抄作业,基本是一篇文章被搬到了不同的地方。可能很多人连尝试都没尝试就抄过去了,但是姐姐不一样啊。姐姐的作业是要实际测试的。
之前看杜老师弄的说说还是蛮不错的,基于memos。不过个人觉得总有点遗憾,那就是两个系统是独立的,账号不互通。另外一个问题就是自己的这个说说模块基本都是自己用,也没有太大的必要搞多用户。于是就想着找找各种插件,测试了不少插件之后,最终觉得Simple microblogging这款插件基本能够满足需求。
不过在使用的过程中也发现了几个问题:
1.页面排版有点另类,具体可以直接安装插件后创建文章查看,横向排版,标题文字图片一排。
2.文章加载要么加载固定条数,要么全部加载,这个设置对于有强迫症的我不太友好
3.没有分页
昨晚用虚拟机上的wp改了一晚上,最终页面样式改的自己多少能看的过去了
但是分页的问题确实搞不定了,当时就想放弃了。主要是对于wp的各种函数也不熟悉啊,真是让人头大。于是想着淘宝上找个人给改一下:
奈何对面小哥哥回消息有点慢,在等待的过程中姐姐把分页的问题给解决了。
于是现在基本就可以用了,效果嘛最起码自己看的过去了。
安装插件之后修改插件代码,直接复制下面的代码即可:
<?php
/*
* Plugin Name: Simple microblogging
* Description: Use your wordpress site as a microblog; display the microposts in a widget or using a shortcode.
* Version: 0.1
* Author: Samuel Coskey, Victoria Gitman
* Author URI: http://boolesrings.org
*/
/*
https://www.qiniu.com/qfans/qnso-21193676#comments
*/
// 处理分页
function remove_page_from_query_string($query_string)
{
if (isset($query_string['name']) && $query_string['name'] == 'page' && isset($query_string['page'])) {
unset($query_string['name']);
// 'page' in the query_string looks like '/2', so i'm spliting it out
@list($delim, $page_index) = explode('/', $query_string['page']);
$query_string['paged'] = $page_index;
}
return $query_string;
}
// I will kill you if you remove this. I died two days for this line
add_filter('request', 'remove_page_from_query_string');
// following are code adapted from Custom Post Type Category Pagination Fix by jdantzer
function fix_category_pagination($qs){
if(isset($qs['category_name']) && isset($qs['paged'])){
$qs['post_type'] = get_post_types($args = array(
'public' => true,
'_builtin' => false
));
array_push($qs['post_type'],'post');
}
return $qs;
}
add_filter('request', 'fix_category_pagination');
/*
* Create the new post type
*/
add_action( 'init', 'create_micropost_type' );
function create_micropost_type() {
register_post_type( 'micropost',
array(
'labels' => array(
'name' => __( 'Microposts' ),
'singular_name' => __( 'Micropost' ),
),
'has_archive' => true,
'menu_icon' => plugins_url( 'microblogging-icon.png', __FILE__ ),
'menu_position' => 5,
'public' => true,
'rewrite' => array( 'slug' => 'microposts' ),
'supports' => array( 'title', 'editor', 'author', 'comments' ),
// uncomment to support categories and tags:
'taxonomies' => array ( 'category', 'post_tag' ),
)
);
}
/*
* Tells wordpress to reset its permalink structure, to accommodate the new post type
*/
register_activation_hook( __FILE__, 'my_rewrite_flush' );
function my_rewrite_flush()
{
create_micropost_type();
flush_rewrite_rules();
}
/*
* Microblog widget code
*/
add_action('widgets_init', 'ahspfc_load_widgets');
function ahspfc_load_widgets() {
register_widget('microblog_widget');
}
class microblog_widget extends WP_Widget {
function microblog_widget() {
$widget_ops = array(
'classname' => 'microblog_widget',
'description' => 'Allows you to display a list of microblog entries while excluding them from posts.',
);
$control_ops = array(
'id_base' => 'microblog-widget',
);
$this->WP_Widget('microblog-widget', 'Microblog', $widget_ops, $control_ops );
}
function form ($instance) {
$defaults = array(
'numberposts' => '5',
'title' => '',
'rss' => '',
);
$instance = wp_parse_args( (array) $instance, $defaults );
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>">Title:</label>
<input type="text" name="<?php echo $this->get_field_name('title') ?>" id="<?php echo $this->get_field_id('title') ?> " value="<?php echo $instance['title'] ?>" size="20">
</p>
<p>
<label for="<?php echo $this->get_field_id('numberposts'); ?>">Number of posts:</label>
<input type="text" name="<?php echo $this->get_field_name('numberposts'); ?>" id="<?php echo $this->get_field_id('numberposts'); ?>" value="<?php echo $instance['numberposts']; ?>">
</p>
<p>
<input type="checkbox" id="<?php echo $this->get_field_id('use_excerpt'); ?>" name="<?php echo $this->get_field_name('use_excerpt'); ?>" <?php if ($instance['use_excerpt']) echo 'checked="checked"' ?> />
<label for="<?php echo $this->get_field_id('use_excerpt'); ?>">Show excerpts only?</label>
</p>
<p>
<input type="checkbox" id="<?php echo $this->get_field_id('rss'); ?>" name="<?php echo $this->get_field_name('rss'); ?>" <?php if ($instance['rss']) echo 'checked="checked"' ?> />
<label for="<?php echo $this->get_field_id('rss'); ?>">Show RSS feed link?</label>
</p>
<?php
}
function update ($new_instance, $old_instance) {
$instance = $old_instance;
$instance['title'] = $new_instance['title'];
$instance['numberposts'] = $new_instance['numberposts'];
$instance['use_excerpt'] = $new_instance['use_excerpt'];
$instance['rss'] = $new_instance['rss'];
return $instance;
}
function widget ($args,$instance) {
extract($args);
$title = $instance['title'];
$numberposts = $instance['numberposts'];
$use_excerpt = $instance['use_excerpt'];
$rss = $instance['rss'];
// retrieve posts information from database
global $post;
$query = "post_type=micropost&posts_per_page=" . $numberposts;
$query_results = new WP_Query($query);
// build the widget contents!
$out = "<ul>";
while ( $query_results->have_posts() ) {
$query_results->the_post();
$out .= "<li>";
$post_title = the_title( '', '', false );
if ( $post_title ) {
$out .= "<span class='microblog-widget-post-title'>"
. $post_title
. " </span>";
}
$out .= "<span class='microblog-widget-post-content'>";
if ( $use_excerpt ) {
add_filter('excerpt_more', 'micropost_excerpt_more');
$out .= get_the_excerpt();
remove_filter('excerpt_more', 'micropost_excerpt_more');
} else {
$out .= $post->post_content;
}
$out .= "</span>";
$out .= "<span lass='microblog-widget-commentlink'>";
$out .= " <a href='" . get_permalink() . "'>";
$out .= "<img width='14px' src='"
. site_url() . "/wp-includes/images/wlw/wp-comments.png'>";
$out .= "×" . get_comments_number();
$out .= '</a>';
$out .= "</span>\n";
$out .= "</li>\n";
}
$out .= "</ul>";
//print the widget for the sidebar
echo $before_widget;
echo $before_title;
echo $title;
if ($rss) {
echo ' <a href="' . get_site_url() . '/feed/?post_type=micropost" class="rss">';
echo '<img src="' . site_url() . '/wp-includes/images/rss.png"/>';
echo '</a>';
}
echo $after_title;
echo $out;
echo $after_widget;
// clean up
wp_reset_postdata();
}
}
/**
* Defines the visisble user name
* @param object $user_info
* @param string $wpam_user_name
* @since 3.1
*/
function get_username ($user_info, $wpam_user_name) {
// Nick name option
if ($wpam_user_name == 'nickname') {
return $user_info->nickname;
}
// User login option
if ($wpam_user_name == 'user_login') {
return $user_info->user_login;
}
// Full name option (First name and last name)
if ($wpam_user_name == 'full_name') {
return $user_info->first_name . ' ' . $user_info->last_name;
}
// Default
return $user_info->display_name;
}
/*
* Microblog shortcode code
*/
add_shortcode( 'microblog', 'microblog_shortcode' );
function microblog_shortcode($atts) {
global $post;
// 分页处理
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
// Arguments to the shortcode
extract( shortcode_atts( array(
'num' => '3',
'null_text' => '(none)',
'show_date' => '',
'date_format' => get_option('date_format'), // I recommend 'F j'
'use_excerpt' => '',
'q' => '',
), $atts ) );
if ( $q ) {
$q = str_replace ( "&", "&", $q );
}
/*
* query the database for tweets!
* query syntax:
* http://codex.wordpress.org/Class_Reference/WP_Query#Parameters
*/
$offset = ($paged-1)*$num;
$query .= "post_type=micropost&posts_per_page=" . $num."&offset=".$offset;
if ( $q ) {
$query .= "&" . $q;
}
//echo $query;
$query_results = new WP_Query($query);
if ( $query_results->post_count == 0 ) {
return "<p>" . wp_kses($null_text,array()) . "</p>\n";
}
$out = "<ul class='microblog-shortcode'>\n";
while ( $query_results->have_posts() ) {
$query_results->the_post();
$avatar = get_avatar( get_the_author_email(), '24');;
$out .= "<li> ".$avatar;
if ( $show_date) {
$out .= "<span class='microblog-shortcode-date'>"
. get_the_date($date_format)
. "</span>";
$out .= "<span class='microblog-shortcode-date-sep'>: </span>\n";
}
$post_title = the_title( '', '', false );
if ( $post_title ) {
$out .= "<span class='microblog-shortcode-post-title'>"
. $post_title
. " </span></br>";
}
$out .= "<span class='microblog-shortcode-post-content'></br>";
if ( $use_excerpt ) {
add_filter('excerpt_more', 'micropost_excerpt_more');
$out .= get_the_excerpt();
remove_filter('excerpt_more', 'micropost_excerpt_more');
} else {
$out .= $post->post_content;
}
$out .= "</span></br>";
$out .= "<span class='microblog-shortcode-commentlink'>评论:";
$out .= " <a href='" . get_permalink() . "'>";
$out .= "<img width='14px' src='"
. site_url() . "/wp-includes/images/wlw/wp-comments.png'>";
$out .= "×" . get_comments_number();
$out .= "</a>";
$out .= "</span>\n";
$out .= "</li>\n";
$out .= "<hr>\n";
}
$out .= "</ul>";
$args = array(
'post_type' => 'micropost',
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => 5,
'post_status' => array('publish', 'pending', 'draft'),
'paged' => $paged
);
$the_query = new WP_Query($args);
$total_pages = $the_query->max_num_pages;
//echo $total_pages;
if ($total_pages > 1){
$current_page = max(1, get_query_var('paged'));
//echo $current_page;
$out .= paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => '/page/%#%',
'current' => $current_page,
'total' => $total_pages,
'prev_text' => __('« prev'),
'next_text' => __('next »'),
));
}
// clean up
wp_reset_postdata();
return $out;
}
function micropost_excerpt_more($more) {
return ' ...';
}
/*
* Load our default style sheet
*/
add_action( 'wp_print_styles', 'microblog_enqueue_styles' );
function microblog_enqueue_styles() {
wp_register_style( 'simple-microblogging',
plugins_url('simple-microblogging.css', __FILE__) );
wp_enqueue_style( 'simple-microblogging' );
}
?>
修复分页将以下代码添加到主题的functions.php中:
function remove_page_from_query_string($query_string)
{
if (isset($query_string['name']) && $query_string['name'] == 'page' && isset($query_string['page'])) {
unset($query_string['name']);
// 'page' in the query_string looks like '/2', so i'm spliting it out
@list($delim, $page_index) = explode('/', $query_string['page']);
$query_string['paged'] = $page_index;
}
return $query_string;
}
// I will kill you if you remove this. I died two days for this line
add_filter('request', 'remove_page_from_query_string');
// following are code adapted from Custom Post Type Category Pagination Fix by jdantzer
function fix_category_pagination($qs){
if(isset($qs['category_name']) && isset($qs['paged'])){
$qs['post_type'] = get_post_types($args = array(
'public' => true,
'_builtin' => false
));
array_push($qs['post_type'],'post');
}
return $qs;
}
add_filter('request', 'fix_category_pagination');
修改后的插件稍晚点提供下载链接,修复分页和页面样式。具体效果点击这里查看!
插件原作者链接:http://boolesrings.org
原始代码地址:https://github.com/boolesrings/Simple-microblogging-wordpress-plugin





20 comments
memos也可以内嵌到WordPress的,主要是数据库独立的。
嗯嗯,是可以嵌入。不过memos的发表评论是必须要注册的吧?这个就和wp的有点区别了。所以就想着直接用wp的体系来弄了
php 问题可以问我啊
哈哈,你不早粗线呢,我还查了半天文档。不过wp的自定义类型文章分页确实恶心~~
看了一下,弄的不错!
就当是杜老师的表扬啦~~
怎么是个姐姐???
也可以是个哥哥~~
大佬,厉害,晚上好,啥时候处理下为何我的手机浏览器从来都不能保存评论信息
勾选了保存用户信息以便下次评论吗?是不是浏览器防跟踪或者插件的问题?
你那里能看到我的blog的图片吗?我这里不显示了。百度云加速貌似挂了:https://su.baidu.com
我以为文章没有图!!!
哈哈哈,怎么可能呢。是图片服务全部挂了~~
貌似还没恢复哈哈
是的 现在百度加速的主站可以访问了,我的还不行
我2010年那会儿玩博客的时候用的wp程序,折腾了几年也没什么成果,去年年底开始折腾hexo,尤其是ChatGPTD 的出现,帮我我大忙,很多细枝末节的小问题都能解释,甚至可以编写命令行,报错也迅速分析给出解决方案,比去百度、谷歌搜索「某某报错解决方案」高效多了~
wp的用户群体不小,但是国内的开发氛围相对来说还是差一些,多数是技术文章来回拷贝。相反国外的高质量文章还是相对来说多一些,google搜索问题搜英文解决问题的概率能提高80%以上,不要搜中文,哈哈哈,搜中文就→成了国内的那些文章了,没啥价值。
是的,国内技术类文章雷同率太高了
我现在都是在 QQ空间 吐槽 哈哈.
本来想博客改 QQ空间那样的, 懒的折腾了 就放弃了.
嗯嗯。在这个地方吐槽的好处是可以自然屏蔽熟人。嘿嘿