2013-07-28 3 views
0

WordPress 플러그인을 만들고 있는데 이상한 점이 있습니다.WordPress 플러그인에서 Ajax 반환 문제

우선 내 워드 프레스 스크립트를 보여 드리고 싶습니다.

<?php 
/* 
Plugin Name: Banner Plugin 
*/ 

define('MYPLUGINNAME_PATH', plugin_dir_path(__FILE__)); 
register_activation_hook(__FILE__, 'my_banner_plugin_activate'); 
register_deactivation_hook(__FILE__, 'my_banner_plugin_deactivate'); 

function my_banner_plugin_activate(){ 
    //Activation method. 
    activate(); 
} 

function my_banner_plugin_deactivate(){ 
    //Deactivation method. 
    global $wpdb; 
    $wpdb->query(" DROP TABLE ".$wpdb->prefix."banner "); 
} 

add_action('admin_menu', 'register_custom_menu_page'); 

function register_custom_menu_page() { 
    add_menu_page('Banner Menu Display', 'Banner Menu', 'read', 'banner-menu', 'display_banner_panel' /*, $icon_url, $position*/); 
    add_submenu_page('banner-menu', 'Add Baner', 'Add Baner','read', 'add-banner','display_banner_subpanel_add'); 
} 

if(isset($_POST['action']) && $_POST['action']=='add_banner'){ 
    submit_form(); 
} 

if(isset($_POST['action']) && $_POST['action']=='updateRecordsListings') 
{ 
    include 'reorder.php'; 
} 

function header_css_page() { 
    wp_register_style($handle = 'header-css', $src = plugins_url('css/banner_style.css', __FILE__), $deps = array(), $ver = '1.0.0', $media = 'all'); 
    wp_enqueue_style('header-css'); 
} 

add_action('init', 'header_css_page'); 

function reorder_css_page() { 
    wp_register_style($handle = 'reorder-css', $src = plugins_url('css/reorder_style.css', __FILE__), $deps = array(), $ver = '1.0.0', $media = 'all'); 
    wp_enqueue_style('reorder-css'); 
} 

add_action('init', 'reorder_css_page'); 

function display_banner_panel() 
{ 
    global $wpdb; 
    $banner_list = $wpdb->get_results("select * from ".$wpdb->prefix."banner order by banner_order desc"); 
    ?> 
    <div class='admin-custom'> 
    <?php include 'view_banner.php'; ?> 
    </div> 
<?php 
} 

view_banner.php에 대한 스크립트는 다음과 같습니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

<script type="text/javascript" src="<?php echo plugins_url();?>/banner-pluggin/js/jquery-1.7.1.min.js"></script> 
<script type="text/javascript" src="<?php echo plugins_url();?>/banner-pluggin/js/jquery-ui-1.7.1.custom.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $(function() { 
     $("#contentLeft2 ul").sortable({ opacity: 0.6, cursor: 'move', update: function() { 
      var order = $(this).sortable("serialize") + '&action=updateRecordsListings'; 
      $.post("", order, function(theResponse){ 
       $("#contentRight2").html(theResponse); 
      });                
     }         
     }); 
    }); 
}); 
</script> 
</head> 
    <body> 
    <h1>Add Banner</h1> 
<br/> 
<br/> 
<div id="contentWrap2"> 
     <div id="contentLeft2"> 
      <ul> 
       <?php 
       //$query = "SELECT * FROM records ORDER BY recordListingID ASC"; 
       //$result = mysql_query($query); 

       //while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
       //{ 
           foreach($banner_list as $row) 
           { 
       ?> 
          <li id="recordsArray_<?php echo $row->banner_id; ?>"> 
           <div> 
            <img src="<?php echo plugins_url().'/banner-pluggin/banner/'. $row->banner_img;?>" height="80px" width="100px"/> 
           </div> 
          </li> 

              <?php } ?> 
      </ul> 
     </div> 

     <div id="contentRight2"> 
      <p>Array will be displayed here.</p> 
      <p>&nbsp; </p> 
     </div> 

    </div> 
    </body> 
</html> 

그리고 reorder.php은 다음과 같다. enter image description here

:

<?php 
global $wpdb; 
    $action = mysql_real_escape_string($_POST['action']); 
    $updateRecordsArray  = $_POST['recordsArray']; 

    if ($action == "updateRecordsListings") 
    { 
     $listingCounter = 1; 
     foreach ($updateRecordsArray as $recordIDValue) 
      { 

      $query = "UPDATE wp_banner SET banner_order = " . $listingCounter . " WHERE banner_id = " . $recordIDValue; 
      if(mysql_query($query)) 
      { 

      } 
      else { 
       mysql_error(); 
      }//die('Error, insert query failed'); 
      $listingCounter = $listingCounter + 1; 
      } 

     echo '<pre>'; 
     print_r($updateRecordsArray); 
     echo '</pre>'; 
     echo 'If you refresh the page, you will see that records will stay just as you modified.'; 
    } 
?> 

문제는 아약스 호출도 잘 작동한다는 것입니다, 유일한 문제는 여기

이 스크린 샷입니다, 아약스 응답이 또한 관리자 메뉴의 일부를 표시한다는 것입니다 오른쪽의 녹색 상자에서 관리자의 부분이 표시되지 않아야하지만 왜 표시됩니까?

내가 알고 내가 문제를 파악,

$.post("", order, function(theResponse) 

banner-pluggin.php 을 의미하며, 작업 후 banner-pluggin.php의 HTML이 아약스의로로드지고 같은 페이지에 보낼 Ajax 호출을 일으킴.

그러나 직접 Ajax 게시물을 reorder.php으로 보내면 HTML이 없으므로 HTML이 응답으로로드되지 않습니다.

그러나 또 다른 문제가

: SQL 쿼리가 실행되지 않습니다가, 어느 쪽도 아니 그것은 어떤 오류가 표시되지 않으며, SQL, 나는 처음부터 시작하는 것이 좋습니다 코드로

답변

0

너무 많은 문제가 실행됩니다.

문제점은 :

  1. 당신은 당신의 하위 메뉴 페이지 (view-banner.php)에서 전체 HTML 페이지를 포함하지 않아야합니다.

  2. CSS와 자바 스크립트 admin_enqueue_scripts에 추가 만에 플러그인의 페이지, 그것은 init 액션 훅 지금 일어나고있는 것처럼하지 사방해야합니다.

  3. Ajax를 어떻게 관리했는지 이해할 수는 없지만 확실한 방법은 아닙니다.

다시 시작하기 :

  1. 연구 워드 프레스 답변에서 <plugin-development> 태그, 당신은 당신의 플러그인 페이지를 추가하고 그 내용을 렌더링하는 방법에 대한 많은 좋은 예를 찾을 수 있습니다. 나는 항상 새로운 플러그인을위한 시작점으로서 우리의 사회자 중 one에서이 Plugin Class Demo을 사용합니다.

  2. WordPress의 Ajax 작동 예제 : [1], [2][3].

관련 문제