P
prog
Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Mostrar Listado de Enlaces de Videos, con Notificacion de Enlace Roto, y Aporte
Este es mi primer tutorial, intentare explicarlo lo mejor que pueda.
he visto varias veces en el foro, donde pueden encontrar un sistema para mostrar los enlaces de peliculas, (aunque se puede usar para cualquier cosa, yo utilizo este sistema en algunas paginas, para crear entradillas antes del texto.), he de decir, que aunque el codigo es funcional, no esta de mas revisarlo, añadir un poco de seguridad al formulario, los estilos no estan depurados, etc, etc, lo he creado asi, con la intencion de crear una base, por donde comenzar, dependera de cada uno, adaptarlo a sus necesidades.
Edito: he añadido una funcion para que los usuarios puedan subir enlaces.
Bueno, les voy a explicar como crear esto

Para empezar, vamos a crear un metabox de opciones, en cada entrada, donde añadiremos los enlaces, y demas informacion. para eso, tenemos que introducir este codigo en functions.php.
No he comentado el codigo, se entiende bastante bien, pero hay que tener en cuenta unas configuraciones que hay que realizar.
Son estas
No he querido meter el listado completo de server, porque es un listado grande, y muchos sitios, solo utilizan unas pocas opciones, creo que es mejor que lo personalice cada uno como quiera.
si quereis añadir mas campos, solo teneis que seguir los pasos de como he creado los campos.
Deberia apareceros algo asi, cuando creeis una entrada

Como ya he dicho, no estan depurados los estilos.
En esa pantalla podeis ver los diferentes select donde podeis seleccionar las diferentes opciones, y un campo para introducir el enlace.
Si pulsais sobre "Nueva Pelicula" se añadira un nuevo campo vacio para que introduzcais otro nuevo enlace, si por algun motivo, ya no quereis mostrar la informacion de un enlace, porque que ha caido, o cualquier motivo, pulsais sobre "remove" y ese campo desaparecera, despues de añadir, modificar, o borrar, guardais la pagina y ya tendreis los enlaces listos para mostrarlos.
Para mostrar los enlaces es necesario introducir en single.php siempre dentro del loop, (si quereis mostrarlo fuera del loop, tendreis que añadir la variable "global $post") este codigo.
y este en la hoja de stilos, style.css
Son estilo basicos, pero os da una idea de como puede quedar.
El resultado sera algo asi

A la derecha, vereis un select, donde pone, ok o caido, y un boton de actualizar, si se pulsa sobre ese boton, se puede cambiar el estado, si esta en ok, culaquiera que visite la pagina, puede cambiarlo, y ponerlo como caido. para que este boton funcione, hay que añadir este codigo arriba del todo, en el archivo, header.php
Este codigo se encarga de actualizar el estado del enlace.
Y eso esto, con esto, tendreis la base, para poder crear vuestro propio sistema de gestion de enlaces.
Mejoras que se le podria hacer, pues miles, desde mostrar el logo del servidor alojado, en vez del nombre, añadir mas campos, por supuesto darle un estilo encondiciones, cambiar el boton de actualizar el estado, por uno que aparezca un popup, donde pueda seleccionar si esta correcto ono, y y si le añades un contador, cuando llegue a cierta cantidad, de mensajes como que esta caido, que se elimine automaticamente, o pase a revision, mostrar en la pagina principal de wordpress, un listado con los post, donde se ha notificado que hay enlaces caidos........
Como veis, son muchas las posibilidades, y es cuestion de vuestra imaginacion.
Esto se puede conseguir con un sencillo formulario, solo tenemos que añadir este codigo, en single.php, abajo del que muestra las peliculas
hay que tener en cuenta, esta parte del codigo
estas es la llamada global a las variables donde introducimos las diferentes opciones.
este codigo muestra algo como esto

