Plugin Frase del día: action, filter y widget

<?php
/*
 Plugin Name: Frase del día
 Plugin URI: https://es.wikiquote.org/wiki/Portada
 Description: Muestra una frase del día diferente
 Author: Jota Peich
 Version: 1.0
 Author URI: http://intelisen.com
 */

function frase_getFrase() {
 $upload = wp_upload_dir();

 $frases = file($upload['basedir'] . "/frases.txt");
 return $frases[rand(0, count($frases) - 1)];
}

function frase_ponFrase() {
 echo frase_getFrase();
}

add_action('admin_notices', 'frase_ponFrase');

function frase_filtro($contenido) {
 return $contenido . "<br/>" . frase_getFrase();
}

add_filter("the_content", 'frase_filtro');

class FraseWidget extends WP_Widget {

 function FraseWidget() {
 $widget_ops = array('classname' => 'FraseWidget', 'description' => 'Muestra una frase del día');
 $this->WP_Widget('FraseWidget', 'Frase del día', $widget_ops);
 }

 function form($instance) {
 $instance = wp_parse_args((array) $instance, array('title' => ''));
 $title = $instance['title'];
 ?>
 <p><label for="<?php echo $this->get_field_id('title'); ?>"><?= _e('Title') ?>: <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" /></label></p>
 <?php
 }

 function update($new_instance, $old_instance) {
 $instance = $old_instance;
 $instance['title'] = $new_instance['title'];
 return $instance;
 }

 function widget($args, $instance) {
 extract($args, EXTR_SKIP);

 echo $before_widget;
 $title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);

 if (!empty($title))
 echo $before_title . $title . $after_title;;

 echo frase_getFrase();

 echo $after_widget;
 }

}

add_action('widgets_init', create_function('', 'return register_widget("FraseWidget");'));

Crear host virtual

A la hora de desarrollar una web es conveniente tener configurado un host virtual. Así podemos acceder vía una web falsa. Por ejemplo, si estoy desarrollando la web miweb.com, puedo crear un host llamado miweb.dev para el desarrollo que apunte a la carpeta local.

¿Cómo hacerlo? Básicamente hay que hacer dos cosas: decirle a windows que ese dominio es local y configurar un host virtual.

Lo primero se hace en:

C:\Windows\System32\drivers\etc\hosts

Añadiendo lo siguiente:

127.0.0.1 miweb.dev

Lo segundo en C:\xampp\apache\conf\extra\httpd-vhosts.conf

Añadiendo lo siguiente:

<Directory “C:/xampp/htdocs/”>
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>

<VirtualHost *:80>
ServerAdmin webmaster@gmail.com
DocumentRoot “C:/xampp/htdocs/miweb”
ServerName miweb.dev
</VirtualHost>

Redirigir un dominio a un hosting

Cuando contratamos un hosting puede ser virtual o compartido, en cuyo caso por lo general nos proporcionan las dns que tenemos que poner en el dominio, o dedicado, en cuyo caso tenemos una ip donde está nuestro alojamiento.

En el primer caso tenemos que introducir las dns en el apartado que para tal fin tenga nuestro dominio:

dns

En el caso de tener una ip tenemos que redirigir los registros:

ip

Guardar datos en options

<?php

/*
 Plugin Name: Guarda datos
 Plugin URI: https://es.wikiquote.org/wiki/Portada
 Description: Guarda mi nombre y apellidos y nada más
 Author: Jota Peich
 Version: 1.0
 Author URI: http://intelisen.com
 */

add_action('admin_menu', 'guardar_menu');
add_action('admin_init', 'guardar_settings');

function guardar_settings() {
 register_setting('guardar-group', 'guardar_nombre');
 register_setting('guardar-group', 'guardar_apellido');
}

function guardar_menu() {
 add_options_page('Guardar datos personales', 'Guardar datos', 'manage_options', 'guardar-datos', 'guardar_options');
}

function guardar_options() {
 if (!current_user_can('manage_options')) {
 wp_die('No tiene permiso.');
 }
 ?>

 <div>
 <?php screen_icon(); ?>
 <h2>Guardar datos personales</h2>

 <form method="post" action="options.php">
 <?php
 settings_fields('guardar-group');
 do_settings_fields('guardar-group', '');
 ?>

 <p>Nombre</p>
 <input size="70" type="text" name="guardar_nombre" value="<?php echo get_option('guardar_nombre'); ?>" />
 <p>Apellido</p>
 <input size="70" type="text" name="guardar_apellido" value="<?php echo get_option('guardar_apellido'); ?>" />

 <?php
 submit_button();
 ?>
 </form>
 </div>
 <?php
}

Debuggar con NetBeans

En php.ini:

 

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
;xdebug.profiler_append = 0
xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.trace_output_dir = "C:\xampp\tmp"
xdebug.remote_port=9000

Ejercicio clase Empleado

Propiedades:

Nombre (pública)

Fecha Contrato (Privada)

Sueldo (Privada)

Constructor: Poner la fecha del contrato la de hoy

Funciones:

setSueldo($valor) Pone en sueldo el valor si está entre 600 y 3000

getSueldo() Nos devuelve el valor del sueldo

sueldoNeto() Nos devuelve el valor del sueldo menos el IRPF

IRPF() Nos devuelve el valor del IRPF (puede ser privada). Si el sueldo es entre 600 y 1000, 10%. Entre 1000 y 2000, 13%. Entre 2000 y 3000, 16%

Solución:

<?php

class empleado {

 public $nombre;
 private $fechaContrato;
 private $sueldo;

 function __construct() {
 $this->fechaContrato = date("d/m/Y");
 }

 function setSueldo($valor) {
 if ($valor >= 600 and $valor <= 3000) {
 $this->sueldo = $valor;
 }
 }

 function getSueldo() {
 return $this->sueldo;
 }

 private function irpf() {
 if ($this->getSueldo() <= 1000) {
 return .1;
 }
 if ($this->sueldo <= 2000) {
 return .13;
 }
 if ($this->sueldo <= 3000) {
 return .16;
 }
 return 0;
 }

 function sueldoNeto(){
 return $this->sueldo*(1-$this->irpf());
 }
}

$paco=new empleado();
$paco->setSueldo(1500);
echo $paco->sueldoNeto();

Programación orientada a objetos

<?php

class miClase {

 public $propiedad;

 function muestraContenido() {
 echo $this->propiedad;
 }

}

$obj1 = new miClase;
$obj2 = new miClase();
$obj1->propiedad = "Hola";
$obj2->propiedad = "Adios";

echo $obj1->propiedad;
$obj2->muestraContenido();

class Alumno {

 public $nombre;
 public $apellido;
 public $nota;
 private $cuota;

 function nombreCompleto() {
 echo $this->nombre . " " . $this->apellido;
 }

 function aprobado() {
 if ($this->nota >= 5) {
 return true;
 } else {
 return false;
 }
 }

 function cuota($valor) {
 if ($valor == 100 || $valor == 200 || $valor == 300) {
 $this->cuota = $valor;
 }
 }

 function anualidad() {
 return $this->cuota * 12;
 }

}

$juan = new Alumno();
$ana = new Alumno();
$juan->nombre = "Juan";
$juan->apellido = "Pérez";
$juan->nota = 6;
$juan->nombreCompleto();
if ($juan->aprobado()) {
 echo "Aprobado!!!";
}
$juan->cuota(200);
echo $juan->anualidad();

$ana->apellido = "Ana";