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<?
add_action('add_meta_boxes', 'add_checkbox_portada');
function add_checkbox_portada() {
add_meta_box('es_portada', 'En portada', 'print_checkbox_portada', 'post', 'side');
}
function print_checkbox_portada() {
global $post;
$checked = get_post_meta($post->ID, '_portada', true) ? 'checked="checked"' : '';
echo '<label for="checkbox_es_portada">Mostrar en portada <input id="checkbox_es_portada" name="es_portada" type="checkbox" value="1" '.$checked.'/></label>';
}
add_action('save_post', 'save_checkbox_portada');
function save_checkbox_portada($post_id){
// Si la llamada es un autosave, no queremos hacer nada
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE
) return $post_id;
// Comprobamos los permisos del usuario
if ( !current_user_can( 'edit_post', $post_id ) )
return $post_id;
if ($_POST['es_portada']){
// Si el checkbox está marcado, añadimos el meta key
add_post_meta($post_id, '_portada', '1');
}else{
// Si no está marcado, borramos el meta key
delete_post_meta($post_id, '_portada');
}
}
function get_posts_portada(){
$portada = new WP_query('meta_key=_portada');
if (! $portada->have_posts()) {
$portada = new WP_query();
}
while ( $portada->have_posts() ) : $portada->the_post();
?>
<div class="post_portada">
<h2><a href="<? the_permalink() ?>" title="<? the_title() ?>"><? the_title() ?></a></h2>
<? the_excerpt() ?>
<a href="<? the_permalink() ?>" title="<? the_title() ?>">Leer entrada</a>
</div>
<?
endwhile;
wp_reset_query();
}
?>
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.