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

theme options select categoria no guarda

Estas en el tema de theme options select categoria no guarda en el foro de WordPress en Foros del Web. Hola a todos! queria hacerles una pregunta, encontre este script que estoy intentando hacer funcionar para mostrar las categorias en el theme option pero estoy ...
  #1 (permalink)  
Antiguo 24/10/2012, 20:57
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 1 mes
Puntos: 1
theme options select categoria no guarda

Hola a todos!

queria hacerles una pregunta, encontre este script que estoy intentando hacer funcionar para mostrar las categorias en el theme option pero estoy teniendo algunos problemas para hacerla funcionar..

Código:
<select class="aselect" id="<?php echo $value['id']; ?>"  name="<?php echo $value['id']; ?>" multiple="multiple">
    <?php
    global $options;
        foreach ($options as $value) {
            if (get_settings( $value['id'] ) === FALSE) { $$value['id'] = $value['std']; } else { $$value['id'] = get_settings( $value['id'] );
            }
        }
    $cats = get_categories(); 
    foreach($cats as $cat) { ?>
    <option value="<?php echo $cat->cat_ID; ?>"  <?php selected($tt_catbox_1, $cat->cat_ID); ?>><?php echo $cat->cat_name; ?></option>
    <?php } ?>
</select>
Las categorias me aparecen, pero solo las que tienen posts asociados.. hay alguna manera de que aparezcan todas, incluidas las que no tienen posts?

y por otro lado, si bien funciona el select multiple, al apretar guardar.. no guarda ninguna informacion..

lo he sacado de aqui foro wordpress

saludos y espero puedan ayudarme!!
  #2 (permalink)  
Antiguo 25/10/2012, 09:19
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: theme options select categoria no guarda

He logrado hacer aparecer todas las categorias, pero sigo sin poder guardar las opciones.
En este caso, guarda si el nombre del select no tiene [] luego de su nombre (es decir para una seleccion).
Pero al poner [] intentando habilitar multiples, se pierde lo guardado

Código:
<select id="<?php echo $value['id']; ?>"  name="<?php echo $value['id']; ?>[]" multiple="multiple">
    
    <?php
        $arg  = array(
        'type'                     => 'post',
        'child_of'                 => 0,
        'parent'                   => '',
        'orderby'                  => 'name',
        'order'                    => 'ASC',
        'hide_empty'               => 0,
        'taxonomy'                 => 'category');
    
        $cats = get_categories($arg); 
        foreach($cats as $cat) { ?>
            <option value="<?php echo $cat->cat_ID; ?>"	<?php if ( get_settings( ($value['id'].'[]') ) == $cat->cat_ID) {
            echo ' selected="selected"'; 
            } ?>><?php echo $cat->cat_name; ?></option>
        <?php } ?>
</select>
  #3 (permalink)  
Antiguo 25/10/2012, 09:29
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Respuesta: theme options select categoria no guarda

Debe ser lo mal y poco que ando durmiendo últimamente, pero en tu código no veo nada referente a la Options API o la Settings API, aunque supongo que lo tengas por algún lado...

¿Puedes mostrar algo más de código?

__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #4 (permalink)  
Antiguo 25/10/2012, 09:32
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: theme options select categoria no guarda

pero claro!, esto es un poco de lo que ya tenia funcionando.. (y sigue funcionando, solo que el select no se guarda)..

Código:
if ( function_exists('register_sidebar') )

$themename = "XXXXXXXXX";
$shortname = "tmt";
$options = array (

array(    "name" => "Selección de categorías para el menú principal",
        "type" => "title"),
array(    "type" => "open"),
array(    "name" => "Categorías: ",
        "desc" => 'Máximo ideal: 8".',
        "id" => $shortname."_lista_categorias",
        "std" => "",
        "type" => "categoria"),
array(    "type" => "close"),
);
function mytheme_add_admin() {
    global $themename, $shortname, $options;
    if ( $_GET['page'] == basename(__FILE__) ) {
        if ( 'save' == $_REQUEST['action'] ) {
                foreach ($options as $value) {
                    update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }

                foreach ($options as $value) {
                    if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ]  ); } else { delete_option( $value['id'] ); } }

                header("Location: themes.php?page=functions.php&saved=true");
                die;
        } else if( 'reset' == $_REQUEST['action'] ) {
            foreach ($options as $value) {
                delete_option( $value['id'] ); }
            header("Location: themes.php?page=functions.php&reset=true");
            die;
        }
    }
    add_menu_page($themename." Options", "".$themename." Options", 'edit_themes', basename(__FILE__), 'mytheme_admin');
}

function mytheme_admin() {

    global $themename, $shortname, $options;

    if ( $_REQUEST['saved'] ) echo '<div id="message" class="updated fade"><p><strong>'.$themename.' settings saved.</strong></p></div>';
    if ( $_REQUEST['reset'] ) echo '<div id="message" class="updated fade"><p><strong>'.$themename.' settings reset.</strong></p></div>';

?>

<div class="wrap">
<h2><?php echo $themename; ?></h2>

<form method="post">

<?php
foreach ($options as $value) {
switch ( $value['type'] ) {

case "open":
?>
<table width="100%" border="0" style="background-color:#eef5fb; padding:10px;">

<?php break;

case "close":
?>

</table><br />

<?php break;

case "title":
?>
<table width="100%" border="0" style="background-color:#3d5c6d; color: #fff; padding:5px 10px;"><tr>
    <td colspan="2"><h3 style="font-family:Arial, Helvetica, sans-serif;"><?php echo $value['name']; ?></h3></td>
</tr>
</table>

<?php break;

case 'categoria':
?>

<tr height="50">
    <td width="20%" valign="middle"><strong><?php echo $value['name']; ?></strong></td>
    <td width="80%" valign="middle">
		<select id="<?php echo $value['id']; ?>"  name="<?php echo $value['id']; ?>[]" multiple="multiple">
			<?php
				$arg  = array(
				'type'                     => 'post',
				'child_of'                 => 0,
				'parent'                   => '',
				'orderby'                  => 'name',
				'order'                    => 'ASC',
				'hide_empty'               => 0,
				'taxonomy'                 => 'category');
			
				$cats = get_categories($arg); 
				foreach($cats as $cat) { ?>
                    <option value="<?php echo $cat->cat_ID; ?>"	<?php if ( get_settings( ($value['id'].'[]') ) == $cat->cat_ID) {
                    echo ' selected="selected"'; 
					} ?>><?php echo $cat->cat_name; ?></option>
				<?php } ?>
		</select>
    </td>
</tr>

<tr>
    <td colspan="2"><small><?php echo $value['desc']; ?></small></td>
</tr>
<?php break;

Última edición por zanguanga; 30/11/2012 a las 10:46 Razón: Por solicitud expresa del autor
  #5 (permalink)  
Antiguo 25/10/2012, 09:46
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: theme options select categoria no guarda

mi problema es que al darle nombre al select name="<?php echo $value['id']; ?>" me guarda el id de la categoria..

pero al hacerlo name="<?php echo $value['id']; ?>[]" no existe dicho array en php y por tanto no guarda los valores, y por tanto en la web al get_option no trae nada
  #6 (permalink)  
Antiguo 25/10/2012, 10:05
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Respuesta: theme options select categoria no guarda

Lo de que ando de mal dormir últimamente es serio, para nada es broma, por eso no entiendo bien tu código, pero estás de suerte, justo aquí tengo un pedazo de código con el que hice funcionar un slider, osea, el objetivo era asignar al slider una categoría determinada para que se mostraran en él los posts bajo dicha categoría. Te lo paso y adaptas lo tuyo a lo mio, o viceversa
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Slider Setting
  4.  */
  5. ?>
  6. <?php
  7. // How many slides to show
  8. add_option( 'featured-slider-count', '3' );
  9. // Whish category?
  10. add_option( 'featured-slider-category' );
  11.  
  12. if ( $_REQUEST['action'] == 'save-slider' ) :
  13.     $msg_slider = true;
  14.     if ( $_POST['slider-count'] < '3' || '' ):
  15.         $slider_count = '-1';
  16.     else :
  17.         $slider_count = $_POST['slider-count'];
  18.     endif;
  19.     update_option( 'featured-slider-count', $slider_count );
  20.     update_option( 'featured-slider-category', $_POST['slider-category'] );
  21. endif;
  22. ?>
  23. <div id="cefnac-slider-setting" class="box-setting">
  24. <?php if ( $msg_slider ) : ?>
  25.     <div id="masage" class="updated"><p><?php _e( 'Slider Setting Updated', 'cefnac' ); ?></p></div>
  26. <?php endif; ?>
  27.     <h3><?php _e( 'Slider Setting', 'cefnac' ); ?></h3>
  28.     <form name="featured-slider" method="post">
  29.         <input type="text" name="slider-count" value="<?php echo get_option( 'featured-slider-count' ) ?>">
  30.         <fieldset>
  31.             <ul>
  32. <?php
  33. $categories = get_categories();
  34. foreach ( $categories as $category ) :
  35.     $checked_value = ( $category->cat_name == get_cat_name( get_option( 'featured-slider-category' ) ) ) ? 'checked="checked"' : '';
  36. ?>
  37.             <li><input type="radio" name="slider-category" value="<?php echo $category->term_id; ?>" <?php echo $checked_value; ?>>
  38.             <label><?php echo $category->cat_name; ?></label></li>
  39. <?php
  40. endforeach;
  41. ?>
  42.         </ul>
  43.     </fieldset>
  44.     <input class="button-primary" type="submit" name="save" value="<?php _e( 'Save Slider Setting', 'cefnac' ); ?>">
  45.     <input type="hidden" name="action" value="save-slider" />
  46.     </form>
  47. </div><!-- #cefnac-slider-setting -->

Saludos.
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #7 (permalink)  
Antiguo 25/10/2012, 10:14
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: theme options select categoria no guarda

no te preocupes, somos 2 los maldormidos y con funcionamiento extraño >D

finalmente pude resolverlo, era bastante simple pero no lograba verlo. De todas formas me guardo tu codigo, ya que intente hacer eso con el slider del sitio y no lo logre (tuviendo que crear una categoria que si un post la tiene, lo manda al slider)
te agradezco mucho tu aporte..

esta es mi solucion..
hice algunos echo y me di cuenta que el problema era que el output daba "array". Asique hice un implode:

$cats_selected = implode(', ', get_settings($value['id']));

para luego un nuevo condicional con in_array:

if ( in_array($cat->cat_ID, get_settings($value['id']))) {

Código:
<?php
$cats_selected = implode(', ', get_settings($value['id']));
?>
<select id="<?php echo $value['id']; ?>"  name="tmt_lista_categorias[]" multiple="multiple" size="10">
	<?php
		$arg  = array(
		'type'                     => 'post',
		'child_of'                 => 0,
		'parent'                   => '',
		'orderby'                  => 'name',
		'order'                    => 'ASC',
		'hide_empty'               => 0,
		'taxonomy'                 => 'category');
	
		
		$cats = get_categories($arg); 
		foreach($cats as $cat) { ?>
			<option value="<?php echo $cat->cat_ID; ?>"	<?php if ( in_array($cat->cat_ID, get_settings($value['id']))) {
			echo ' selected="selected"'; 
			} ?>><?php echo $cat->cat_name; ?></option>
		<?php } ?>
</select>
de nuevo muchas gracias por la ayuda y la paciencia.. saludos y a descansar!

Etiquetas: options, php, post, select, themes, guardar, categorias
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 08:33.