Programar landing page independiente en WordPress Parte 2

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn

En el apartado anterior vimos como programar una sencilla landing page para WordPress parte 1 que enviaba los correos y guardaba en la base de datos los campos campaign, company, subjet, email y date del formulario. En esta ocasión vamos a programar plugin para WordPress que lea los datos de la base de datos y los muestre en una tabla, con la opción de descargar un archivo csv.

A continuación los tres archivos de código utilizados, están comentados por lo que no me extenderé más en ellos.

gbi-campaigns.php

Fichero principal del plugin, con el menú, los estilos y acciones para ajax.

<?php
/*
Plugin Name: GBI Campaigns
Plugin URI: http://www.garberinformatica.com
Description: Campaigns web www.garberinformatica.com
Version: 1.0
Author: Jesús García
Author URI: http://www.garberinformatica.com
*/

//conector de acción, para iniciar el menú
add_action('admin_menu', 'campaign_menu');
function campaign_menu() {

	add_menu_page('Gestión Campañas', //page title
	'Gestión Campañas', //menu title
	'manage_options', //capabilities
	'campaign', //menu slug
	'campaign' //function
	);

}

require_once(plugin_dir_path(__FILE__) . '/funciones-campaigns.php');
require_once(plugin_dir_path(__FILE__) . '/funciones-jquery-campaigns.php');

// Scripts datatables
function gbiwl_datatables_scripts() {
    wp_deregister_script( 'datatables-js' );
    wp_register_script( 'datatable-js', '//cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js' , '', '', true );
    wp_enqueue_script( 'datatable-js' );
}
add_action( 'admin_enqueue_scripts', 'gbiwl_datatables_scripts' );
add_action( 'wp_enqueue_scripts', 'gbiwl_datatables_scripts' );


// Estilos datatables
function gbiwl_datatables_styles() {
	wp_deregister_style( 'datatables_style' );
	wp_register_style('datatables_style','https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css');
	wp_enqueue_style( 'datatables_style' );
}
add_action( 'admin_enqueue_scripts', 'gbiwl_datatables_styles' );

add_action('admin_footer', 'footer_campaigns');

add_action('wp_head', 'myplugin_ajaxurl');
// para poder usar ajaxurl
function myplugin_ajaxurl() {
    echo '<script type="text/javascript">
           var ajaxurl = "' . admin_url('admin-ajax.php') . '";
         </script>';
}

?>

funciones-campaigns.php

funciones de acceso a bbdd y creación del csv

<?php

// añadimos wp_ajax action para poder llamar a csv_campaigns desde ajax
add_action("wp_ajax_csv_campaigns","csv_campaigns");
function csv_campaigns(){
    if ( ! is_super_admin() ) {
		return;
	}

    $filename = "landing.csv";

    // primera línea del archivo csv con los nombres de las columnas
    $header_row = array(
      0 => 'ID',
      1 => 'Campaign',
      2 => 'Company',
      3 => 'Subject',
      4 => 'Email',
      5 => 'Date',
    );

	$data_rows = array();

    global $wpdb;

    $path = get_home_path();

    // ruta al fichero, en wp-content/uploads
    $ruta = get_home_path() . "/wp-content/uploads/" . $filename;

    // leemos la tabla de la base de datos
    $conex = $wpdb->get_results("SELECT * FROM `gbi_campaigns`");

    // creamos las columnas del csv
    foreach ($conex as $u){
        $row = array();
    	$row[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][0] = $u->id;
    	$row[1] = $u->campaign;
    	$row[2] = $u->company;
    	$row[3] = $u->subject;
        $row[4] = $u->email;
        $row[5] = $u->date;
    	$data_rows[] = $row;
    }


    // abrimos un fichero para crear el nuevo csv
    $fh = fopen( $ruta, 'w' );
  	fprintf( $fh, chr(0xEF) . chr(0xBB) . chr(0xBF) );
  	header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
  	header( 'Content-Description: File Transfer' );
  	header( 'Content-type: text/csv' );
  	header( "Content-Disposition: attachment; filename={$filename}" );
  	header( 'Expires: 0' );
  	header( 'Pragma: public' );
  	fputcsv( $fh, $header_row );
  	foreach ( $data_rows as $data_row ) {
  		fputcsv( $fh, $data_row );
  	}
    fclose( $fh );

    // al ser una llamada a ajax hay que terminar inmediatamente y devoler la respuesta
    die();

}


