WordPress‘加精’和‘REBUZZ’的代码研究

近来不断的化时间于并無甚么建樹的事情上,有些頹廢,不過部落格方面,仍然是在折騰之中,一來是手賤,看到新功能就覺得不試驗不爽,二來是怕腦子真的生銹(或者說是生銹得少點)。所以各種各樣的探索不斷翻來覆去的搞搞,實在也是性格所致。如果期間導致頁面崩潰,我只好給看官們說聲抱歉。

另外,一直想動筆的與某自裁未遂女交談感想,由于本人心境已經陰郁不堪,現在不想陰上加陰,暫時就不貼了。

導航:

1、加精功能

2、rebuzz功能(發布到buzz)


加精功能

在一般的印象中,這是論壇(Diszue)的功能,但是由于鄙博有一位作者十分著迷此道,一定要我弄個出來,所以自“回帖可見”功能之后。本人又讓wordpress往論壇化(還是水區論壇化)的大方向大大的邁了一步。

素材準備

一個“精”字能很好的體現本博客的低俗本質。

isbest 再搞個小貔貅圖形來做一般鏈接的加精標記

tuijian3

代碼開源

首頁形態

改動的目標是把首頁或者文章single頁的標題改成類似于image 這樣的模子。

思路自然是給這個文字加上一個class=”jing”的標簽再用css定義。

有思路就有辦法,鄙人很挫的手段如下:

找到決定single.php的頁面

