过期域名预定抢注

 找回密碼
 免费注册

關於通過Mysql語句發佈文章選擇Category問題

  [複製鏈接]
發表於 2013-12-3 15:22:35 | 顯示全部樓層 |閱讀模式
通過wp-admin後台或者Windows Live Write發佈文章仍然麻煩,於是自己使用PHP程序直接將文章插入到網站數據庫中,這樣的話數據寫入速度要快N倍,適合大量文章發佈或多站同時維護。但WP程序的數據庫文章表wp-posts和Category關係表是分開的,有沒有這樣做過的,怎麼在插入文章的同時,選擇所屬的分類。# y- @5 U$ @3 s' @! r

7 L3 c/ Y( ?3 b$ R$ T7 m- [) v) Q5 `, n  Q
發表於 2013-12-3 15:42:52 | 顯示全部樓層
在wp_term_relationships表插入之前文章的ID(mysql_insert_id)以及類別ID- R5 Q1 p2 w8 Z5 y2 f& ^) k
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-12-3 15:47:50 | 顯示全部樓層
本帖最後由 Seanhere 於 2013-12-3 15:50 編輯 . w( @$ R2 t' o) C
mattfox 發表於 2013-12-3 15:42
: m, l& u% O. J1 Y% S3 `$ X) A在wp_term_relationships表插入之前文章的ID(mysql_insert_id)以及類別ID

