Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

[SOLUCIONADO] Añadir meta_key a 1200 entradas a la vez

Estas en el tema de Añadir meta_key a 1200 entradas a la vez en el foro de WordPress en Foros del Web. Buenas, leyendo por los foros he conseguido crear, en la pagina de creacion/edicion de entradas, una casilla de verificacion (checkbox) que al marcarla le añade ...
  #1 (permalink)  
Antiguo 24/09/2013, 23:18
 
Fecha de Ingreso: agosto-2013
Ubicación: Manresa -Barcelona
Mensajes: 7
Antigüedad: 10 años, 7 meses
Puntos: 0
Añadir meta_key a 1200 entradas a la vez

Buenas, leyendo por los foros he conseguido crear, en la pagina de creacion/edicion de entradas, una casilla de verificacion (checkbox) que al marcarla le añade al articulo un meta_key llamado _portada . Luego en el index del theme con el código query_posts('meta_key=_portada'); hago que solo se muestren en la portada las entradas que lleven ese meta_key. Eso va perfecto para un blog nuevo ya que cada vez que creas una entrada decides, marcando el checkbox, si quieres que aparezca en la portada o no.... pero el problema lo tengo en mi blog wordpress ya que tengo mas de 1200 entradas y todas ellas no tienen el checkbox marcado; por lo tanto no tienen el meta_key, alser anteriores a la creacion del codigo. Ahora he de ir editando las entradas una a una para marcar el checkbox ya que quiero que todas las entradas antigüas salgan en la portada paginadas. Es un trabajo de chinos. A alguien se le ocurre alguna forma de añadir el meta_key _portada a todas las entradas de una vez?. Gracias

Última edición por mikelinos; 25/09/2013 a las 00:25
  #2 (permalink)  
Antiguo 25/09/2013, 00:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Añadir meta_key a 1200 entradas a la vez

wordpress se basa en una base de datos, la estructura de la cual desconozco, pero siendo así será fácil localizar la tabla que guarda las entradas y el campo que guarda el checkbox:

Código MySQL:
Ver original
  1. UPDATE tablaentradas SET campoCheck=1;

Te conectas via phpmyadmin u otro cliente de mysql a la base de datos y ejecutas esa consulta.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 25/09/2013 a las 06:14
  #3 (permalink)  
Antiguo 25/09/2013, 06:30
 
Fecha de Ingreso: agosto-2013
Ubicación: Manresa -Barcelona
Mensajes: 7
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Añadir meta_key a 1200 entradas a la vez

Gracias por la respuesta y con ella has abierto la puerta por la que realizar lo que pretendo pero no funcionará. Me explico, el porner el valor 1 al checkbox de todas las entradas no soluciona todo el problema ya que solo se generará el meta_key _portada cuando entre en la pantalla edición de cada una de las entradas por lo que estaré en la misma situación...pego el código para que se vea todo el proceso.
Código PHP:
Ver original
  1. <?
  2. add_action('add_meta_boxes', 'add_checkbox_portada');
  3.  
  4. function add_checkbox_portada() {
  5.     add_meta_box('es_portada', 'En portada', 'print_checkbox_portada', 'post', 'side');
  6. }
  7.  
  8. function print_checkbox_portada() {
  9.         global $post;
  10.     $checked = get_post_meta($post->ID, '_portada', true) ? 'checked="checked"' : '';
  11.     echo '<label for="checkbox_es_portada">Mostrar en portada <input id="checkbox_es_portada" name="es_portada" type="checkbox" value="1" '.$checked.'/></label>';
  12. }
  13.  
  14. add_action('save_post', 'save_checkbox_portada');
  15.  
  16. function save_checkbox_portada($post_id){
  17.         // Si la llamada es un autosave, no queremos hacer nada
  18.         if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
  19.                 return $post_id;
  20.  
  21.         // Comprobamos los permisos del usuario
  22.        if ( !current_user_can( 'edit_post', $post_id ) )
  23.                 return $post_id;
  24.  
  25.        if ($_POST['es_portada']){
  26.                 // Si el checkbox está marcado, añadimos el meta key
  27.                 add_post_meta($post_id, '_portada', '1');
  28.         }else{
  29.                 // Si no está marcado, borramos el meta key
  30.                 delete_post_meta($post_id, '_portada');
  31.         }
  32. }
  33.  
  34. function get_posts_portada(){
  35.         $portada = new WP_query('meta_key=_portada');
  36.     if (! $portada->have_posts()) {
  37.                 $portada = new WP_query();
  38.         }
  39.  
  40.         while ( $portada->have_posts() ) : $portada->the_post();
  41.         ?>
  42.         <div class="post_portada">
  43.             <h2><a href="<? the_permalink() ?>" title="<? the_title() ?>"><? the_title() ?></a></h2>
  44.             <? the_excerpt() ?>
  45.             <a href="<? the_permalink() ?>" title="<? the_title() ?>">Leer entrada</a>
  46.         </div>
  47.         <?
  48.         endwhile;
  49.         wp_reset_query();
  50. }
  51.  
  52. ?>
El código no es mio, es de Felix de http://blog.corunet.com/seleccionar-que-posts-mostrar-en-wordpress/#more-130
Yo entiendo que el proceso es el siguiente:
Nueva entrada (el checkbox por defecto sale sin marcar)--> si marcas el checkbox al guardar la entrada se crea el meta_key ="_portada", y si el checkbox está desmarcado no hace nada.
Edición de una entrada ya creada--> al abrirla se comprueba el estado del checkbox... si está marcado genera el meta_key="_portada" y si el checkbox está desmarcado borra el meta_key="_portada".
Haciendo la consulta que me propones para que quede el checkbox de todas las entradas esten marcados "1" no se generará el meta_key ="_portada" hasta que entre en la pantalla de edición de entradas.
Entonces quizás la solución pase por hacer una consulta en la que se de el valor "1" a los ckeckbox y que además añada el meta_key="_portada" a todas las entradas. (corrígeme si me equivoco).
El problema es que he estado mirando la base de datos y no se que tablas son las que contienen los valores de la consulta. Si alguien que conozca el sistema de tablas de wordpress puede decirme cual seria la consulta exacta sql que he de hacer para conseguir mi proposito le estaría enormemente agradecido.

Última edición por mikelinos; 25/09/2013 a las 06:38
  #4 (permalink)  
Antiguo 26/09/2013, 01:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Añadir meta_key a 1200 entradas a la vez

Los sistemas basados en una base de datos todo lo que crean o no crean lo hacen en función de lo que esta guardado en la bbdd. Luego los meta_keys también, es decir cuando se presenta la portada, hay un script que hace una consulta a la base de datos para obtener que debe mostrar en la portada, sean posts o meta_keys... si lo que sale en la portada depende solo de ese checkbox luego la solución es la que te di.

Viendo el código que has pasado yo buscaría el código de la classe WP_query donde podrás ver como consulta los post de portada. Y el código de la función add_post_meta($post_id, '_portada', '1') donde verás que modificación hace sobre la base de datos para agregar un meta al post...

(Ahora viendo los parametros de esta última función, te sugeriria que busques una tabla de meta_keys, fijate que la función recibe el id del post y el meta_key.... como el número de meta_keys de un post debe ser N la solución es guardarlos en una tabla aparte)...

Si es el caso
Código MySQL:
Ver original
  1. INSERT INTO tablametakeys SELECT idPost,'_portada','1' FROM tablaPosts


esto crearia el meta_key de todos tus post...


1200 post quieres poner en portada????
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 26/09/2013 a las 01:29
  #5 (permalink)  
Antiguo 26/09/2013, 17:10
 
Fecha de Ingreso: agosto-2013
Ubicación: Manresa -Barcelona
Mensajes: 7
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Añadir meta_key a 1200 entradas a la vez

Utilizando esta consulta puedo añadir perfectamente el meta:key
Código MySQL:
Ver original
  1. INSERT INTO wp_postmeta(post_id, meta_key, meta_value) VALUES (20192, '_portada', 1);
Ahora solo necesito crear una cosnsulta que vaya extrayendo las post_id de los post de la tabla wp_posts y les vaya añadiendo el meta_key

Señalar que la tabla wp_posts el indice de los posts es ID, no encuentro el campo post_id por ningun lado de la estructura
  #6 (permalink)  
Antiguo 27/09/2013, 00:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Añadir meta_key a 1200 entradas a la vez

Si eso inserta el meta_key _poratada al post 20192 luego

Cita:
...Señalar que la tabla wp_posts el indice de los posts es ID...
Código MySQL:
Ver original
  1. INSERT INTO wp_postmeta(post_id, meta_key, meta_value) SELECT ID, '_portada', 1 FROM wp_posts;

esto insertará un meta_key para cada post de la tabla wp_posts....

Si usas la clausula WHERE <condicion> incluso podrias seleccionar los posts en función de alguna característica....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 29/09/2013, 17:44
 
Fecha de Ingreso: agosto-2013
Ubicación: Manresa -Barcelona
Mensajes: 7
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Añadir meta_key a 1200 entradas a la vez

Gracias Quimfv, has dado en el clavo!!, ha funcionado de cine y me he ahorrado horas de curro. Repito muchas gracias, moltes gràcies!!

Última edición por mikelinos; 29/09/2013 a las 17:54

Etiquetas: entradas, meta, php, tag, vez
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:47.