主題(theme)這個文件夾中找到你現在用的主題,比如鄙人這個“stationpro”(70刀的付費主題啊,有興趣下載的看

wp-content/themes/stationpro/single.php里面,可以看到,實際產生single頁面的是library/_posts.php文件

各種不同的主題往往都不同,這是一個尋找的辦法。

插入標記代碼

于其中找<a href=”<?php the_permalink(); ?>這一項,要是接在一個<h2>標記之后的,應該就是定義標題的那個模塊無誤了。

插入代碼,使前后看起來像是如此。

<div class="post-title <?php if (get_post_meta($post->ID, "jing", true)) { ?>jing<?php } ?>">
<h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
</div>

紅字處是要加的重要代碼

代碼想必不用我多嘴解釋了吧,很簡單的。就是探查下文章的meta是不是有個“jing”這樣的玩意,然后決定是不是給標題加個class=“jing”的框框。

css定義
.jing h2{background:url("http://minyueguo.com/img/jinghua.gif") no-repeat scroll left top transparent;
padding-left:36px;}
.jing h2 a{color:#C30;}
.widget ul li .jing{color:#C30;background:url("
http://minyueguo.com/img/tuijian3.gif") no-repeat scroll left top transparent;
padding-left:22px;}
如果連css加在哪里都要解釋,您也不必看下去了……

小小進階

看過前面關于一個all in one插件的文章http://0rz.tw/BfQgP『簡易插件版安裝http://0rz.tw/7ulzi』的朋友都會想,這個框框只體現到一處未免也太荒廢了吧

所以我想讓它體現到這個ajax框架另外還有系統中所有的”最新文章”list里面去.

這個手術就動得比較大了,先得改動系統的function.

系統功能(function)
function get_jing_link($url, $text, $format = 'html', $before = '', $after = '',$pid) {
$text = wptexturize($text);
$title_text = esc_attr($text);
$url = esc_url($url);
if (get_post_meta($pid, "jing", true)) {
$highlight_titile =jing;
} else $highlight_titile =none;
if ('link' == $format)
$link_html = "t<link rel='archives' title='$title_text' href='$url' />n";
elseif ('option' == $format)
$link_html = "t<option value='$url'>$before $text $after</option>n";
elseif ('html' == $format)
$link_html = "t<li>$before<a href='$url' title='$title_text' class='$highlight_titile $pid'>$text</a>$after</li>n";
else // custom
$link_html = "t$before<a href='$url' title='$title_text'>$text</a>$aftern";
$link_html = apply_filters( "get_archives_link", $link_html );
return $link_html;
}
這段代碼毫無特異之處,反正得貼到于『wp-includes』文件夾下面的『general-template.php』之內。原文基本是抄襲原來的『get_archives_link』標記,就加了點點自己的玩意,PS:等到wp版本一升級,這個又得重新設定了,我也在努力尋求替代辦法。

然后

找到wp_get_archives這一欄,把『elseif ( ( ‘postbypost’ == $type )』這一行底下的『get_archives_link』改成『get_jing_link

之上一些$项目处 插入 $pid  = $arcresult->ID;

然后把jing_link改成这样:$output .= get_jing_link($url, $text, $format, $before, $after, $pid);

之后,使用get_archives的php語法,就能得到<li><a class="jing/none ****" title="周一请吃人" href="×××××" style="padding-left: 22px;">***</a></li>

這樣的一個list。也就可以用css去定義加精文章在“最新文章”這樣的條目中的形態了。

再動動popular post這個插件的功能

plugins/wordpress-popular-posts/wordpress-popular-posts.php這個文件

找到底下這行代碼($this->qTrans) ? $tit = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($wppost->post_title) : $tit = $wppost->post_title;

插入一些東西,形成下面這個樣子。

($this->qTrans) ? $tit = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($wppost->post_title) : $tit = $wppost->post_title;
$pid=$wppost->ID;
$tit = stripslashes($tit);
if (get_post_meta($pid, "jing", true)) {
$h_titile =jing;

} else $h_titile =none;
if ( $instance['shorten_title']['active'] && (strlen($tit) > $instance['shorten_title']['length'])) {
$tit = mb_substr($tit, 0, $instance['shorten_title']['length'], 'UTF-8') . "...";
}
$post_title = "<span class="wpp-post-title $h_titile">" . $tit . "</span>";

css剛剛已經給出過了,就不再列

代碼解釋
meta是什么

簡單說來,這是為了方便愛折騰之人,偉大的wordpress之父matt先生首創的在post之內加上一個特殊標記的模式,通過某些標記,可以決定讓文章發布的同時做什么或者不做什么,實現各種各樣的功能。

image 在編輯文章的時候,底下的這個就是所謂的meta。

如何加精?

這是編輯人員才有的權限,簡單來說,按我給從辦法,就是加一條名稱為“jing”而數值任意『但是不能是中文』的‘meta’

rebuzz功能

由于tweetmeme在支國被封,鄙人不愿給這些網友帶來瀏覽上的麻煩,就不把retweet的功能放出來了,只搞個rebuzz。

官方給出的js和整個功能代碼

Google Buzz Button

<script src="http://cdn.buzrr.com/js/button.js" type="text/javascript"></script>

Google Buzz Button

<script type="text/javascript"> var __buzrr_style="small_blue_count_text_icon"; </script> <script src="http://cdn.buzrr.com/js/button.js" type="text/javascript"></script>

Google Buzz Button

<script type="text/javascript"> var __buzrr_style="small_blue_3"; </script> <script src="http://cdn.buzrr.com/js/button.js" type="text/javascript"></script>

更多Google Buzz按鈕樣式,可以參考Buzrr Button頁面。

然而這個東西加在post正文中任何一處都會造成一個問題:

  1. 首頁會顯示“首頁被rebuzz的次數”
  2. 文章載入變慢。

這兩點視您放這個標記的位置而異,像我一樣放文章右上角的,就非常要注意。

克服首頁顯示問題

使用php標記

<?php if (is_single()) { ?>
<div style="float: right; margin: 0px;">
<script src="http://cdn.buzrr.com/js/button.js" type="text/javascript"></script><script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div>
<?php }
?>

藍色部分自己根據需要去替代,還有這個在左在右,也隨您的意思。

先載入文章再載入它

首先在您愿望插入的地方插入標記

<div id="buzzer" style="float: left; margin: 0px;">
</div>

然后再于你希望它之前的東西都出現后再出現buzz標記的的地方加上底下這段javascript

『最好是插在決定single的那個php的endif之前』

<script type="text/javascript">
function buzzerbox() {
var _url = window.location.href;
_url = _url.replace(/((?:?|&)?fbc_receiver=.+)?(?:#.*)?$/, "");
var lns = document.getElementsByTagName("link");
for (var idx = 0; idx < lns.length; idx++) {
var at = lns[idx].attributes;
if(at["rel"].value == "canonical" && at["href"].value != "" && at["href"].value) {
_url = at["href"].value; break;
}
}
var _t = document.title;
var u = escape((typeof __external_use_page_url == "string") ? __external_use_page_url : _url);
var t = escape((typeof __external_use_page_title == "string") ? __external_use_page_title : _t);
var s = escape((typeof __external_use_page_summary == "string") ? __external_use_page_summary : "");
var c = (typeof __buzrr_category == "string") ? escape(__buzrr_category) : "";
var bu = (typeof __buzrr_url == "string" )? __buzrr_url : "";
var st = escape((typeof __buzrr_style == "string") ? __buzrr_style : "n");
var src = "
http://buzrr.com/button.php";
if (bu != "" ) {src = bu;}
u = u.replace(/+/g,"%2b");
src += "?url=" + u;
if (t != "") {src += "&title="+t;}
if (c != "") {src += "&cat="+t;}
src += "&style="+st;
if (s != "") {src += "&snippet=" + s }
var h = 55;var w = 61;
if (st.indexOf("small_") == 0) {w = 100;h = 20;}
document.getElementById("buzzer").innerHTML= '<iframe src="' + src + '" height="' + h + '" width="' + w + '" frameborder="0" scrolling="no"></iframe>';
}
buzzerbox();
</script>

用這個得注意首頁隱藏

我就是要在首頁顯示!

把Javascript換成底下這個

<script type="text/javascript">
function buzzerbox() {
var u = '<?php the_permalink() ?>';
var t = '<?php the_title() ?>';
var s = escape((typeof __external_use_page_summary == "string") ? __external_use_page_summary : "");
var c = (typeof __buzrr_category == "string") ? escape(__buzrr_category) : "";
var bu = (typeof __buzrr_url == "string" )? __buzrr_url : "";
var st = escape((typeof __buzrr_style == "string") ? __buzrr_style : "n");
var src = "
http://buzrr.com/button.php";
if (bu != "" ) {src = bu;}
u = u.replace(/+/g,"%2b");
src += "?url=" + u;
if (t != "") {src += "&title="+t;}
if (c != "") {src += "&cat="+t;}
src += "&style="+st;
if (s != "") {src += "&snippet=" + s }
var h = 55;var w = 61;
if (st.indexOf("small_") == 0) {w = 100;h = 20;}
document.getElementById("buzzer-<?php the_ID() ?>").innerHTML= '<iframe src="' + src + '" height="' + h + '" width="' + w + '" frameborder="0" scrolling="no"></iframe>';
}
buzzerbox();
</script>

標記換成

<div id="buzzer-<?php the_ID() ?>" style="float: right; margin: 0px;">
</div>

代碼解釋

javascript部分都是從官方的里面變過來的,也都是@chiidea的功勞,就不多說了。

標記呢主要是看id部分,這段Java的效果在于,把所有id=’buzz’的東西全部加上一個iframe框,用來顯示rebuzz標記。各位也算是知者固知之吧,總的不好解釋。

3 thoughts on “WordPress‘加精’和‘REBUZZ’的代码研究

Comments are closed.

Proudly powered by WordPress | Theme: Journey Blog by Crimson Themes.