Wordpress: Ajax 호출로 플러그인 함수를 호출하는 방법
Wordpress MU 플러그인을 쓰고 있는데, 각 게시물에 대한 링크가 포함되어 있어 사용자가 이 링크를 클릭하면 플러그인 함수 중 하나를 호출하고 링크 텍스트를 해당 함수의 출력으로 동적으로 업데이트하고 싶습니다.
아약스 조회가 막혔어요이렇게 복잡하고 해킹적인 방법이 있는데 잘 되지는 않아요.플러그인에 Ajax 기능을 포함하기 위한 '올바른' 또는 '워드프레스' 방법은 무엇입니까?
(현재 저의 해킹 코드는 아래와 같습니다.generate 링크를 클릭해도 브라우저에서 sample-ajax.php로 직접 이동할 때와 같은 출력이 wp페이지에 표시되지 않습니다.)
코드[1]는 다음과 같이 설정되어 있습니다.
mu-plugins/샘플.php:
<?php
/*
Plugin Name: Sample Plugin
*/
if (!class_exists("SamplePlugin")) {
class SamplePlugin {
function SamplePlugin() {}
function addHeaderCode() {
echo '<link type="text/css" rel="stylesheet" href="'.get_bloginfo('wpurl').
'/wp-content/mu-plugins/sample/sample.css" />\n';
wp_enqueue_script('sample-ajax', get_bloginfo('wpurl') .
'/wp-content/mu-plugins/sample/sample-ajax.js.php',
array('jquery'), '1.0');
}
// adds the link to post content.
function addLink($content = '') {
$content .= "<span class='foobar clicked'><a href='#'>click</a></span>";
return $content;
}
function doAjax() { //
echo "<a href='#'>AJAX!</a>";
}
}
}
if (class_exists("SamplePlugin")) {
$sample_plugin = new SamplePlugin();
}
if (isset($sample_plugin)) {
add_action('wp_head',array(&$sample_plugin,'addHeaderCode'),1);
add_filter('the_content', array(&$sample_plugin, 'addLink'));
}
mu-plugins/sample/sample-sublic.http:
<?php
if (!function_exists('add_action')) {
require_once("../../../wp-config.php");
}
?>
jQuery(document).ready(function(){
jQuery(".foobar").bind("click", function() {
var aref = this;
jQuery(this).toggleClass('clicked');
jQuery.ajax({
url: "http://mysite/wp-content/mu-plugins/sample/sample-ajax.php",
success: function(value) {
jQuery(aref).html(value);
}
});
});
});
mu-plugins/sample/sample-sublic.sublic:
<?php
if (!function_exists('add_action')) {
require_once("../../../wp-config.php");
}
if (isset($sample_plugin)) {
$sample_plugin->doAjax();
} else {
echo "unset";
}
?>
[1] 주의:다음 튜토리얼을 통해 여기까지 왔지만, 이 시점에서는 곤란합니다.http://www.devlounge.net/articles/using-ajax-with-your-wordpress-plugin
Dead Medic은 정확하지 않다.WordPress에는 AJAX 기능이 내장되어 있습니다.인수 'action'을 사용하여 POST를 사용하여 /wp-admin/admin-ajax.php로 ajax 요청을 전송합니다.
jQuery(document).ready(function(){
jQuery(".foobar").bind("click", function() {
jQuery(this).toggleClass('clicked');
jQuery.ajax({
type:'POST',
data:{action:'my_unique_action'},
url: "http://mysite/wp-admin/admin-ajax.php",
success: function(value) {
jQuery(this).html(value);
}
});
});
});
로그인한 사용자에게만 기능하도록 하려면 다음과 같이 플러그인에 연결합니다.
add_action('wp_ajax_my_unique_action',array($sample_plugin,'doAjax'));
또는 다음과 같이 후크하여 사용자 내 비사용자에게만 작동합니다.
add_action('wp_ajax_nopriv_my_unique_action',array($sample_plugin,'doAjax'));
모두에게 효과가 있기를 원한다면 둘 다 사용하세요.
admin-timeout.dloads는 이미 몇 가지 액션 이름을 사용하므로 파일을 확인하고 동일한 액션 이름을 사용하지 마십시오.그렇지 않으면 실수로 댓글 삭제 등의 조작을 시도하게 됩니다.
편집
죄송합니다, 질문을 잘 이해하지 못했습니다.에이잭스 요청 방법을 묻는 줄 알았는데어쨌든, 두 가지 시도를 해보겠습니다.
첫 번째, AJAX라는 단어에 대한 당신의 함수의 반향을 일으키도록 하세요.a다음으로는 성공과 완전한 콜백을 모두 얻을 수 있도록 ajax 콜을 변경해 보겠습니다.
jQuery(document).ready(function(){
jQuery(".foobar").bind("click", function() {
var val = '';
jQuery(this).toggleClass('clicked');
jQuery.ajax({
type:'POST',
data:{action:'my_unique_action'},
url: "http://mysite/wp-admin/admin-ajax.php",
success: function(value) {
val = value;
},
complete: function(){
jQuery(this).html(val);
}
});
});
});
WordPress 환경
먼저 이 작업을 수행하려면 서버에 요청을 푸시하는 jQuery 스크립트를 등록하고 큐에 넣을 것을 권장합니다.이 작업들은 다음과 같이 연결됩니다.wp_enqueue_scripts액션 훅같은 훅에 넣어야 합니다.wp_localize_script자바스크립트이렇게 하면 프론트 엔드에서 JS 객체를 사용할 수 있습니다.jQuery의 URL입니다.
다음 항목을 확인하십시오.
파일: 함수.php 1/2
add_action( 'wp_enqueue_scripts', 'so_enqueue_scripts' );
function so_enqueue_scripts(){
wp_register_script( 'ajaxHandle', get_template_directory() . 'PATH TO YOUR JS FILE', array(), false, true );
wp_enqueue_script( 'ajaxHandle' );
wp_localize_script( 'ajaxHandle', 'ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
파일: jquery.ajax.js
이 파일은 Ajax 콜을 발신합니다.
jQuery(document).ready( function($){
//Some event will trigger the ajax call, you can push whatever data to the server, simply passing it to the "data" object in ajax call
$.ajax({
url: ajax_object.ajaxurl, // this is the object instantiated in wp_localize_script function
type: 'POST',
data:{
action: 'myaction', // this is the function in your functions.php that will be triggered
name: 'John',
age: '38'
},
success: function( data ){
//Do something with the result from server
console.log( data );
}
});
});
파일: 함수.php 2/2
드디어 당신의 기능에 대해서.php 파일은 당신의 ajax 호출에 의해 트리거된 함수가 있을 것입니다.접미사에 주의해 주세요.
- wp_parames(등록 사용자 또는 관리 패널 조작에 대해서만 이 기능을 허용합니다.
- wp_priv_nopriv(특권 없는 사용자에게 기능 허용)
다음 접미사와 액션이 액션의 이름을 구성합니다.
wp_ajax_myaction ★★★★★★★★★★★★★★★★★」wp_ajax_nopriv_myaction
add_action( 'wp_ajax_myaction', 'so_wp_ajax_function' );
add_action( 'wp_ajax_nopriv_myaction', 'so_wp_ajax_function' );
function so_wp_ajax_function(){
//DO whatever you want with data posted
//To send back a response you have to echo the result!
echo $_POST['name'];
echo $_POST['age'];
wp_die(); // ajax call must die to avoid trailing 0 in your response
}
도움이 됐으면 좋겠다!
뭔가 명확하지 않은 점이 있으면 알려주세요.
정보를 추가하려고요.php 클래스 메서드 함수에서 개체를 받는 경우:
js 파일
jQuery(document).ready(function(){
jQuery(".foobar").bind("click", function() {
var data = {
'action': 'getAllOptionsByAjax',
'arg1': 'val1',
'arg2': $(this).val()
};
jQuery.post( ajaxurl, data, function(response) {
var jsonObj = JSON.parse( response );
});
});
php 파일
public static function getAllOptionsByAjax(){
global $wpdb;
// Start query string
$query_string = "SELECT * FROM wp_your_table WHERE col1='" . $_POST['arg1'] . "' AND col2 = '" . $_POST['arg2'] . "' ";
// Return results
$a_options = $wpdb->get_results( $query_string, ARRAY_A );
$f_options = array();
$f_options[null] = __( 'Please select an item', 'my_domain' );
foreach ($a_options as $option){
$f_options [$option['id']] = $option['name'];
}
$json = json_encode( $f_options );
echo $json;
wp_die();
}
언급URL : https://stackoverflow.com/questions/2908823/wordpress-how-to-call-a-plugin-function-with-an-ajax-call
'programing' 카테고리의 다른 글
| 객체 위에 불변js를 사용해야 하는 이유는 무엇입니까?얼려? (0) | 2023.03.10 |
|---|---|
| JQuery Ajax가 POST 대신 GET을 전송합니다. (0) | 2023.03.10 |
| Spring boot application.properties maving multi-module 프로젝트 (0) | 2023.03.10 |
| 메서드 JPQL에 대한 쿼리를 검증하지 못했습니다. (0) | 2023.03.10 |
| docker-compose.yml에서 wp cli를 실행하는 방법 (0) | 2023.03.05 |