Hay el usuario, podra seleccionar los diferentes campos, e introducir un enlace. y el boton para hacer el aporte.
para que este codigo funcione, es necesario introducir el siguiente codigo en el header.php, arriba del todo.
Y con esto, ya tendremos el codigo listo para funcionar.
si solo quereis que los usuarios registrados puedan aportar, tendreis que envolver el codigo que va en single.php entre is_user_logged_in
Cualquier duda, citarme en en vuestra consulta, asi puedo verlo en las notificaciones, y no tengo que estar pendiente de entrar en el post a cada rato.
Salud
Este es mi primer tutorial, intentare explicarlo lo mejor que pueda.
he visto varias veces en el foro, donde pueden encontrar un sistema para mostrar los enlaces de peliculas, (aunque se puede usar para cualquier cosa, yo utilizo este sistema en algunas paginas, para crear entradillas antes del texto.), he de decir, que aunque el codigo es funcional, no esta de mas revisarlo, añadir un poco de seguridad al formulario, los estilos no estan depurados, etc, etc, lo he creado asi, con la intencion de crear una base, por donde comenzar, dependera de cada uno, adaptarlo a sus necesidades.
Edito: he añadido una funcion para que los usuarios puedan subir enlaces.
Bueno, les voy a explicar como crear esto

