Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/09/2013, 06:30
mikelinos
 
Fecha de Ingreso: agosto-2013
Ubicación: Manresa -Barcelona
Mensajes: 7
Antigüedad: 10 años, 8 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