• Hola, como estan?

    Basicamente lo que tengo es un plugin propio que estoy haciendo, en el que hice que en el panel de administracion me muestren unas tablas obtenidas con datos de la base de datos. Al traerme muchos registros es que quise hacer una paginacion con un buscador incluido. Logre encontrar como hacerlo, pero en una pagina comun.

    Mi problema viene a que yo en la pagina de administracion del plugin ya tengo como URL lo siguiente: /wp-admin/admin.php?page=suscripciones_plugin_menu#wf-suscriptores

    Siendo que el page es el nombre de la pagina para el panel, y #wf-suscriptores es la solapa en donde ira la tabla.

    El paginador y el buscador funcionan bien en sí, pero el problema es las rutas, ya que al tocar por ej pagina 2, la URL queda como: /wp-admin/admin.php?start=2, y al buscar en el buscador me queda como: /wp-admin/admin.php?search=palabrabuscada , siendo que me borra el demas contenido de la URL original.

    Logré hacer que se mantenga la URL como por ej: /wp-admin/admin.php?page=suscripciones_plugin_menu?start=2#wf-suscriptores , pero aun asi me tira error.

    No se si es que tengo que registrar la URL o como es que puedo hacer que todo funcione bien en conjunto.

    Dejo el codigo para que vean:

      echo '
        <div class="wf_settings_left" style="width: 100%;">
            
        	<div class="nav-tab-wrapper wp-clearfix wf-tab-head">
        		<a class="nav-tab" href="#wf-suscriptores">Lista de Suscriptores</a>
        		<a class="nav-tab" href="#wf-descuentos">Descuentos</a>
        	</div>
        	
        	
        	<div class="wf-tab-container">';
        	
        	
        ///////////////////////////////////////// RECUADRO LISTA DE SUSCRIPTORES ////////////////////////  
        
        
        // muestra los datos de una tabla personalizada, en una pagina especifica de wordpress
        // incluye paginacion y busqueda
       
    
    	$table_name = 'wp_suscriptores';        // custom table name
    	$items_per_page = 50;                   // quantity per page
      
    	$search_condition = '';                                                                         // la condicion de busqueda. Está para que busque lo que se pone                                                                                                     en el form de abajo
    	$search = $_REQUEST['search']??'';                                                              // se busca la condicion, si es que pusieron una en el buscador
    	if ( $search ) $search_condition = "WHERE first_name like '%$search%'";                       // si existe una condicion de busqueda, aparecerá aca la seccion                                                                                                     de codigo para la busqueda (WHERE...)
    
    	$start_number = $_REQUEST['start']??0;
    	if ( $start_number < 0 || ! is_numeric( $start_number ) ) $start_number = 0;                    // si el numero de inicio es menor a 0, o no es un numero, el                                                                                                        numero de comienzo quedará en 0
    
    	// Count items
    	$sql = "SELECT COUNT(*) FROM $table_name $search_condition";                                  // el string de la consulta a bbdd
    	$count = $wpdb->get_var($sql);                                                                  // creo que cuenta la cantidad de registros encontrados en la bbdd                                                                                                    con esa condicion de busqueda
    
    	// Items
    	$sql = "SELECT * FROM $table_name $search_condition LIMIT $start_number, $items_per_page";    // el string de la consulta a bbdd
        $items = $wpdb->get_results($sql);                                                              // realiza la busqueda con la condicion de busqueda y de                                                                                                             paginacion
        
    
        
    
        			
        
        
        // tabla 
        
    	// datos de registros
    	echo'   <div class="wf-tab-content" data-id="wf-suscriptores">
                    <div class="wrap">';
                    
                    
                        // buscador
        
        echo '          <form method="get" style="display: inline-block; float: right; margin-top: 10px; margin-bottom: 20px;">
            		        <input type="search" minlength="2" placeholder="Buscar suscriptor" name="search" value="'.$search.'">
            		        <input type="submit" value="Buscar">
            		    </form>';
            		    
                    
        echo '          <div id="contenedor-tablas" style="overflow: inherit !important;">
                        
                            <table class="wp-list-table widefat fixed striped table-view-list users" id="tabla-suscriptores" style="margin-bottom: 30px;">
                                <thead>
                                    <tr>'; /* echo'
                                        <th class="manage-column">Nombre</th>'; */ echo'
                                        <th class="manage-column">Apellido</th>         
                                    </tr>
                                </thead>
                                <tbody id="the-list">';
                                    
                                    foreach ( $items as $item ) { 
                                        $nombre = $item->nombre;
                                        $apellido = $item->apellido;                    
                                        
    echo'                       <tr>
                                        <td>'; echo $nombre echo' </td> 
                                        <td>'; echo $apellido echo' </td>';
                           
        }
        echo'                   </tbody>
                            </table>';                        
        echo'           </div>';
        
        
        
                        // barra de paginacion
                    
                    	$navbar = '';
                    
                    	if ( $count > $items_per_page ){                              // si registros encontrados es mayor a registros por pagina
                    		$nav_count = 0;                                           // de donde empieza a contar los registros. Ira de 50 en 50 (0, 50, 100, etc)
                    		$page_count = 1;                                          // numero de pagina. Empieza por 1
                    		$str_search = '';                                         // string de busqueda. Empieza vacio
                    		$current_page = $start_number/$items_per_page + 1;        // numero de pagina actual
                    
                    		if ( $search ) $str_search = "&search=$search";           // si existe una condicion de busqueda, el string de busqueda sera el que figura ahi, que despues ira a la URL
                    
                    		while ( $nav_count < $count ) {                           // mientras nav_count (de donde empieza a contar los registros) sea menor a count (cantidad de registros encontrados con tal condicion de busqueda). En un ejemplo de 500 registros, y con 50 items por pagina, esto llegará hasta 10
                    			if ( $page_count === $current_page ){                 // si al iterar llega al numero de pagina actual, entonces imprime el numero sin ningun enlace
                    				$navbar .= "<span>{$page_count}</span> ";
                    			} else {                                              // sino, mientras siga iterando y el numero de pagina no es el actual, entonces imprimira un numero como enlace para esa pagina
                    				$navbar .= "<a href='?page=suscripciones_plugin_menu?start={$nav_count}{$str_search}#wf-suscriptores'>{$page_count}</a> ";
                    			}
                    			$nav_count += $items_per_page;                        // el nav_count arranca en 0, y si los items por pagina son 50, se ira sumando de 50 en 50
                    			$page_count++;                                        // cada iteracion suma un numero de pagina
                    		}
                    
                    		$navbar = "<section style='display: inline-block; float: right;'>$navbar</section>";                   // barra de paginacion lista
                    		
                    		echo $navbar;
                    	}   
        
        echo '     </div>
                </div>';
       	
                

    Cuando le doy al numero de pagina, me tira un error de permisos, exactamente me dice «Lo siento, no tienes permisos para acceder a esta página.». Y no se mucho pero calculo que sera que hay que registrar la URL o algo asi.

    PD: En el codigo deje los comentarios que hice para entender bien yo el codigo que encontré. Lo iba a borrar pero lo deje por las dudas para que a lo mejor les sea mas facil entenderlo tambien.

  • El debate ‘Como configurar URLs para crear funciones en una pagina del panel de admin’ está cerrado a nuevas respuestas.