Para empezar, vamos a crear un metabox de opciones, en cada entrada, donde añadiremos los enlaces, y demas informacion. para eso, tenemos que introducir este codigo en functions.php.
PHP:
<?php
$nombre_servidor = array('servidor1','servidor2','servidor3'); // aqui tendran que poner los nombres de los serividores
$tipo_audio = array('audio1','audio2','audior3'); // aqui el idioma del audio
$tipo_calidad = array('calidad1','calidad2','calidad3'); // la calidad del video
$enlace_roto = array('ok', 'caido'); // esto es para informar si el enlace esta ok o caido, pueden poner lo que quieran
//en todas pueden poner todas las opciones que quieran.
function Print_peliculas_fileds($cnt, $p = null) {
global $nombre_servidor;
global $tipo_audio;
global $tipo_calidad;
global $enlace_roto;
if ($p === null){
$enlace = $servidor = $audio = $calidad = $roto = '';
}else{
$servidor = $p['servidor'];
$audio = $p['audio'];
$calidad = $p['calidad'];
$enlace = $p['enlace'];
$roto = $p['roto'];
}
$retu = '<p style="margin-bottom: 22px;">';
$retu .= '<label>Servidor</label> ';
$retu .= '<select name="peliculas_data['.$cnt.'][servidor] id="servidor"> ';
foreach ($nombre_servidor as $nombre_servidores)
{
if( $nombre_servidores == $servidor ) {
$retu .= '<option value="'. $servidor .'" selected="slelected" >'. $servidor .'</option>';
} else {
$retu .= '<option value="'. $nombre_servidores .'">'. $nombre_servidores .'</option>';
}
};
$retu .= '</select>';
$retu .= '<label>Audio :</label> ';
$retu .= '<select name="peliculas_data['.$cnt.'][audio] id="audio"> ';
foreach ($tipo_audio as $tipo_audios)
{
if( $tipo_audios == $audio ) {
$retu .= '<option value="'. $audio .'" selected="slelected" >'. $audio .'</option>';
} else {
$retu .= '<option value="'. $tipo_audios .'">'. $tipo_audios .'</option>';
}
};
$retu .= '</select>';
$retu .= ' <label>Calidad :</label>';
$retu .= '<select name="peliculas_data['.$cnt.'][calidad] id="audio"> ';
foreach ($tipo_calidad as $tipo_calidades)
{
if( $tipo_calidades == $calidad ) {
$retu .= '<option value="'. $calidad .'" selected="slelected" >'. $calidad .'</option>';
} else {
$retu .= '<option value="'. $tipo_calidades .'">'. $tipo_calidades .'</option>';
}
};
$retu .= '</select>';
$retu .= ' <label>Enlace Roto :</label>';
$retu .= '<select name="peliculas_data['.$cnt.'][roto] id="audio"> ';
foreach ($enlace_roto as $enlace_rotos)
{
if( $enlace_rotos == $roto ) {
$retu .= '<option value="'. $roto .'" selected="slelected" >'. $roto .'</option>';
} else {
$retu .= '<option value="'. $enlace_rotos .'">'. $enlace_rotos .'</option>';
}
};
$retu .= '</select>';
$retu .= '</br>';
$retu .= ' <label>enlace :</label>';
$retu .= ' <input type="text" style="width: 80%;" name="peliculas_data['.$cnt.'][enlace]" value="'. $enlace .'"/>';
$retu .= ' <span class="remove">Remove</span>';
$retu .= '</p>';
return $retu;
}
//add custom field - peliculas
add_action("add_meta_boxes", "object_init");
function object_init(){
add_meta_box("peliculas_meta_id", "Peliculas:","peliculas_meta", "post", "normal", "low");
}
function peliculas_meta(){
global $nombre_servidor;
global $tipo_audio;
global $tipo_calidad;
global $enlace_roto;
global $post;
$data = get_post_meta($post->ID,"peliculas_data",true);
echo '<div id="peliculas_items">';
$c = 0;
if (count($data) > 0){
foreach((array)$data as $p ){
if (isset($p['calidad']) || isset($p['audio'])|| isset($p['servidor'])|| isset($p['enlace'])|| isset($p['roto'])){
echo Print_peliculas_fileds($c,$p);
$c = $c +1;
}
}
}
echo '</div>';
?>
<span id="here"></span>
<span class="add"><?php echo __('Nueva Pelicula'); ?></span>
<script>
var $ =jQuery.noConflict();
$(document).ready(function() {
var count = <?php echo $c - 1; ?>; // substract 1 from $c
$(".add").click(function() {
count = count + 1;
$('#peliculas_items').append('<p style="margin-bottom: 22px;"><label>Servidor</label><select name="peliculas_data[' + count + '][servidor] id="servidor"><?php
foreach ($nombre_servidor as $nombre_servidores) {echo '<option value="'. $nombre_servidores .'">'. $nombre_servidores .'</option>'; };
?></select><label>Audio</label><select name="peliculas_data[' + count + '][audio] id="audio"><?php
foreach ($tipo_audio as $tipo_audios) {echo '<option value="'. $tipo_audios .'">'. $tipo_audios .'</option>'; };
?></select><label>Calidad</label><select name="peliculas_data[' + count + '][calidad] id="calidad"><?php
foreach ($tipo_calidad as $tipo_calidades) {echo '<option value="'. $tipo_calidades .'">'. $tipo_calidades .'</option>'; };
?></select><label>Enlace roto:</label><select name="peliculas_data[' + count + '][roto] id="roto"><?php
foreach ($enlace_roto as $enlace_rotos) {echo '<option value="'. $enlace_rotos .'">'. $enlace_rotos .'</option>'; };
?></select></br><label>enlace :</label><br><input type="text" style="width: 80%;" name="peliculas_data[' + count + '][enlace]" value=""/><br><span class="remove">Remove</span></p>');
return false;
});
$(".remove").live('click', function() {
$(this).parent().remove();
});
});
</script>
<style>#peliculas_items {list-style: none;}</style>
<?php
}
//Save product peliculas
add_action('save_post', 'guardar_peliculas');
function guardar_peliculas($post_id){
global $post;
// to prevent metadata or custom fields from disappearing...
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
// OK, we're authenticated: we need to find and save the data
if (isset($_POST['peliculas_data'])){
$data = $_POST['peliculas_data'];
update_post_meta($post_id,'peliculas_data',$data);
}else{
delete_post_meta($post_id,'peliculas_data');
}
}
No he comentado el codigo, se entiende bastante bien, pero hay que tener en cuenta unas configuraciones que hay que realizar.
Son estas
PHP:
$nombre_servidor = array('servidor1','servidor2','servidor3'); // aqui tendran que poner los nombres de los serividores
$tipo_audio = array('audio1','audio2','audior3'); // aqui el idioma del audio
$tipo_calidad = array('calidad1','calidad2','calidad3'); // la calidad del video
$enlace_roto = array('ok', 'caido'); // esto es para informar si el enlace esta ok o caido, pueden poner lo que quieran
//en todas pueden poner todas las opciones que quieran.
No he querido meter el listado completo de server, porque es un listado grande, y muchos sitios, solo utilizan unas pocas opciones, creo que es mejor que lo personalice cada uno como quiera.
si quereis añadir mas campos, solo teneis que seguir los pasos de como he creado los campos.
Deberia apareceros algo asi, cuando creeis una entrada

Como ya he dicho, no estan depurados los estilos.
En esa pantalla podeis ver los diferentes select donde podeis seleccionar las diferentes opciones, y un campo para introducir el enlace.
Si pulsais sobre "Nueva Pelicula" se añadira un nuevo campo vacio para que introduzcais otro nuevo enlace, si por algun motivo, ya no quereis mostrar la informacion de un enlace, porque que ha caido, o cualquier motivo, pulsais sobre "remove" y ese campo desaparecera, despues de añadir, modificar, o borrar, guardais la pagina y ya tendreis los enlaces listos para mostrarlos.
Para mostrar los enlaces es necesario introducir en single.php siempre dentro del loop, (si quereis mostrarlo fuera del loop, tendreis que añadir la variable "global $post") este codigo.
PHP:
<?php
$data = get_post_meta($post->ID,"peliculas_data",true);
global $enlace_roto;
echo '<div class="links_servs">';
echo ' <table>';
echo ' <tbody>';
echo ' <tr>';
echo ' <th>SERVIDOR</th>';
echo ' <th>AUDIO</th>';
echo ' <th>CALIDAD</th>';
echo ' <th>DESCARGAR</th>';
echo ' <th>¿ENLACE ROTO?</th>';
echo ' </tr>';
$cnt = 0;
if (count($data) > 0){
foreach((array)$data as $p ){
if (isset($p['calidad']) || isset($p['audio'])|| isset($p['servidor'])|| isset($p['enlace'])|| isset($p['roto'])){
echo ' <tr>';
echo ' <td class="server"> '.$p['servidor'].'</td>';
echo ' <td class="idioma">'.$p['audio'].'</td>';
echo ' <td class="calidad">'.$p['calidad'].'</td>';
echo ' <td><a href="'.$p['enlace'].'" class="url_download" target="_blank">DESCARGAR</a></td>';
echo ' <td>';
echo ' <form method="post" id="adduser" action="';
echo the_permalink();
echo ' ">';
echo ' <select name="roto" id="audio"> ';
foreach ($enlace_roto as $enlace_rotos)
{
if( $enlace_rotos == $p['roto'] ) {
echo ' <option value="'. $p['roto'] .'" selected="slelected" >'. $p['roto'] .'</option>';
} else {
echo ' <option value="'. $enlace_rotos .'">'. $enlace_rotos .'</option>';
}
};
echo ' </select>';
echo ' <p class="form-submit">';
echo ' <input name="updateuser" type="submit" id="updateuser" class="submit button" value="Actualizar" />';
echo ' <input name="seccion" type="hidden" id="action" value="'.$cnt.'" />';
echo ' </p>';
echo ' </form> ';
echo ' </td>';
echo ' </tr>';
} $cnt++;
}
}
echo ' </tbody>';
echo ' </table>';
echo '</div>';
?>
y este en la hoja de stilos, style.css
PHP:
form#adduser {float: left;width: 100%;margin-top: 3px;}
select#audio {float: left;width: 64px;margin-right: 10px;}
p.form-submit {float: left;margin: -1px !important;width: 50px;}
.links_servs{font:14px/1.2 arial,verdana,tahoma;color:#333;width:610px;margin: 0 auto 0 5px;}
.links_servs h4{margin:15px 0;padding:0;}
.links_servs table{margin:0;padding:0;border:none;width:610px;text-align:center;}
.links_servs th{padding:10px;width:130px;text-align:center; font-size: 90%;}
.links_servs th:last-child{width:270px;}
.links_servs tr:hover{background:#FFD65C;}
.links_servs tr:first-child{border:none;background:#546591;color:#fff;font-size: 12px;}
.links_servs td{font:14px/25px arial,verdana,tahoma;color:#000;text-align:center;}
.links_servs tr:first-child+tr td{border:none;}
.links_servs a,.links_servs .url_download{border-radius:3px;color:#666;background: url("http://www.newpct.com/ficha.inc/JqueryTabs/images/btn-tab.png") repeat scroll 0 0 rgba(0, 0, 0, 0); color: #FFFFFF;
display: block;
font-weight: bold;
height: 25px;
margin: 0 7px;
padding-top: 5px;
text-align: center;
text-decoration: none;
width: 110px;
font-size: 11px;}
.links_servs .url_download{cursor:pointer;}
.links_servs p{margin:0;padding:0;}
.links_servs img{width:30px;}
a.add_links_front{display:block;background:#668CFF;float:left;font:13px/33px arial,verdana,tahoma;color:#fff;border-radius:3px;padding:0 8px; margin-top:10px;}
a.add_links_front:hover{background:#809FFF;}
.add_links_front{padding:10px;}
.add_links_front h2{font-size:18px;margin:0 0 10px;}
.add_links_front input[type="checkbox"]{display:none;}
.add_links_front label[for]{display:block;float:left;width:auto;white-space:nowrap;background:#99B3FF;border:1px #809FFF solid;padding:0 10px;font:13px/33px arial,verdana,tahoma;color:#fff;border-radius:3px;cursor:pointer;clear:both;margin:7px 0;}
.add_links_front label[for]:hover,.add_links_front input[type="checkbox"]:checked+label[for]{background:#668CFF;}
.add_links_front .links_div{display:none;clear:both;overflow:hidden;}
.add_links_front input[type="checkbox"]:checked+label+ .links_div{display:block;}
.add_links_front .button-primary{display:block;float:left;background:#EBB000;font:13px/28px arial,verdana,tahoma;color:#fff;padding:0 8px;border-radius:3px;cursor:pointer;margin:15px 0;}
.add_links_front .button-primary:hover{background:#D19D00;}
.add_links_front .del{display:block;width:16px;height:33px;float:left;background:url(../img/del.png) no-repeat center;overflow:hidden;text-indent:-100px;}
.add_links_front ul{list-style:none;clear:both;margin:0;font:13px/33px arial,verdana,tahoma;}
.add_links_front li{padding:10px 0;}
.add_links_front li label{display:block;float:left;width:auto;}
.add_links_front li input,.add_links_front li select{display:block;width:90px;float:left;border:1px #ccc solid;height:33px;margin:0 3px;}
.add_links_front li input.url{width:180px;}
p.submit{clear:both;}
.add_links_front input[type="submit"]{clear:both;display:block;float:left;height:33px;line-height:33px;padding:0 10px;background:#444;border-radius:3px;color:#fff;}
.add_links_front input[type="submit"]:hover{background:#222;}
tr:nth-child(2n + 0){
background: #D8E7E6;
}
Son estilo basicos, pero os da una idea de como puede quedar.
El resultado sera algo asi

A la derecha, vereis un select, donde pone, ok o caido, y un boton de actualizar, si se pulsa sobre ese boton, se puede cambiar el estado, si esta en ok, culaquiera que visite la pagina, puede cambiarlo, y ponerlo como caido. para que este boton funcione, hay que añadir este codigo arriba del todo, en el archivo, header.php
PHP:
<?php
if ( $_POST['seccion'] != '') {
$add_to_ID = $_POST['seccion'];
$note = $_POST['roto'];
$existing_list = get_post_meta($post->ID,"peliculas_data",true);
$existing_list[$add_to_ID]['roto'] = $note;
if ( !empty( $_POST['roto'] ) )
update_post_meta($post->ID,'peliculas_data',$existing_list);
}
?>
Este codigo se encarga de actualizar el estado del enlace.
Y eso esto, con esto, tendreis la base, para poder crear vuestro propio sistema de gestion de enlaces.
Mejoras que se le podria hacer, pues miles, desde mostrar el logo del servidor alojado, en vez del nombre, añadir mas campos, por supuesto darle un estilo encondiciones, cambiar el boton de actualizar el estado, por uno que aparezca un popup, donde pueda seleccionar si esta correcto ono, y y si le añades un contador, cuando llegue a cierta cantidad, de mensajes como que esta caido, que se elimine automaticamente, o pase a revision, mostrar en la pagina principal de wordpress, un listado con los post, donde se ha notificado que hay enlaces caidos........
Como veis, son muchas las posibilidades, y es cuestion de vuestra imaginacion.
MrAloys
y como podria hacer para que otros usuarios agregaran sus propios enlaces?
Esto se puede conseguir con un sencillo formulario, solo tenemos que añadir este codigo, en single.php, abajo del que muestra las peliculas
PHP:
<?php
global $nombre_servidor;
global $tipo_audio;
global $tipo_calidad;
global $enlace_roto;
echo '<h1>Subida de enlace</h1>';
echo '<div class="links_servs">';
echo ' <form method="post" id="adduser" action="';
echo the_permalink();
echo ' ">';
echo ' <table>';
echo ' <tbody>';
echo ' <tr>';
echo ' <th>SERVIDOR</th>';
echo ' <th>AUDIO</th>';
echo ' <th>CALIDAD</th>';
echo ' <th>¿ENLACE ROTO?</th>';
echo ' <th>APORTAR</th>';
echo ' </tr>';
echo ' <tr>';
echo ' <td>';
echo ' <select name="servidor" class="aporte"> ';
foreach ($nombre_servidor as $nombre_servidors)
{
echo ' <option value="'. $nombre_servidors .'">'. $nombre_servidors .'</option>';
};
echo ' </select>';
echo ' </td>';
echo ' <td>';
echo ' <select name="audio" class="aporte"> ';
foreach ($tipo_audio as $tipo_audios)
{
echo ' <option value="'. $tipo_audios .'">'. $tipo_audios .'</option>';
};
echo ' </select>';
echo ' </td>';
echo ' <td>';
echo ' <select name="calidad" class="aporte"> ';
foreach ($tipo_calidad as $tipo_calidads)
{
echo ' <option value="'. $tipo_calidads .'">'. $tipo_calidads .'</option>';
};
echo ' </select>';
echo ' </td>';
echo ' <td>';
echo ' <select name="estado" class="aporte"> ';
foreach ($enlace_roto as $enlace_rotos)
{
echo ' <option value="'. $enlace_rotos .'">'. $enlace_rotos .'</option>';
};
echo ' </select>';
echo ' </td>';
echo ' <td>';
echo ' <input name="updateuser" type="submit" id="updateuser" class="submit button" value="Aportar" />';
echo ' <input name="nuevo_id" type="hidden" id="action" value="'.$cnt.'" />';
echo ' </td>';
echo ' </tr>';
echo ' </tbody>';
echo ' </table>';
echo ' <br><label>Enlace</label><br>';
echo ' <input type="text" style="width: 100%;"name="enlace" id="long" value=""/>';
echo ' </form> ';
echo '</div>';
?>
hay que tener en cuenta, esta parte del codigo
PHP:
global $nombre_servidor;
global $tipo_audio;
global $tipo_calidad;
global $enlace_roto;
estas es la llamada global a las variables donde introducimos las diferentes opciones.
este codigo muestra algo como esto

Hay el usuario, podra seleccionar los diferentes campos, e introducir un enlace. y el boton para hacer el aporte.
para que este codigo funcione, es necesario introducir el siguiente codigo en el header.php, arriba del todo.
PHP:
if ( !empty( $_POST['servidor']) and !empty( $_POST['enlace'])) {
$add_to_ID = $_POST['nuevo_id'];
$servidor = $_POST['servidor'];
$audio = $_POST['audio'];
$calidad = $_POST['calidad'];
$estado = $_POST['estado'];
$enlace= $_POST['enlace'];
$existing_list = get_post_meta($post->ID,"peliculas_data",true);
$existing_list[$add_to_ID]['servidor'] = $servidor;
$existing_list[$add_to_ID]['audio'] = $audio;
$existing_list[$add_to_ID]['calidad'] = $calidad;
$existing_list[$add_to_ID]['roto'] = $estado;
$existing_list[$add_to_ID]['enlace'] = $enlace;
var_dump($existing_list);
if ( !empty( $_POST['enlace'] ) )
update_post_meta($post->ID,'peliculas_data',$existing_list);
}
Y con esto, ya tendremos el codigo listo para funcionar.
si solo quereis que los usuarios registrados puedan aportar, tendreis que envolver el codigo que va en single.php entre is_user_logged_in
PHP:
<?php
if ( is_user_logged_in() ) {
//AQUI EL CODIGO
}
?>
Cualquier duda, citarme en en vuestra consulta, asi puedo verlo en las notificaciones, y no tengo que estar pendiente de entrar en el post a cada rato.
Salud
Última edición: