<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hồ Bảo Huy - Chuyên Gia SEO - Chuyên Gia Marketing &#187; AJAX</title>
	<atom:link href="http://www.hobaohuy.com/tag/ajax/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hobaohuy.com</link>
	<description>www.hobaohuy.com</description>
	<lastBuildDate>Wed, 01 Oct 2014 07:44:56 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Làm sao để sử dụng đúng cách AJAX trong WordPress</title>
		<link>http://www.hobaohuy.com/lam-sao-de-su-dung-dung-cach-ajax-trong-wordpress.html</link>
		<comments>http://www.hobaohuy.com/lam-sao-de-su-dung-dung-cach-ajax-trong-wordpress.html#comments</comments>
		<pubDate>Tue, 30 Sep 2014 05:34:28 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Phát Triển WordPress]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[wordpress api]]></category>

		<guid isPermaLink="false">http://www.hobaohuy.com/?p=114</guid>
		<description><![CDATA[Chào các bạn, trong việc phát triển Theme và Plugin thì chắc hẳn ít nhiều các bạn cũng có sử dụng thêm AJAX. Cách thường dùng là chúng ta sẽ tạo ra các file php để xử lý request từ AJAX. Cách này khá mất công khi chúng ta vừa phải tạo mới file, vừa phải]]></description>
				<content:encoded><![CDATA[<p>Chào các bạn, trong việc phát triển Theme và Plugin thì chắc hẳn ít nhiều các bạn cũng có sử dụng thêm AJAX. Cách thường dùng là chúng ta sẽ tạo ra các file php để xử lý request từ AJAX. Cách này khá mất công khi chúng ta vừa phải tạo mới file, vừa phải include các file cần thiết để có thể tương tác và sử dụng được hàm WordPress. Cách này tuy vẫn đáp ứng được nhưng không khuyến khích dùng. Vì thế trong bài viết này mình sẽ hướng dẫn các bạn cách sử dụng AJAX trong WordPress đúng cách hơn.</p>
<p><img class="size-full" style="opacity: 1;" title="Hướng dẫn sử dụng AJAX trong WordPress đúng cách" src="/images/post/2014/09/30/05//ajax-trong-wordpress.jpg" alt="ajax trong wordpress Làm sao để sử dụng đúng cách AJAX trong WordPress " width="550" height="300" /></p>
<p>Việc sử dụng AJAX trong WordPress rất đơn giản. Các bạn không cần phải tạo ra bất kỳ file nào để xử lý request từ AJAX mà sử dụng chính <strong>file admin-AJAX.php</strong> trong <strong>thư mục wp-admin</strong> để xử lý thông qua 2 hook mà WordPress đã cung cấp sẵn: <strong>wp_AJAX_{action}</strong> và <strong>wp_AJAX_nopriv_{action}</strong>.</p>
<p><strong>Xem thêm</strong>: Action &amp; Filter trong WordPress</p>
<p>Hook<strong> wp_AJAX_{action}</strong> áp dụng khi người dùng đã đăng nhập và <strong>hook wp_AJAX_nopriv_{action}</strong> áp dụng khi người dùng không đăng nhập.</p>
<p>Để hiểu được cách sử dụng, các bạn làm theo ví dụ này của mình. Thêm đoạn code sau vào <strong>file functions.php</strong>:</p>
<div>
<div id="highlighter_121827" class="syntaxhighlighter  php">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php spaces">    </code><code class="php plain">add_action( </code><code class="php string">'wp_footer'</code><code class="php plain">, </code><code class="php string">'dvd_action_javascript'</code> <code class="php plain">);</code></div>
<div class="line number2 index1 alt1"><code class="php spaces">    </code><code class="php keyword">function</code> <code class="php plain">dvd_action_javascript() {</code></div>
<div class="line number3 index2 alt2"><code class="php spaces">        </code><code class="php plain">?&gt;&lt;script&gt;</code><code class="php comments">// &lt;![CDATA[</code></div>
<div class="line number4 index3 alt1"><code class="php spaces">        </code><code class="php plain">jQuery(document).ready(</code><code class="php keyword">function</code><code class="php plain">($) {</code></div>
<div class="line number5 index4 alt2"><code class="php spaces">            </code><code class="php plain">$.AJAX({</code></div>
<div class="line number6 index5 alt1"><code class="php spaces">                </code><code class="php plain">type : </code><code class="php string">'POST'</code><code class="php plain">,</code></div>
<div class="line number7 index6 alt2"><code class="php spaces">                </code><code class="php plain">data : {</code><code class="php string">'action'</code> <code class="php plain">: </code><code class="php string">'dvd_action'</code><code class="php plain">, </code><code class="php string">'data'</code> <code class="php plain">: </code><code class="php string">'du lieu gui len server'</code><code class="php plain">},</code></div>
<div class="line number8 index7 alt1"><code class="php spaces">                </code><code class="php plain">url : </code><code class="php string">'&lt;?php echo admin_url( "admin-AJAX.php" ); ?&gt;'</code><code class="php plain">,</code></div>
<div class="line number9 index8 alt2"><code class="php spaces">                </code><code class="php plain">success : </code><code class="php keyword">function</code> <code class="php plain">(resp){</code></div>
<div class="line number10 index9 alt1"><code class="php spaces">                    </code><code class="php plain">console.log(resp);</code></div>
<div class="line number11 index10 alt2"><code class="php spaces">                </code><code class="php plain">}</code></div>
<div class="line number12 index11 alt1"><code class="php spaces">            </code><code class="php plain">});</code></div>
<div class="line number13 index12 alt2"><code class="php spaces">        </code><code class="php plain">});</code></div>
<div class="line number15 index14 alt2"><code class="php comments">// ]]&gt;&lt;/script&gt;&lt;!--?php</code></div>
<div class="line number16 index15 alt1"><code class="php spaces">    </code><code class="php plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Đoạn code trên đơn giản là sử dụng hàm AJAX để gửi request đến file xử lý (<em>/wp-admin/admin-AJAX.php</em>). Đoạn script trên sẽ được thêm vào footer của theme thông qua hook <strong>wp_footer</strong>. Các bạn có thể sử dụng bất kỳ hàm AJAX nào khác như post, get … của Jquery.</p>
<p>Các bạn lưu ý chỗ dữ liệu gửi đi, với action thì bắt buộc phải có để có thể sử dụng được 2 hook ở trên. Giá trị của action thì có để đặt tùy ý và giá trị này sẽ được thay vào {action} của 2 hook bên trên. Thêm tiếp đoạn code sau:</p>
<div>
<div id="highlighter_46950" class="syntaxhighlighter  php">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain">add_action(</code><code class="php string">'wp_AJAX_dvd_action'</code><code class="php plain">, </code><code class="php string">'dvd_action'</code><code class="php plain">);</code></div>
<div class="line number2 index1 alt1"><code class="php plain">add_action(</code><code class="php string">'wp_AJAX_nopriv_dvd_action'</code><code class="php plain">, </code><code class="php string">'dvd_action'</code><code class="php plain">);</code></div>
<div class="line number3 index2 alt2"><code class="php keyword">function</code> <code class="php plain">dvd_action() {</code></div>
<div class="line number4 index3 alt1"><code class="php spaces">    </code><code class="php functions">echo</code> <code class="php variable">$_POST</code><code class="php plain">[</code><code class="php string">'data'</code><code class="php plain">];</code></div>
<div class="line number5 index4 alt2"><code class="php spaces">    </code><code class="php keyword">die</code><code class="php plain">();</code></div>
<div class="line number6 index5 alt1"><code class="php plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Các bạn để ý tên 2 hook bên trên. Với hook wp_AJAX_{action}, {action} là dvd_action. Tương tự với hook wp_AJAX_nopriv_{action}, {action} cũng là dvd_action do bên trên dữ liệu gửi đi mình đã khai báo với action là dvd_action. Các bạn thấy đấy, dựa vào action để nó có thể xác định được đúng request và xử lý chúng.</p>
<p>Trong hàm xử lý mình sẽ echo ra dữ liệu gửi lên từ AJAX và khi người dùng đăng nhập hay không đăng nhập thì hàm xử lý này vẫn sẽ hoạt động. Nếu muốn giới hạn thì các bạn có thể chọn 1 trong 2 hook trên cho phù hợp. Lưu ý: để nhận đúng kết quả trả về thì nên kết thúc hàm bằng hàm die(); hoặc exit();</p>
<p>Thử chạy và f12 lên xem kết quả nhé:</p>
<p><img class="size-full wp-image-17192" style="opacity: 1;" title="Hướng dẫn sử dụng AJAX trong WordPress đúng cách" src="/images/post/2014/09/30/05//ket-qua-tra-ve.png" alt="ket qua tra ve Làm sao để sử dụng đúng cách AJAX trong WordPress " width="716" height="109" /></p>
<p>Trong trường hợp các bạn muốn sử dụng đoạn script trên thông qua 1 file js thì cần phải đăng ký 1 biến global lưu đường dẫn tới file xử lý thông qua hàm sau:</p>
<div>
<div id="highlighter_476250" class="syntaxhighlighter  php">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain">wp_localize_script( </code><code class="php variable">$handle</code><code class="php plain">, </code><code class="php variable">$name</code><code class="php plain">, </code><code class="php variable">$data</code> <code class="php plain">);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Trong đó:</p>
<p>&#8211; $handle là tên script đã đăng ký</p>
<p>&#8211; $name là tên biến sẽ chứa dữ liệu</p>
<p>&#8211; $data là mảng chứa dữ liệu cho biến $name</p>
<p>Cụ thể hơn các bạn làm tiếp ví dụ sau sẽ hiểu:</p>
<p>Đoạn code xử lý AJAX ở trên vẫn giữ nguyên, mình sẽ thay đổi lại đoạn script thay vì dùng thông qua hook thì mình sẽ dùng thông qua 1 file js. Ở đây mình đặt tên là my_js.js và nó nằm trong thư mục js của theme. Trước hết mình đăng ký file my_js.js và 1 đối tượng lưu đường dẫn tới file xử lý:</p>
<div>
<div id="highlighter_314017" class="syntaxhighlighter  php">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain">add_action(</code><code class="php string">'init'</code><code class="php plain">, </code><code class="php string">'dvd_enqueue_script'</code><code class="php plain">);</code></div>
<div class="line number2 index1 alt1"><code class="php keyword">function</code> <code class="php plain">dvd_enqueue_script(){</code></div>
<div class="line number3 index2 alt2"><code class="php spaces">    </code><code class="php plain">wp_register_script(</code><code class="php string">'dvd_js'</code><code class="php plain">, get_template_directory_uri() . </code><code class="php string">'/js/my_js.js'</code><code class="php plain">, </code><code class="php keyword">array</code><code class="php plain">(</code><code class="php string">'jquery'</code><code class="php plain">), null, false);</code></div>
<div class="line number4 index3 alt1"><code class="php spaces">    </code><code class="php plain">wp_localize_script(</code><code class="php string">'dvd_js'</code><code class="php plain">, </code><code class="php string">'AJAX'</code><code class="php plain">, </code><code class="php keyword">array</code><code class="php plain">(</code><code class="php string">'url'</code> <code class="php plain">=&gt; admin_url(</code><code class="php string">'admin-AJAX.php'</code><code class="php plain">)));</code></div>
<div class="line number5 index4 alt2"><code class="php spaces">    </code><code class="php plain">wp_enqueue_script(</code><code class="php string">'dvd_js'</code><code class="php plain">);</code></div>
<div class="line number6 index5 alt1"><code class="php plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Sau khi đã đăng ký xong mình có thể lấy đường dẫn tới file xử lý trong my_js.js bằng cách sử dụng: AJAX.url:</p>
<div>
<div id="highlighter_475271" class="syntaxhighlighter  jscript">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="jscript plain">jQuery(document).ready(</code><code class="jscript keyword">function</code><code class="jscript plain">($) {</code></div>
<div class="line number2 index1 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$.AJAX({</code></div>
<div class="line number3 index2 alt2"><code class="jscript spaces">        </code><code class="jscript plain">type : </code><code class="jscript string">'POST'</code><code class="jscript plain">,</code></div>
<div class="line number4 index3 alt1"><code class="jscript spaces">        </code><code class="jscript plain">data : {</code><code class="jscript string">'action'</code> <code class="jscript plain">: </code><code class="jscript string">'dvd_action'</code><code class="jscript plain">, </code><code class="jscript string">'data'</code> <code class="jscript plain">: </code><code class="jscript string">'du lieu gui len server'</code><code class="jscript plain">},</code></div>
<div class="line number5 index4 alt2"><code class="jscript spaces">        </code><code class="jscript plain">url : AJAX.url,</code></div>
<div class="line number6 index5 alt1"><code class="jscript spaces">        </code><code class="jscript plain">success : </code><code class="jscript keyword">function</code> <code class="jscript plain">(resp){</code></div>
<div class="line number7 index6 alt2"><code class="jscript spaces">            </code><code class="jscript plain">console.log(resp);</code></div>
<div class="line number8 index7 alt1"><code class="jscript spaces">        </code><code class="jscript plain">}</code></div>
<div class="line number9 index8 alt2"><code class="jscript spaces">    </code><code class="jscript plain">});</code></div>
<div class="line number10 index9 alt1"><code class="jscript plain">});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Các bạn chạy lại và xem kết quả nhé. Vẫn y hệt kết quả như trước phải không nào?</p>
<p>Trường hợp các bạn sử dụng AJAX trong trang quản lý (dashboard) thì không cần phải khai báo đường dẫn tới file xử lý (admin-AJAX.php) nữa. Bởi vì WordPress đã cung cấp sẵn 1 biến global có tên AJAXurl lưu đường dẫn tới file xử lý rồi. Việc của chúng ta là lấy ra mà dùng thôi.</p>
<p>Thử luôn ví dụ cho các bạn dễ hiểu.</p>
<div>
<div id="highlighter_285565" class="syntaxhighlighter  php">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php spaces">    </code><code class="php plain">add_action( </code><code class="php string">'admin_footer'</code><code class="php plain">, </code><code class="php string">'dvd_action_javascript'</code> <code class="php plain">);</code></div>
<div class="line number2 index1 alt1"><code class="php spaces">    </code><code class="php keyword">function</code> <code class="php plain">dvd_action_javascript() {</code></div>
<div class="line number3 index2 alt2"><code class="php spaces">        </code><code class="php plain">?&gt;&lt;script&gt;</code><code class="php comments">// &lt;![CDATA[</code></div>
<div class="line number4 index3 alt1"><code class="php spaces">        </code><code class="php plain">jQuery(document).ready(</code><code class="php keyword">function</code><code class="php plain">($) {</code></div>
<div class="line number5 index4 alt2"><code class="php spaces">            </code><code class="php plain">$.AJAX({</code></div>
<div class="line number6 index5 alt1"><code class="php spaces">                </code><code class="php plain">type : </code><code class="php string">'POST'</code><code class="php plain">,</code></div>
<div class="line number7 index6 alt2"><code class="php spaces">                </code><code class="php plain">data : {</code><code class="php string">'action'</code> <code class="php plain">: </code><code class="php string">'dvd_action'</code><code class="php plain">, </code><code class="php string">'data'</code> <code class="php plain">: </code><code class="php string">'du lieu gui len server'</code><code class="php plain">},</code></div>
<div class="line number8 index7 alt1"><code class="php spaces">                </code><code class="php plain">url : AJAXurl,</code></div>
<div class="line number9 index8 alt2"><code class="php spaces">                </code><code class="php plain">success : </code><code class="php keyword">function</code> <code class="php plain">(resp){</code></div>
<div class="line number10 index9 alt1"><code class="php spaces">                    </code><code class="php plain">console.log(resp);</code></div>
<div class="line number11 index10 alt2"><code class="php spaces">                </code><code class="php plain">}</code></div>
<div class="line number12 index11 alt1"><code class="php spaces">            </code><code class="php plain">});</code></div>
<div class="line number13 index12 alt2"><code class="php spaces">        </code><code class="php plain">});</code></div>
<div class="line number15 index14 alt2"><code class="php comments">// ]]&gt;&lt;/script&gt;&lt;?php }</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Mình dùng hook admin_footer để thêm 1 đoạn script vào footer của trang quản lý, các bạn có thể sử dụng file js riêng đều được. Nội dung đoạn code tương tự ví dụ trên chỉ khác chỗ option url thôi. Phần xử lý AJAX thông qua 2 hook bên trên các bạn vẫn giữ nguyên. Vào trang quản lý, f12 và kiểm tra kết quả nhé.</p>
<h3>Lời kết</h3>
<p>Mình đã hướng dẫn xong cách sử dụng AJAX trong WordPress. Hy vọng qua bài viết này các bạn có thể hiểu và biết cách vận dụng AJAX tốt hơn trong WordPress. Mọi vướng mắc các bạn có thể comment bên dưới để được sự hỗ trợ từ mọi người.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hobaohuy.com/lam-sao-de-su-dung-dung-cach-ajax-trong-wordpress.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
