[buddypress-trac] [BuddyPress] #5052: Ajax on group extension page on BP-default child theme returns HTML of referer page instead of data

buddypress-trac noreply at wordpress.org
Thu Jun 13 16:29:50 UTC 2013


#5052: Ajax on group extension page on BP-default child theme returns HTML of
referer page instead of data
--------------------------+-----------------------------
 Reporter:  matom         |      Owner:
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Groups        |    Version:  1.7
 Severity:  normal        |   Keywords:
--------------------------+-----------------------------
 I have a child theme of the BP Default theme and a group extension that
 loads and displays data depending on user selection using AJAX (jQuery).
 This was all working fine in BP 1.5.2 / WP 3.4.1. Since updating to BP
 1.7.2 and WP 3.5.1 this no longer works correctly. Instead of
 loading/displaying the data it supposed to, it loads and displays the full
 html of the admin page again.

 To recreate:

 1. Install WordPress 3.5.1 and Buddypress 1.7.2
 2. Create a child theme of BP default
 3. Add this code into the functions.php file of the child theme:

 {{{

 <?php

 if ( class_exists( 'BP_Group_Extension' ) ) :
     class My_Group_Extension extends BP_Group_Extension {

         function __construct() {
             $this->name = 'My Group Extension';
             $this->slug = 'my-group-extension';

             $this->create_step_position = 21;
             $this->nav_item_position = 31;
         }

         function edit_screen() {
             if ( !bp_is_group_admin_screen( $this->slug ) )
                 return false; ?>

             <h2><?php echo esc_attr( $this->name ) ?></h2>
             <a href="#" id="test-link">Click to load AJAX Data.</a>
             <div id="test-result">My Result</div>
             <?php
             wp_nonce_field( 'groups_edit_save_' . $this->slug );
         }

     }

     bp_register_group_extension( 'My_Group_Extension' );

 endif; // class_exists( 'BP_Group_Extension' )


 function my_display_test(){
         die("Hello World!");
 }
 add_action('wp_ajax_my_display_test', 'my_display_test');

 function my_scripts() {
         wp_enqueue_script( 'main-js', get_stylesheet_directory_uri() .
 '/main.js', array('jquery'));
 }
 add_action( 'wp_enqueue_scripts', 'my_scripts' );
 ?>
 }}}

 4. Add this code into a main.js file in the child theme:

 {{{
 var $ = jQuery.noConflict();

 $(function(){
         $('#test-link').click(function(){
                  $.post( ajaxurl, {
                                   action: 'my_display_test'
                           },
                           function(response) {
                                 $('#test-result').html(response);
                           }
                   );
                  return false;
         });
 });
 }}}

 5. Create a new group and go the the "My Group Extension" admin page.
 6. Click on the "Click to load AJAX Data." link

 This will return the full HTML of the referer page into the #test-result
 DIV instead of "Hello World!".

 Using the same code as above in a non-BP theme (ie. twentytwelve) returns
 the "Hello World!" correctly.

 I've also found out that it is somehow related to the URL of the referer
 page. If I copy the the full generated HTML of the group extension admin
 page into the groups/single/home.php file of the default BP theme
 (replacing all code), I get the following results:

 - on /groups/my-group/ it returns "Hello World!" correctly
 - on /groups/my-group/admin/edit-details it returns "Hello World!"
 correctly
 - on /groups/my-group/admin/my-group-extension/ it returns the incorrect
 data (the full HTML of the current page)

--
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/5052>
BuddyPress <http://buddypress.org/>
BuddyPress


More information about the buddypress-trac mailing list