function campaign(){

    defined('ABSPATH') or die("Cannot access pages directly.");

    global $user;
    global $wp_roles;
    global $wpdb;

    $user = wp_get_current_user();
    $roles = $user->roles;
    $role = array_shift($roles);

    $user_id = wp_get_current_user();

    if( is_user_logged_in() ) {
        $rol = isset($wp_roles->role_names[$role]) ? translate_user_role($wp_roles->role_names[$role] ) : false; ;
    }else{
        echo 'Debe estar logueado para poder ver esta página';
    }
    if ( $rol == "Administrador" ){

        ?>

        <h1 class="wp-heading-inline">Tabla Campañas</h1>
        <?php

          // leemos los datos de la bbdd para la tabla
          $campaignsdb = $wpdb->get_results("SELECT * FROM `gbi_campaigns`");

        // Array of WP_User objects.
        ?>

        <!--  tabla para mostrar los datos de las campañas -->
        <table name="tab_campaings" id="tab_campaings" class='wp-list-table widefat fixed striped posts'>
          <thead>
            <tr>
              <th>ID</th>
              <th>Campaign</th>
              <th>Company</th>
              <th>Subject</th>
              <th>Email</th>
              <th>Date</th>
            </tr>
          </thead>
    <?php
      // rellenamos las filas
        foreach ( $campaignsdb as $contact ) {
        ?>
            <tr>
              <td><?php echo esc_html ( $contact->id); ?></TD>
              <td><?php echo esc_html ( $contact->campaign); ?></TD>
              <td><?php echo esc_html ( $contact->company); ?></TD>
              <td><?php echo esc_html ( $contact->subject); ?></TD>
              <td><?php echo esc_html ( $contact->email); ?></td>
              <td><?php echo esc_html ( $contact->date); ?></td>
            </tr>
          <?php
        }
    ?>
          </table>

          <br>
          <!-- Botón para generar el csv y descargarlo -->
          <button  type="button" class="button button-primary" id='crear_csv'> Exportar CSV </button><br>

      <?php

  }else {
    echo 'NO TIENE PERMISO PARA VER ESTA SECCIÓN 2';
  }

}



?>

funciones-jquery-campaigns.php

funciones jquery para manejar la tabla y la descarga del csv

<?php

function footer_campaigns()
{
?>
<SCRIPT type="text/javascript" >

    jQuery(document).ready(function($){

      // indicamos que la tabla tab_campaigns es datatable
        jQuery('#tab_campaings').DataTable();


        // al pusar en el botón de exporar csv creamos el csv mediante una
        // llamada a ajax, después lo descargamos
        $('#crear_csv').click(function(){
            var data = {
              'action' : "csv_campaigns",
              'url' : ajaxurl
            };

            jQuery.post(ajaxurl, data, function(response) {
                window.location.href="wp-content/uploads/landing.csv";
          	});

        });
    });

</SCRIPT>

<?php
}
?>

Eso es todo, espero que os haya sido de utilidad. Cualquier duda o comentario será bienvenida.

Algunos enlaces de interés:

https://codex.wordpress.org/AJAX_in_Plugins

https://codex.wordpress.org/Class_Reference/wpdb

https://datatables.net/

Puedes descargar el plugin aquí

Más...

Programación web en Alicante

Programación Web en Alicante

En los días que corren, la dinámica en Internet domina muchas áreas de la vida de los ciudadanos en todas partes del

Ventajas WordPress

Ventajas de usar WordPress

¿Tienes dudas de las ventajas de utilizar WordPress para tu proyecto? ¿No piensas que sea el sistema ideal para llevarlo a cabo?

Más...

Programación web en Alicante

Programación Web en Alicante

En los días que corren, la dinámica en Internet domina muchas áreas de la vida de los ciudadanos en todas partes del

Ventajas WordPress

Ventajas de usar WordPress

¿Tienes dudas de las ventajas de utilizar WordPress para tu proyecto? ¿No piensas que sea el sistema ideal para llevarlo a cabo?

Deja un comentario