3 H+ \; y2 K# X3 \是的,要先讀取已發佈文章的ID,並且還要知道該ID代表文章所屬category,才能作此操作,量大之後挺麻煩的
. F$ P3 h% _. u+ t3 Q
. D4 ^0 h& S! {8 @4 q3 k& ~3 B% }! [  z2 Z* G; j
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-3 17:01:07 | 顯示全部樓層
先讀取id,然後同時寫2條sql分別插入2個表,這個不難吧! n( u; J0 ]' }! g2 w! n

, z/ G: f) t$ x+ F0 ~( v1 v* C你可以把寫好的代碼放上來,我幫你改3 J' H1 h: `  k" I) V4 _( O) X
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-3 19:23:03 | 顯示全部樓層
共享一下吧,最近好像也有這個需要.. Q. G: l5 ]8 O. e1 l
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-3 21:08:18 | 顯示全部樓層
同求一個啊,這個是主要功能速度會提高很多, m( G. Z& H: B
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-12-3 21:33:57 | 顯示全部樓層
本帖最後由 Seanhere 於 2013-12-3 21:52 編輯 + s* L9 s, ~2 M( b4 |
* b6 X. n+ h9 O7 [0 a* q( g
這個方法是用來更新用來做外鏈的站群的,站群定期更新。由於站群量越來越大,更新一遍很費時間,但又不願買市場上的站群軟件。所以才想出了這種方法。
$ b& S4 G- l' H4 a. c自己雖有一些編程基礎,但沒學過php,是邊查語法邊寫的,程序可能有些笨拙,高手不要見笑。
  1. <?php
    ! G) s1 z$ }+ a5 J
  2. //數據庫參數/ ~  G4 x/ q9 {' u$ f, ~( R
  3. $dbuser='';, j+ E% D. a: q* A+ R6 j
  4. $dbpwd='';
      j1 v# R$ Y1 L5 g
  5. $dbname='';* K, f+ `* N# D+ N) K( c
  6. $dbhost=';9 X9 h# ^. y0 q& u) Y( @" |- o
  7. $dbtable='';
    : u+ s& ?3 k& z0 t) l& p

  8. 5 ]. B: t. h6 ]3 r; |, e& Z$ o9 \0 z2 i
  9. //設置讀取路徑
    6 ~& P+ }4 {# N- `$ |1 h
  10. $rdcontent='xxxx.txt';  b3 c5 F. k9 ?/ g7 k' M% y
  11. $rdtitle='xxxxtitle.txt';2 Y$ D2 _' m8 F- i, e: a
  12. $rdlink='xxxxlink.txt';: ^: v( f& M2 A. S! o& u% s* m% v

  13. $ N" ]. }0 @0 ~& D
  14. //讀取插入鏈接,並設置發佈概率, `) S/ n8 b2 W2 k2 x( X0 |1 d9 y
  15. function gen_link($rdlink){" K) _- h; X8 S- k" i
  16.         $data2 = file($rdlink);' ^# M9 @: D+ q2 t* e8 k
  17.         $num2 = count($data2);
    : I8 m$ j$ S; p5 Y8 p% }
  18.         $id2= mt_rand(0,$num2-1);
    5 X5 e$ u! g3 G* G1 W
  19.         $random= mt_rand(0,10);8 T4 U: V# @- X3 _; F! A. Y
  20.         if($random<5)+ Q$ b( H5 `: ~$ D) W; Y. H3 C
  21.                 $link= trim($data2[$id2]);" k1 }" P2 d' f" m
  22.         else
    $ }  E% d" S+ x+ ]4 o) R7 }# K( x
  23.                 $link="";$ Q) o' Z( f8 |& ?: h5 y$ ]
  24.         return $link;
    # S- h1 Q0 H; w3 {7 g
  25. }
    5 n- o9 L7 D% h2 R. Q1 |  ~" Y6 N

  26. 5 |- H: a# l; [* H' g  q" B
  27. //生成文章
    0 i! O( B# T+ A/ t4 ], C
  28. $str = "";
    0 L3 \9 K; }  h' P
  29. $title = "";" y' |. j8 Z6 K, O* Z* O
  30. 1 l5 d3 z- Q9 m! r, h1 P* l% ~
  31. $data2 = file($rdtitle);
    - ^& q6 J% U3 j+ L
  32. $num2 = count($data2);
    1 R  K/ @: `& d3 N
  33. $id2 = mt_rand(0,$num2-1);3 n5 l& _/ Q" o
  34. $title = $data2[$id2];
    7 ?5 a# J  w5 s1 ^
  35. / C8 R' @7 r7 V) {, e7 U
  36. $data = file($rdcontent);6 W- g) \; F0 J3 M. R7 Z* l
  37. $num = count($data);
    + g2 a! k) _9 y) n0 Q
  38. , [2 {0 M/ I2 U* z% g) D) Z
  39. for($i=0;$i<25;$i++){
    7 ~! B  }" p. M, O
  40.         $temp=" ";
    + b1 p! o3 b5 \, |: v
  41.         if(($i%5)==0)
    6 x$ M( g; ]- C: F. A0 M9 ^5 ]. ?
  42.                 $temp="
    4 ]7 }9 l, }; X
  43. \n";4 g0 s& }8 ?3 P: {0 D/ }
  44.         elseif(($i==7)|($i==21)){. ~% o  e$ N% F( p0 h$ K
  45.                 $links=gen_link($rdlink);' [. v* a' J+ g
  46.                 $str=$str." ".$links." ";
    ) I! s% C# ?$ Z4 J. h% Z9 Q5 j5 q, y
  47.         }
    / X; w6 [2 Y1 F
  48.         $id = mt_rand(0, $num-1);8 n4 i; q" b" _* U7 ?
  49.         $line = trim($data[$id]);
    / h3 ^, V& p. a- G. W9 ]
  50.         $str=$str.$temp.$line;5 v& D2 B2 H! ^# c. P
  51. }7 B# q- v3 x) {0 d8 f5 D' J7 Z+ `8 T
  52. ' r) e8 j; T' K; B1 R
  53. //生成slug0 X* H- f/ T! _
  54. function generate_slug($len){
    6 [' P& U% G  M  z
  55.         $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
      @' Q, W$ Y" V) v
  56.         $slug="";
      U% h. d; |" h$ s- t
  57.         for($j=0;$j<$len;$j++){9 |& \: T, F+ o1 J' s. X6 R$ e$ b
  58.                 $slug .= $chars[ mt_rand(0, strlen($chars) - 1) ];
    1 W) ]3 }& ^. {, n3 @2 {! I
  59.         }
    + n2 |5 y  P) |$ t) C
  60.         return $slug;
    + m6 x$ ^( V% i' p# M; }
  61. }
    2 r6 N8 p- Y8 q
  62. $slug = generate_slug(17);* ~5 s+ q$ @2 M

  63. * C, a. i: s! l" X( V4 U: i: Z7 j
  64. //獲取發佈時間: }  \$ E! k( u  e! m8 F' f( Z: Z. {
  65. $datetime= date("Y-m-d H:i:s");, v( ?- c1 ?; |' Y

  66. ; f6 b# b% i$ d" \/ @. E' n' W& Y
  67. $sql= "INSERT INTO `$dbtable` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES (NULL, '1', '$datetime', '$datetime','$str','$title', '', 'publish', 'open', 'open', '', '$slug', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0', '', '0', 'post', '', '0')";( X9 y& ?  P/ X+ u. c8 M
  68. 5 u2 B3 L% E+ A" t' H/ j
  69. //連接數據庫並處理數據
    $ \. `5 ^: G; O8 u* `
  70. $con = mysql_connect($dbhost,$dbuser,$dbpwd);0 U' ~# e, {* L3 {
  71. if(!$con){
    8 I+ x5 E$ A- }4 x) Q5 d
  72.         die('Failed to connect to database! '.mysql_error());1 r3 z' C' c; K
  73. }else0 i& \; |6 Z$ I2 Q1 u
  74.         echo "Suscess to connect to database!6 W: v4 k2 q' U, Z" ~& W
  75. \n";, A0 B- i9 ~" q9 M
  76. % J" R0 e# r1 R* y3 N, J* ]4 m
  77. mysql_select_db($dbname,$con);  U7 O$ p6 h! m4 D* J7 v1 Z! R% O$ h' y
  78. 6 m9 U8 Z. R& x* M. |$ M6 t2 O' u2 o
  79. $result=mysql_query($sql);% ]. o5 e5 s4 a+ W. z2 L/ O
  80. ( g& g, b( j6 ^* F; K
  81. mysql_close($con);
    / R2 Q: B9 |' I# D# b5 @4 X% E

  82. / z6 G% s" T1 G4 `. o
  83. if(!$result){  o, c2 S8 r# P3 S, _! Z
  84.         echo $result;* Z" h+ U' _( S) H9 J& T
  85.         die('Failed to post article! '.mysql_error());
    + F- L7 w0 E& X. }. F- ~
  86. }else
    2 u) S6 e+ A/ y& T
  87.         echo "Suscess to post article!\n";( @6 H: c+ r. r
  88. 7 Y' v8 w7 u7 E# w. U! r3 z
  89. echo $dbname." is done";
    $ h8 j( p* v5 e
  90. . ?! e: ]; f7 w  y7 [2 @# a
  91. ?>
複製代碼
文章插入到wp-posts表中,文章id自動生成,在插入時是未知的,所以就在插入文章的同時無法再將id 插入到wp_term_relationship , 這樣的結果是發佈的文章是無分類的。所以不太明白關於「讀取id」的方法,請指教。( }, S$ M5 j: \4 H$ F2 F$ Q$ q0 a4 U6 u

/ M- I* L5 p# ?5 L文章的slug我用了隨機生成的方法,其實最好的方法應該是用文章標題來轉化,但那樣麻煩些懶得費事。文章作者默認為1,就是管理員。文章內容我用了Yoo版的方法:http://www.advertcn.com/thread-12629-1-1.html。能保證原創性,但損失了可讀性,由於是做外鏈用的,應該關係不大。
! K4 o& W4 b5 F5 j, m* h/ u4 D2 v1 a) K) w  S
如果想將文件夾下的文章隨機發佈的話,可以先將文件夾內文件遍歷,然後隨機抽取發佈的方法。
8 ^5 w$ R' O, R1 T- _3 @* j這樣做成php頁面,某站目錄下,使用VPS的Crontab 用curl語法定時向該url發出請求,就可自動發佈一篇文章,如果想要多篇的話,可以使用循環。
$ H% d" u5 t& V+ W3 d  w  R
9 ^- _) s: C, O( w- T; |( I1 E  e6 c4 W# M. Z% x4 s7 E

) h5 L! a5 Y4 |: h# J
2 g% v) S2 E, @: M3 v7 `) ~0 @
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-3 22:37:54 | 顯示全部樓層
  1. , U8 m0 h; H$ j, r5 m, j
  2. <?php
    : A& f0 N1 r7 P* c, F5 x
  3. //數據庫參數( n9 W5 B6 V. k) t4 T5 W
  4. $$dbuser='';6 m" C% E3 Q' G
  5. $$dbpwd='';3 Q* w' o, ^, o! P5 |
  6. $$dbname='';9 x! o8 M, a0 T( s0 U* S
  7. $$dbhost='';
    / F. G' L" ?$ G
  8. $$dbtable='';
    " V' s, ?! ]$ y

  9. , L7 B; U: I+ S/ s4 a
  10. //設置讀取路徑4 s! \+ ]+ Q' V0 t, r2 q
  11. $$rdcontent='xxxx.txt';
    ; r, U1 w* y9 {/ ?. {
  12. $$rdtitle='xxxxtitle.txt';
    ' I8 L8 Q: M  c& `$ D% x; b
  13. $$rdlink='xxxxlink.txt';' L( i% G; T1 E5 B" z

  14. : Z' c( h$ |  q+ _/ z# r
  15. //讀取插入鏈接,並設置發佈概率" ~" y) B' v8 _& T& t8 S
  16. function gen_link($$rdlink){
    ) \& K. x, c% ~' W. A/ j7 J
  17.         $$data2 = file($$rdlink);4 R/ \6 X- b6 l  w) b- L
  18.         $$num2 = count($$data2);) L5 y3 ?8 b9 Y3 n- b& E% [
  19.         $$id2= mt_rand(0,$$num2-1);
    5 G7 G- [) s* W) b" E8 X
  20.         $$random= mt_rand(0,10);1 K4 K9 b) J! N7 ?2 J/ E
  21.         if($$random<5)* A- r: r8 v! V6 D$ R5 E" k
  22.                 $$link= trim($$data2[$$id2]);
    # Y4 {: S5 f8 {3 |' D, s
  23.         else
    ! [( r+ Y# b( Q0 x: M
  24.                 $$link="";
    & ^! s7 n- d( W% N% U- V# S+ J
  25.         return $$link;
    ! ?& F8 V' ?. r5 Z! U
  26. }2 k, \! T; r6 r& c& Y' @' v
  27. 2 o- }3 U3 K+ M$ I: a
  28. //生成文章
    ! j4 y0 a/ i4 ]* }
  29. $$str = "";. W- G  D" n4 O# G8 L
  30. $$title = "";
    & P# |% Z$ p7 Q3 ~) H

  31. ) \. h( i& n, ^4 U
  32. $$data2 = file($$rdtitle);& [1 M+ N6 P" a. |. s$ s
  33. $$num2 = count($$data2);
    # j& b; h; W- g0 a7 P
  34. $$id2 = mt_rand(0,$$num2-1);
    - X/ D  D! [4 w2 k) n
  35. $$title = $$data2[$$id2];, m& r. }9 N. ~7 Q- \  g7 K
  36. 1 c& \# M1 }* M! p! f; q
  37. $$data = file($$rdcontent);+ c1 x: e8 M+ h' ]3 K2 ?+ ?
  38. $$num = count($$data);4 E% [7 k0 I9 ~/ k; \& f$ y

  39. 8 b/ @  ?  {4 M% S! \: h: O& n
  40. for($$i=0;$$i<25;$$i++){
    ) C( j, L3 x3 f9 {6 \
  41.         $$temp=" ";
    5 l/ K; j- t& m8 y3 w+ Q  I3 n
  42.         if(($$i%5)==0)
    $ q& k4 [& R0 i6 h! w
  43.                 $$temp="  R; K; Y5 D7 M% T
  44. \n";( \# _+ x" P5 N2 ]
  45.         elseif(($$i==7)|($$i==21)){
    / Y8 C# K9 B* }
  46.                 $$links=gen_link($$rdlink);$ s) x+ R6 K0 g2 u  }' r
  47.                 $$str=$$str." ".$$links." ";
    $ [3 X1 k: X( e& n# @
  48.         }2 S  l6 @( _: L; G4 A) ~' [+ y- K* p
  49.         $$id = mt_rand(0, $$num-1);
    ' K1 h2 L- f- A; V
  50.         $$line = trim($$data[$$id]);4 x$ S7 F( r! T" w/ p) Q* V( [
  51.         $$str=$$str.$$temp.$$line;
    : m. Q& }5 S# j- [
  52. }- K1 v! L% U+ g1 s: x+ n

  53. $ I" p0 C% b3 a1 i; @4 v
  54. //生成slug
    / m0 X+ X  N1 ^% V4 @5 X
  55. function generate_slug($$len){
    . K! e1 p5 R  B' Y$ _0 G
  56.         $$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    ; B8 I2 v( K. C% |' j( a% t
  57.         $$slug="";0 A2 r' U$ X7 N! V: A- p
  58.         for($$j=0;$$j<$$len;$$j++){+ r$ W$ n4 @- O* H
  59.                 $$slug .= $$chars[ mt_rand(0, strlen($$chars) - 1) ];
    # S2 \( t' C: i( o( Z- u0 {
  60.         }
    . P) r9 T: m/ ]7 S, o
  61.         return $$slug;
    9 J( n6 I* B# J7 b1 W# ^3 P
  62. }
    ( D+ z. y+ g9 K5 k$ p9 y; \. l9 p. A
  63. $$slug = generate_slug(17);8 j9 E- M* t7 {$ [8 b- K
  64. : \$ S+ V* P7 v7 L; U
  65. //獲取發佈時間
    - M: I0 }: S! K; `# f
  66. $$datetime= date("Y-m-d H:i:s");6 D" _+ N! S3 H5 x- ?3 _

  67. 3 U2 h% ]; A; C3 f% D( V
  68. $$sql= "INSERT INTO `$$dbtable` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES (NULL, '1', '$$datetime', '$$datetime','$$str','$$title', '', 'publish', 'open', 'open', '', '$$slug', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0', '', '0', 'post', '', '0')";
    7 y0 g5 ~  r3 }0 W0 Y

  69. . F- X; |+ Y1 ~9 D; s
  70. //連接數據庫並處理數據
    # r2 C$ W- q! @7 o! _5 r
  71. $$con = mysql_connect($$dbhost,$$dbuser,$$dbpwd);; L: L, I4 J& k; f6 m. o/ v
  72. if(!$$con){
    8 z3 q6 B. q: i" x0 d+ m: E+ X5 Y
  73.         die('Failed to connect to database! '.mysql_error());
    ; v. S' x; m! R' d2 k
  74. }else* s% @; s+ k, k! H# Y$ T* S1 O
  75.         echo "Suscess to connect to database!
    0 g7 L. C- v: O% r8 F
  76. \n";
    $ W3 L1 |+ P4 L* Q4 k& |

  77. ! ]8 G8 o! v, u: V
  78. mysql_select_db($$dbname,$$con);
    & Y6 z2 ?' k: r+ z7 [" ~" I; S. P1 {

  79. * R7 Z1 z0 s4 H* \8 q
  80. $$result=mysql_query($$sql);5 a) B8 ]4 }; T3 ~! p. b8 O0 O5 `

  81. * [4 }/ Y% t! V; m

  82. 3 \. N8 N+ L: X4 x, Z
  83. //前面已經插入,獲取插入id
    # k) f1 P& A; t; I; P
  84. $$insert_id = mysql_insert_id();5 Z, `% ~9 a) S5 N! m. Z7 Y# r
  85. # Y- d% }. Q5 d5 B
  86. //繼續插入wp_term_relationship表
    ) {5 R( E7 M# O
  87. if($$insert_id > 0 ){4 e; @* X3 d/ P4 }: e
  88.         $$sql= "INSERT INTO `$$dbtable` (`object_id`, `term_taxonomy_id`, `term_order`) VALUES (NULL, '$$insert_id', NULL)";
    . c2 |5 k+ X. P6 O2 ]

  89. 2 _7 F. P  ~0 Y: Z+ P! U
  90.         $$result=mysql_query($$sql);
    $ K1 w$ ^7 Y$ ]: C/ e
  91. }
    & g2 ^  W. a! O$ x+ r
  92. //關閉數據庫連接1 g9 E: w8 D. e) z- v" i5 \
  93. mysql_close($$con);
    ! T! Y8 Q, _! C2 V4 a! \1 q6 d

  94.   K) ~( M1 ~+ ~7 `9 P8 }5 I
  95. * y& G' U) F) n8 D) N- S0 u

  96. : C- t/ `$ Z, D' `$ u& |
  97. if(!$$result){
    : f# I) L$ m: `/ W9 D
  98.         echo $$result;
    3 Q* k. C. u+ h5 ~' \6 @0 r/ n
  99.         die('Failed to post article! '.mysql_error());
    + j0 y# r/ C+ f, G2 Z
  100. }else+ K, c6 F# x7 @* N7 D
  101.         echo "Suscess to post article!\n";
    & _. F0 V! V4 E( O1 i

  102.   H; E3 Q+ L2 P  k; \
  103. echo $$dbname." is done";( F, n$ o% J' I, @. M' O9 n8 X' n- G
  104.   b. X# N4 g# L! s/ ~/ o
  105. ?>+ A5 s' [# g* h
  106. " }. g) }2 m- Z1 a3 j3 L! {
  107. 8 s3 t  P2 s( F4 u' X+ W7 y
  108. - F# z. H% E% i+ I. v' m

  109. 2 Z3 p' W3 W+ \6 Z3 m6 D
複製代碼
代碼給你改了下,wp_term_relationship表插入的值,你應該還需要改一下,因為我已經忘了這幾個表的關係了,剩下你的分享很好,我們一般使用付費cronjob,因為這種東西穩定性很重要,可以搜索setcronjob
; q2 g+ r0 P. k& f5 ?
2 P5 C! r: Q$ s0 G! p+ e+ f
2 a, Z; Z) j9 x如果你需要第1次插入的某些值,你需要在if($insert_id > 0 )下面再增加一個select的查詢# u5 }" o& y7 `8 o6 P
前面既然都是插入的內容,那麼插入的內容事先就已經知道的,所以沒有必要做這個select查詢+ r$ N& p* |( H/ X7 j1 \

& g9 R. {' J# z+ F5 }

評分

參與人數 1點點 +4 收起 理由
hudba + 4 admire;)

查看全部評分

回復 给力 爆菊

使用道具 舉報

發表於 2013-12-4 08:41:01 | 顯示全部樓層
我之前是使用wp內容函數搞定的,效率比直接插sql慢些,但勝在穩定,基本不出問題9 t0 n$ l+ m0 W: k+ d$ w, n8 T
回復 给力 爆菊

使用道具 舉報

發表於 2013-12-4 09:32:15 | 顯示全部樓層
你可以分兩步來處理,先插入文章,再導出文章ID,更新目錄.) V  Y9 ?' k3 o$ r
你可以查看mysql那幾個常用的指令。
( h, m, n2 k+ U% ^& A5 p0 t+ @4 y  r$ a* d# _
回復 给力 爆菊

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

點基

GMT+8, 2025-10-25 22:13

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表