Esqueleto de widget

<?php
/*
Plugin Name: Entrada aleatoria
Plugin URI: http://jamesbruce.me/
Description: Muestra una entrada aleatoria
Author: James Bruce
Version: 1
Author URI: http://jamesbruce.me/
*/


class EntradasWidget extends WP_Widget
{
 function EntradasWidget()
 {
 $widget_ops = array('classname' => 'EntradasWidget', 'description' => 'Muestra entrada aleatoria' );
 $this->WP_Widget('EntradasWidget', 'Entrada aleatoria con thumbnail', $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;;
 
 // WIDGET CODE GOES HERE
 echo "<h1>Ola k ase?</h1>";
 
 echo $after_widget;
 }
 
}

add_action( 'widgets_init', create_function('', 'return register_widget("EntradasWidget");') );?>

Plugin validator!

function validator_get_url(){
 return get_permalink();
}


function validator_boton($contenido) {
 
 return $contenido.'<input type="button" value="Valida la página" onclick="location.href=\'http://validator.w3.org/check?uri='.urlencode(validator_get_url()).'\'"/>';
 
}
function validator_shortcode(){
 return '<input type="button" value="Valida la página" onclick="location.href=\'http://validator.w3.org/check?uri='.urlencode(validator_get_url()).'\'"/>';
}

add_filter( 'the_content', 'validator_boton' );

add_shortcode('validator', 'validator_shortcode');

Plugin censura

Código del plugin

 <?php
/*
Plugin Name: Censura
Plugin URI: https://es.wikiquote.org/wiki/Portada
Description: Censura palabras que pueden ofender
Author: Jota Peich
Version: 1.0
Author URI: http://intelisen.com
*/

function censura_get_palabras(){
 return explode( ",", get_option("censura_palabras"));

}

function censura_filtro($contenido) {
 $palabras = censura_get_palabras();
 foreach($palabras as $palabra){
 $contenido= str_replace($palabra, '<span class="censura">'.str_repeat("*",strlen($palabra)).'</span>' , $contenido);
 
 }
 return $contenido;
 
}


add_filter( 'the_content', 'censura_filtro' );


add_action( 'wp_enqueue_scripts', 'censura_pon_css' );

/**
 * Enqueue plugin style-file
 */
function censura_pon_css() {
 // Respects SSL, Style.css is relative to the current file
 wp_register_style( 'prefix-style', plugins_url('style.css', __FILE__) );
 wp_enqueue_style( 'prefix-style' );
}
add_action( 'admin_menu', 'censura_menu' );
add_action( 'admin_init', 'censura_settings');

function censura_settings() {
 register_setting( 'censura-group', 'censura_palabras' );
};

function censura_menu() {
 add_options_page( 'Opciones censura', 'Censura', 'manage_options', 'censura-identifier', 'censura_options' );
}

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

 <div>
 <?php screen_icon(); ?>
 <h2>Opciones censura</h2>

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

 <p>Introduzca las palabras a censurar</p>
 <input size="70" type="text" name="censura_palabras" value="<?php echo get_option('censura_palabras'); ?>" />

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

Añadir opciones a un plugin wordpress

Un ejemplo:

 add_action( 'admin_menu', 'frasedeldia_menu' );
add_action( 'admin_init', 'frasedeldia_settings');

function frasedeldia_settings() {
 register_setting( 'frasedeldia-group', 'frasedeldia_text' );
};

function frasedeldia_menu() {
 add_options_page( 'Opciones frase del dia', 'Frase del día', 'manage_options', 'frasedeldia-identifier', 'frasedeldia_options' );
}

function frasedeldia_options() {
 if ( !current_user_can( 'manage_options' ) ) {
 wp_die( 'You do not have sufficient permissions to access this page.' );
 }
?>

 <div>
 <?php screen_icon(); ?>
 <h2>Opciones frase del día</h2>

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

 <p>Introduzca frase</p>
 <input type="text" name="frasedeldia_text" value="<?php echo get_option('frasedeldia_text'); ?>" />

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


Ejercicio detalle

Función en adb:

   function creaSelect($tabla,$campo,$id="selRegistro"){
        $filas=$this->seleccionar($tabla,0,-1);
        ?>
            <select id="<?=$id?>">
                <option value="0">Seleccione...</option>
            <?php
            foreach($filas as $fila){
                ?>
                 <option value="<?=$fila["id$tabla"]?>"><?=$fila["$campo"]?></option>
                <?php
            }
            ?>
            </select>
                 <?php
    }
 

Detalle:

require_once 'adb.php';
$adb=new adb();

$adb->creaSelect('test', 'nombre');

Detalle, script:

 $(function() {
            $( "#selRegistro" ).change(function(){
                console.log($(this).val());
                   $.get("ajax.php",{detalle:1,tabla:'test',id:$(this).val()}, function(data, status){
                 
                 $("#resultado").html(data);
    });
        });
            });

ajax.php

if (isset($_GET['detalle']) && isset($_GET['id']) && isset($_GET['tabla'])){
    $filas=$adb->seleccionarId($_GET['tabla'], $_GET['id']);
    echo json_encode($filas);
}

Cambio en seleccionar:

 $sql = "select * from $tabla " . (empty($cond) ? '' : " where $cond ") . (($numero!=-1)?" limit $inicio,$numero ":"");

Cambios en adb para introducir ajax

Función en adb:

function seleccionarAuto($tabla, $campo, $term="",$inicio = 0, $numero = 10) {
        try {

            $sql = "select * from $tabla  where $campo like '%$term%'  limit $inicio,$numero ";

            $sqlst = $this->con->prepare($sql);
            $sqlst->execute();
            $this->filas = $sqlst->fetchAll(PDO::FETCH_ASSOC);
            $res=array();
            foreach ($this->filas as $fila){
                $res[]=$fila[$campo];
            }
            return $res;
        } catch (Exception $ex) {
            $this->tratarError("seleccionar", $ex->getMessage(), $sql);
            die($ex->getMessage());
        }
    }

La página ajax.php:

require_once "adb.php";
$adb=new adb();
if (isset($_GET['buscar']) && isset($_GET['tabla']) && isset($_GET['campo'])){
    $filas=$adb->seleccionarAuto($_GET['tabla'],$_GET['campo'],$_GET['term'],0,10);
    echo json_encode($filas);
}

La llamada:

 $(function() {
            $( "#buscar" ).autocomplete({
              source: "ajax.php?buscar=1&tabla=test&campo=nombre",
      minLength: 2,  

        });
            });

Busqueda con get (ajax 2)

$nombres="ana,juan,eva,luis,rosa,jose,marc";
$nombres=explode(",",$nombres);

if (!empty($_GET['cadena'])) {
$res="";

foreach($nombres as $nombre){
        if (strpos($nombre,$_GET['cadena'])!==false){
            $res.=$nombre." ";
        }
    }
        echo $res;
}
else{
echo "Faltan datos";
}

HTML:

$(document).ready(function(){
                $("#nombre").keyup(function(){
                    var nom=$("#nombre").val();
             $.get("busqueda.php",{cadena:nom}, function(data, status){
                 
                 $("#resultado").html(data);
        console.log("Datos: " + data + "\nStatus: " + status);
    });       
                });
             
    });