WordPress芸蝢拍凋誨蝣嘯hortcode隞亙Y蝺刻摩函凋誨蝣潭(shortcode button)
4 n1 b, G$ d E: } t! Z. o9 o1 ?0 s
wordpress Shortcode逕ordpress凋誨蝣澆賣臬肓ordpress 2.5祇憪鋡怠伐冽琿wordpress凋誨蝣澆臭誑撣豢嫣噶敹恍啣函楊頛舀蝡Y亙摰對凋誨蝣潛撣貉冽交唳蝡亙誨仿單閬閮乩頛桃Blog隢思犖嗡wordpress璅⊥踵嚗wordpress Shortcode撖衣曆pageW乩撟餌舐
# r. l1 r3 V( H隞乩 wordpress 凋誨蝣潛閰喟隞蝝孵脤具! X7 x: }- d0 r1 h+ S8 X6 m
! H4 u+ o8 `& r0 i- F# b5 e' ` B凋誨蝣潛 wordpress 雿輻券撣貊陛柴 靘憒唾憿舐內箸摰餈蝡 , 臭誑雿輻函蝔撘蝣潮隡潭潔 :0 G9 ^# ]. p) t4 o; T
甇文 , 臭誑閮剖銝訾批嗆蝡賊 :
' x5 @& w7 D3 b/ N甇文 , 銋臭誑箸蝡銵冽啣銝璅憿 :
% P3 n! ^, }+ c% s7 h- ~- [recent-posts posts="5"]Posts Heading[/recent-posts]
銴鋆賭誨蝣 ) r1 y2 E, i% O
$ K) o. r! M7 B: ~1. 蝪∪桃凋誨蝣
3 \- \$ \6 w, g8 S9 O: Y3 J1 A+ I祆摮貊蝚砌典 , 撱箇銝凋誨蝣潛蝔撘蝣 : v: G# \8 M1 A9 @/ o+ d+ a
閰脩摨撱箇舫撣貊陛桐蒂銝銝閬撣賊脤 PHP 亥 撱箇蝔憒銝 :
: ^$ j: F: w) h% w" y- 撱箇銝賣 , wordpress潛曄凋誨蝣潭澆急迨賣 ;
- 梯身蝵桐臭蝔曹閮餃凋誨蝣 ;
- 閮餃賣賊蝯針ordpressaction銝( @9 a/ J8 S% g' T7 [" M
. X; l6 m+ e+ y
祆摮豢蝔撘蝣澆湔交曉逆unction.php(批嗅==>憭閫==>銝駁蝺刻摩==>function.php) ,銋臭誑曉其鋡怠怠狄unction.php桃函php瑼獢銝准
+ M! ~ N$ S. U+ v1.1 撱箇餈賣
6 z% O3 x; A9 _2 d嗥潛曄凋誨蝣潛嚗摰鋡思蝔曹餈賣貊銝畾萎誨蝣潭隞選隞交撱箇銝賣賂敺鞈摨思葉脣啁蝡
/ F: u7 _! N$ z4 {9 |# e2 G- function recent_posts_function() {, P" |( {2 L; F+ }
- query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => 1));" `, |& }/ d# }( W$ m" {! ^
- if (have_posts()) :
4 I" z# |0 k4 \9 q7 k8 q( c# d - while (have_posts()) : the_post();! D3 K) n6 Y1 |4 P$ B M
- $return_string = '<a href="'.get_permalink().'">'.get_the_title().'</a>';& @7 W; v. Q$ A
- endwhile;
* C2 Z) M- c/ S9 v6 V- Z0 I - endif;
4 x: \* \6 ?2 x0 l" Q - wp_reset_query();
0 m7 C1 u, g: F8 n6 h: X% j! U - return $return_string;6 ~; j, H: ]9 |
- }
銴鋆賭誨蝣 憒銝蝷綽亥岷鞈摨恬脣啁蝡嚗銝西銝撣嗆亦摮銝脯澆閮餅荔餈賣訾蒂銝唬遙雿批捆嚗航銝摮銝脯5 x# o& S/ ]! K3 w
, R5 U, E0 L+ V% O/ J
) f5 ~/ c- \- o1.2 閮餃凋誨蝣
. C' @) s" `' Z6 m: S, E曉剁閮幃ordpress賣豢臭凋誨蝣潘- function register_shortcodes(){: a0 G/ N7 F; C! v
- add_shortcode('recent-posts', 'recent_posts_function');/ I2 T! {' L# Z4 j. z# l
- }
銴鋆賭誨蝣 嗅冽蝡批捆銝凋蝙函凋誨蝣
: F# L% W, _6 Z% Y& H* }撠芸澆 recent_posts_function() 賣賂閬蝣箔凋誨蝣潛摮臬臭嚗隞仿踹銴4 q$ s* P' Y' f D \/ J$ g& A
^- O" l6 y4 E* Q( B+ w W+ o+ F
1.3 Hook into WordPress
( Z4 T7 x* T2 @8 }8 i: X3 l' j* J% J, G# d9 p* H% [
箔賢瑁 recent_posts_function() 賣賂閬摰蝬摰 WordPress 憪文銝准
; X0 L; s3 q& b& K- v" X+ Z5 [- add_action( 'init', 'register_shortcodes');
銴鋆賭誨蝣
, o5 p2 \, n4 L' W' x1.4 皜祈岫凋誨蝣+ K% i: M" E/ M3 c
蝪∪桃凋誨蝣澆歇閮剖 , 曉券閬皜祈岫臬西賣迤撣詨瑁 臭誑撱箇唳蝡 ( 暹 ) , 撠銝隞蝣澆唳蝡批捆雿蝵 :2. 脤凋誨蝣 2.1 凋誨蝣澆 凋誨蝣潭舫撣豢敶 , 箏霈亙詨航摰游賬 閮剜敹閬憿舐內銝孵賊啁蝡 箔圈桃 , 閬蝯衣凋誨蝣潭摰嗡賊隞仿*蝷箸餈蝡詻 閬雿輻典拙賣 ,蝚砌臬批遣 wordpress shortcode _ atts ( ) 賢 , 摰冽嗥凋誨蝣澆惇扯砍啣惇抒其韏 , 銝血‵亙唳唾雿蝵柴 蝚砌 PHPextract() 賣 , 憿批蝢 , 摰箇凋誨蝣潔葉撅祆扼 撅餈 , 啣銝 $atts, 摰臭,敺銝剖臭誑唳閬蝡詻 亥岷鞈摨思敺摰貊桃蝡 , 銝血喳銝銵 : - function recent_posts_function($atts){% b3 |1 L5 P* T2 g6 x
- extract(shortcode_atts(array(2 ]& ^, {6 S, m0 E2 ^3 T- S
- 'posts' => 1,
- Z" N/ u$ C& Y8 y - ), $atts));
3 g( z) q, o1 Q# m% V# y6 [ -
9 E; j9 O( i: y. g$ e8 N - $return_string = '<ul>';0 ^5 ]" s1 U* ]! M8 T
- query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => $posts));
( c( u) D8 Y; j; R5 w2 q8 T8 }, |* a, j - if (have_posts()) :- h2 O2 j; [# z; O4 @! P
- while (have_posts()) : the_post();
w* q3 b5 e1 W8 x, r' x5 z - $return_string .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';4 E+ A$ H' f! W. h8 ?
- endwhile;2 e# ~4 o# z0 s. l# T6 L
- endif;: L( D% N- O9 e* I/ C
- $return_string .= '</ul>';; e1 Q2 o: N3 U
- 7 `4 m% ~3 L( P# V. d, M
- wp_reset_query();
) w T+ t- q6 C4 f - return $return_string;
8 x8 a$ R" R* _8 R$ J - }
銴鋆賭誨蝣 憒雿輻刻芣摰甇日賊 , 1 撠舫閮剖潦 臭誑亙撅祆找蝙凋誨蝣潭亙游詻 雿輻券撘瑕賣 , 撠勗臭誑摰隤輻冽唳蝡賊 :
! ]. z4 x+ J5 `3 @2.2 凋誨蝣潔葉憓摰
臭誑蝜潛游凋誨蝣潦啣銝鈭批捆雿箏 靘喲, 靘憒"唳蝡銵函璅憿" 亥甇斤桃 , 閬刻賣訾葉啣蝚砌$content , 銝行摰憿舐內典銵典Y銝 <h3> 璅蝪賭葉啁賣詨銝嚗 - function recent_posts_function($atts, $content = null) {
/ \% }- |$ \3 y; E3 c - extract(shortcode_atts(array(3 d& t+ k6 ^$ R" d( e& l: _
- 'posts' => 1,
^4 f( L% t- p2 ?7 d% { - ), $atts));
( b6 `/ B- V! c+ f -
@6 f# L4 P! X6 w4 _6 ^* F+ j% N - $return_string = '<h3>'.$content.'</h3>';) h" ?/ q& n* A( x- ^5 K3 {
- $return_string .= '<ul>';% M6 U- w; U3 y; k1 y
- query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => $posts));
. h7 g/ `" L; i6 Y, t9 v - if (have_posts()) :
/ J7 m/ E+ J) {' p - while (have_posts()) : the_post();( Z$ S- x6 E; X
- $return_string .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';( i) l+ S4 Y( Z
- endwhile;- U1 {7 a7 M/ W9 `1 U
- endif;* v, W# U0 W/ A7 i8 X
- $return_string .= '</ul>';* _) W5 O% |5 H/ p
-
# {7 B- N" }8 P; Q+ E - wp_reset_query();
T* ^8 i) g- h" y; j9 h - return $return_string;, _; u' K8 l2 @- }, o* K" V
- }
銴鋆賭誨蝣 蝔桃凋誨蝣潮隡潭潔HTML璅蝪踝- [recent-posts posts="5"]This is the list heading[/recent-posts]
銴鋆賭誨蝣 支蝡銵典鈭銝璅憿嚗園批捆銝銝蝷箔臭璅嚗# k- v. t) }! J+ g
3. 其遙雿唳寥*蝷箇凋誨蝣 3.1 典湧撠撌亙瑚葉雿輻函凋誨蝣 閮剜瘜銝 , 湧甈撠撌亙瑟臬蕭亦凋誨蝣潛嚗典臭誑撠甇斤撘蝣潭曉典撌亙 : e/ e) }+ s- I; T0 H$ X1 Y' m* a
臭誑∠其銵蝔撘蝣潔券賣 , 箔雿踹湧甈撠撌亙瑟舀渡凋誨蝣 , 啣隞乩蝔撘蝣 : - add_filter('widget_text', 'do_shortcode');
銴鋆賭誨蝣 曉其閬靽格嫣遙雿嗡唳 , 瑟, 湧甈撠甇蝣箏圈*蝷 0 A+ M* O$ l5 J8 T
璅嚗刻隢銝剖函凋誨蝣潘 - add_filter( 'comment_text', 'do_shortcode' );
銴鋆賭誨蝣 冽閬銝剖函凋誨蝣潘- add_filter( 'the_excerpt', 'do_shortcode');
銴鋆賭誨蝣 4. TinyMCE蝺刻摩典凋誨蝣潭
) S: {1 ~! J8 v! C6 Z, S7 K" p, C1 {6 r! r1 H
嗥凋誨蝣澆臭誑嫣噶箸蝡憓批捆嚗雿舫撠潭桅冽嗡隤芸航賡舀暺銴嚗撠文嗆舐嗅豢頛憭憭批貊冽嗅潮HTML隞蝣潔蒂銝嚗嗉閬雿輻函凋誨蝣潘隞敹閮雿琿隤瘜賂箏喃蝙臭撠撠隤瘜航炊嚗賢航賢湔喃啁蝯閬閫瘙粹嚗臭誑蝯 TinyMCE蝺刻摩典銝嚗雿輻冽嗅臭誑蝪∪桃暺靘憓凋誨蝣潦撱箇拙甇仿嚗 - 箸迨撱箇銝 JS 瑼獢
- 閮餃JS隞
0 X9 @ m6 R! l! K. d0 w 7 \- T: Z1 A3 ]/ \
4.1 JS隞嗡撱箇JS隞嗆舫 TinyMCE API 靘閮餃 TinyMCE 隞嗥其蜓憿 js 桅銝(/wp-content/themes/雿銝駁蝔/js/)撱箇 recent-posts.js 嚗銝西票脣颱Y隞蝣潘閬瑼(/wp-content/themes/雿銝駁蝔/js/recentpostsbutton.png)銋曉典銝桅嚗嚗 - (function() {3 b# q" \. W# P
- tinymce.create('tinymce.plugins.recentposts', {* F; A$ E+ e) \: [$ g
- init : function(ed, url) {) Q/ M* _! t$ B# E5 `$ n
- ed.addButton('recentposts', {
9 ?7 ?3 U1 C, y5 G S - title : 'Recent posts',
$ |. |7 L! C' s, S% S. k+ J- g - image : url+'/recentpostsbutton.png',5 Q9 J" _! p$ A+ d* O$ s7 n
- onclick : function() {( g" h# F' p g
- var posts = prompt("蝡賊", "1");
" w1 {. G% I4 K# w% B - var text = prompt("隢憛怠亙銵冽憿", "唳蝡");4 N1 v# a$ A, G5 {$ O
-
/ s& A6 W$ @, s$ v - if (text != null && text != ''){
: L! J0 Y; M) b0 E M - if (posts != null && posts != '')% o3 I3 _$ t5 {9 N$ Y4 F
- ed.execCommand('mceInsertContent', false, '[recent-posts posts="'+posts+'"]'+text+'[/recent-posts]');
9 [( I0 t( y5 R - else Y% I! y" A, F& X: ~
- ed.execCommand('mceInsertContent', false, '[recent-posts]'+text+'[/recent-posts]');+ O2 M7 p! [3 ?5 n
- }4 m6 [( P4 U* I0 O# [
- else{
& L3 Q' r& a. ^6 U/ p - if (posts != null && posts != '')
- K! u% r, k* A* U1 j! u) J - ed.execCommand('mceInsertContent', false, '[recent-posts posts="'+posts+'"]');/ x# o5 g9 D. ~5 V2 m
- else; m2 K- J8 g0 u4 Y$ `3 O
- ed.execCommand('mceInsertContent', false, '[recent-posts]');
& n/ B, F7 r" y! d9 g% q3 }+ f - }
$ i: V& c+ }( }( B7 { - }& k" a8 Y8 ~( a% \
- });& I! X- D3 Q" l. ^; J
- },2 C4 T9 i. Z {( q" G3 Q3 X$ m
- createControl : function(n, cm) {
4 y" D+ u2 s) b8 S& y - return null;" W4 x, l# x* \5 ]0 G; j, ?; I
- },
% v; @# W& {; u - getInfo : function() { S0 ~' T$ P5 V
- return {, ]& I$ U* y ]; d/ {; y
- longname : "Recent Posts",! N! K/ o" m2 l
- author : 'Specs',
; b/ r7 m3 L3 X! R - authorurl : 'http://9iphp.com',5 H g8 }. `/ ~; }2 ~* u
- infourl : 'http://9iphp.com/opensystem/wordpress/1094.html'," h0 {% f0 x) M! w. i
- version : "1.0") C# k8 T/ r9 P5 Y7 s
- };4 b# w& Y, L" s( H( ]# o( Q0 E
- }
, \: U7 M9 t6 v# m - });/ L+ X; ` J# T3 P- e
- tinymce.PluginManager.add('recentposts', tinymce.plugins.recentposts);
+ a! z0 L) ^4 R/ u* @7 X - })();
銴鋆賭誨蝣 澆 tinymce.create() 撱箇鈭銝隞嗚隞蝣潔葉閬 init() 賣賂摰蝢拐銝摮嚗銝icon隞嗅 onclick() 鈭隞嗉蝔摨 onclick() 賣貊抵嚗靘摨敶箏拙撠閰望霈冽嗉撓蝡賊銵冽憿拙賂嗅寞冽嗉撓伐凋誨蝣潭亙啁楊頛臬其葉 敺嚗TinyMCE隞園 add() 賣詨 PluginManager曉冽撌脩游鈭 [recent-posts] 凋誨蝣澆訖ordpress銝准
; ?: Y+ ~3 f4 `: p5 ?2 N9 ~
4.2 閮餃TinyMCE隞. d) l3 O: Y' G# H& l
8 N2 L: t3 c- W1 a" H
嗆典撱箇JS 瑼 , 曉券閬閮餃摰凋誨蝣潭 甇斗撱箇鈭拙賣訾蒂摰蝜怎喲拍嗥 wordpress 瞈曉其葉 蝚砌怠 register_button() 賣豢凋誨蝣澆唳銝哨函暹唳銋憓脩 - function register_button( $buttons ) {# K+ Z& J7 }) d3 C
- array_push( $buttons, "|", "recentposts" );4 _/ Y" o; Z p& \0 N) M% ?
- return $buttons;
: g3 c- z! G% l, P% h2 ~ - }
銴鋆賭誨蝣 蝚砌賣 add_plugin() 摰JS隞嗥頝臬隞嗅; D* |7 c, v6 h+ D$ G
- function add_plugin( $plugin_array ) {
! p9 l# C# A3 O+ A - $plugin_array['recentposts'] = get_template_directory_uri() . '/js/recent-posts.js';
( @+ C! `/ M9 _9 { - return $plugin_array;. V/ s% Q1 e0 b5 t
- }
銴鋆賭誨蝣 銝銝甇交臬怠W拙賣貊瞈曉具register_button() 賣賊蝯 mce_buttons 瞈曉剁函楊頛臬刻交隞嗥瑁嚗 add_plugin() 賣賊蝯 mce_external_plugins 瞈曉剁嗉交瑁
- F& ?% }- P4 p+ T7 x% J- function my_recent_posts_button() {
0 u1 v$ d1 E0 `9 F! B0 h- i$ W V - if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') ) {
4 Q# h+ \* V3 [5 P3 R$ z - return;
6 I8 w, c, |. B3 H% u2 s - }' R5 F/ H# a: U- |
- 6 \: P. U5 i* a d1 Y1 b6 G
- if ( get_user_option('rich_editing') == 'true' ) {7 v4 ~' q# Z9 W) b/ ?1 j
- add_filter( 'mce_external_plugins', 'add_plugin' );
. S& K" K- K) E$ n$ O - add_filter( 'mce_buttons', 'register_button' );. y( {. ^( U, X( [' `* [
- }
, b9 I1 r8 i3 k8 p* i* c8 [ - }
銴鋆賭誨蝣 嗥冽嗆撠蝡航蝺刻摩其葉蝺刻摩甈嚗Y賣訾瑁 L! A9 M; R. O G0 p' H
敺賣詨曉訖ordpress憪賣- add_action('init', 'my_recent_posts_button');
銴鋆賭誨蝣
0 _, B( K, m- D" ]4.3 冽- Y8 n& C) }6 m1 O, s V
箔皜祈岫蝔撘蝣潭臬行迤蝣綽銝蝭啁蝡嚗銝摰蝢拍臭臬歇蝬箇曉函洵銝銵怠偏鈭嚗憒銝蝷綽
* r9 _/ q( O4 Q; _* B+ I$ U 暺嚗敶箏閰望霈頛詨交蝡賊嚗
( L: B; j* |! L- h 頛詨亙暺蝣箏敺嚗敶箇洵鈭撠閰望嚗霈頛詨亙銵函璅憿嚗
5 k# K7 v+ S3 n5 k 貊蝛箇閰梧銝箇曉冽敺隞蝣潔葉敺嚗凋誨蝣潭啣啁楊頛臬其葉嚗
7 G( @! n' |9 `; e" w- n
唳迨撠勗之鈭唾憓嗡賜凋誨蝣澆臭誑銝Y摮嚗憒瘜株ˊ銝銝嚗訾縑臭誑鋆賭箇泵雿瘙凋誨蝣澆 |
|