JQuery和is_admin()的问题

时间:2011-01-30 作者:Steven

我已经创建了一个插件
在这个插件中,我有一个显示一些数据的函数
在此函数中,我使用is_admin() 确定是否从后端调用该函数,因为这样我可以添加一些附加信息。

在管理页面中,函数正常加载。使用jQuery进行更新后,调用该函数以显示新数据。

问题是,当通过jQuery调用函数时is_admin()false, 即使我是后台管理模式。

为什么不是is_admin 通过jQuery调用什么工作?

Update

的代码is_admin() 在单击新事件(或更新现有事件)的保存按钮时调用。

单击保存/更新后,通过jQuery更新日历列表。

下面是部分插件代码。

// create custom plugin settings menu
if ( function_exists(\'add_action\') ) {
  add_shortcode(\'eventcal\', \'shortcode_display_event\');
}

function shortcode_display_event($attr) {
  include_once(\'eventcal.class.php\');
  $ec = new EventCalendar();

    extract(shortcode_atts(array(
        \'type\' => \'simple\',
        \'parent_id\' => \'\',
        \'category\' => \'\',
        \'count\' => \'10\',
        \'link\' => \'\'
    ), $attr));

  $data[\'events\'] = $ec->getMultipleEvents($cal_type, $count, $parent_id, $category);
  $data[\'link\'] = $link;
  $data[\'type\'] = $type;   
  $ec->displayCalendarList($data); 
}
这是在管理模式下添加的位:

function extendedList( $data ) {
  (...)
  if(is_admin()) 
    $eventList .= \'<th class="eventActions"></th>\';
  $eventList .= \'</tr></thead><tbody>\';
  (...)
}
这是更新后更新日历列表的代码。

// New event - Form Submit
jQuery(\'#formNewEvent\').live(\'submit\' ,function() {

    var formData = jQuery(\'#formNewEvent\').serializeArray();

    //Event ID is only given a value when an event has been clicked.
    if(jQuery(\'#event_id\').val() != \'\')
    {

      // UPDATE EVENT
      jQuery.post("/wp-content/plugins/wp-eventcal/eventcal_jquery.php", { instance: \'updateEvent\', formData : formData, eventID : jQuery(\'#event_id\').val() },
      function(data) {
        if(data.status == \'success\') {
          // Here we update calendar list after data has been updated
          jQuery.post("/wp-content/plugins/wp-eventcal/eventcal_jquery.php", { instance: \'getEventList\' },
          function(list) {
            jQuery(\'#eventListContainer\').html(list);                  
          });
        }      
      }, "json");
    }
    else {
      // ADD NEW EVENT
      jQuery.post("/wp-content/plugins/wp-eventcal/eventcal_jquery.php", { instance: \'addNewEvent\', formData : formData },
      function(data) {
        // Here we update calendar list after new event have been added         
        if(data.status) {
          jQuery.post("/wp-content/plugins/wp-eventcal/eventcal_jquery.php", { instance: \'getEventList\' },
          function(list) {
            jQuery(\'#eventListContainer\').html(list);         
          });
        } 
      }, "json");        
    }
  return false;
}); 

2 个回复
SO网友:MikeSchinkel

是否可能没有在\'init\'\'admin_init\'; 我的猜测是“是的”。此外,如果您使用\'admin_init\' 胡克,你不需要打电话is_admin().

更好的是,这里有一个关于在WordPress中使用jQuery的最佳实践的答案:

SO网友:Harshal Solanki

检查body的class属性:如果主题使用的是body\\u class(),那么对于登录的用户,body有一个名为logged in的类。请注意,该函数也可以用于元素html。

实例

if(jQuery(\'body\').hasClass(\'logged-in\')){
    alert("Logged In");
}

if(!jQuery(\'body\').hasClass(\'logged-in\')){
    alert("Logged Out");
}

结束

相关推荐

如何在插件中使用wp_enQueue_script jQuery

我想在我的Wordpress插件中使用jQuery。我试图使用enqueue脚本加载jquery库,但它引发了一个错误。错误:$不是函数这是我的主插件中的代码片段。php文件。。。function ($post) { wp_enqueue_script(\'jquery\'); ?> <script type=\"text/javascript\"> function doTestParse(searchString