Buenas,
No estás haciendo el uso correcto de register_setting ni la creación del form.
Chequea el enlace que te paso para crear una página y guardar las opciones.
https://codex.wordpress.org/Creating_Options_Pages
Iniciador del debate
daschin2
(@daschin2)
Buenas adrián ya e estado viendo la pagina que comentaste y aqui esta el codigo de la pagina principal casi que calcado de la pagina
<?php
/*
Plugin Name: Prueba
Plugin URI: https://disortopedicos.com/
Description: Convieret el bojeto que aparece como oferta a %
Version:0.1
Author:Daschin2
Author URI:https://disortopedicos.com/
License:GPL
*/
add_action('admin_menu', 'menu_Woo_settings');
function menu_Woo_settings() {
add_menu_page('Woo_settings', 'Opciones', 'manage_options', 'WooSettings', 'Woosettings_page','',3);
add_action( 'admin_init', 'register_SKUAD_settings' );
defined( 'ABSPATH' ) or die( '¡Sin trampas!' );
}
function register_SKUAD_settings() {
register_setting( 'WooSettings-settings-group', 'SKUAD' );
}
function Woosettings_page(){
?>
<div class="wrap">
<h2>Opciones</h2>
<form method="post" action="saves.php">
<?php settings_fields( 'WooSettings-settings-group' );?>
<?php do_settings_sections( 'WooSettings-settings-group' );?>
<p><input type="checkbox", name="SKUAD", id="SKUAD",
value="<?php echo esc_attr( get_option('SKUAD') ); ?>" />SKU Desactivar</p>
<?php submit_button(); ?>
</form>
</div>
<?php }; ?>
pero lo que me confunde es el guardado aqui esta el codigo de saves.php
<?php
function wprincipiante_save_SKUAD(){
global $options;
foreach ($options as $value) {
if (get_option($value['id']) === FALSE) {
$$value['id'] = $value['FALSE'];
}
else {
$$value['id'] = get_option( $value['id'] );
}
}
if (trim('WooSettings-settings-group') != "")
}
?>
Se que el codigo de save.php esta mal pero no consigo corregirlo.
Esta es mi primera «inmercion» por asi decirlo en el mundo de los pluguins nunca he usado PHP y estoy aprendiendo sobre marcha
agradesco la ayuda
Hola @daschin2
El código que indicas no está tan calcado como dices. Sólo con la parte de código que sale debajo de «The below example uses the new Settings API to create and save your plugin options » y antes de «Example #2» ya puedes hacer lo que preguntas, no hace falta más código. El example 2 es lo mismo pero utilizando una clase PHP y el example 3 hace demasiadas cosas para que te fijes si estás aprendiendo.
Te apunto varios detalles para que tengas en cuenta. Espero que encuentres la solución final 😉
– El form debería apuntar a options.php para hacer uso del register_setting o a la misma página si quieres procesar tu el form mediante $_POST
– En el input de SKUAD le debes poner algún value, o no ponerle ninguno y que el checkbox devuelva el valor 1 o true por defecto, si no siempre guardará el valor que le asignas al value que en este caso siempre es nada.
– Para que el checkbox si está seleccionado se pinte correctamente deberás utilizar la función checked con el valor que tengas en bd y el value que le hayas dado al checkbox
– Como pista intenta depurar tu código haciéndote var_dump($variable); donde dudes si el código llega correctamente.
– El código que tienes en saves.php simplemente sirve para mostrar las options no para guardarlas.
– Mira en la base de datos si en la tabla options estás llegando a guardar un registro con meta_key = «SKUAD_value»
Espero haberte guiado un poco en los errores que estás cometiendo y que lo consigas. Ya comentarás en el foro cuando tengas resultados y marques el debate como resuelto.
Iniciador del debate
daschin2
(@daschin2)
Buenos dias/noches ya he pogresado en el guardado con las checkbox lo he intentado con mil convinaciones para que se verifique con el checked en el archivo options.php pero no he encontrado forma para que haga su funcion de guardar al hacer el click en el guardar aqui esta el codigo con el que he podido guardar
<input type="checkbox", id="SKUAD", name="SKUAD[SKU]"<?php checked( isset( $options['SKU'] ) ); ?>, value="SKU">
y en general el archivo es:
<?php
/*
Plugin Name: Prueba
Plugin URI: https://disortopedicos.com/
Description: Convieret el bojeto que aparece como oferta a %
Version:0.1
Author:Daschin2
Author URI:https://disortopedicos.com/
License:GPL
*/
add_action('admin_menu', 'menu_Woo_settings');
function menu_Woo_settings(){
add_menu_page('Woo_settings', 'Opciones', 'manage_options', 'WooSettings', 'Woosettings_page','',3);
defined( 'ABSPATH' ) or die( '¡Sin trampas!' );
add_action( 'admin_init', 'register_SKUAD' );
}
function register_SKUAD() {
register_setting( '$WooSettings_settings_group', 'SKUAD' );
}
function Woosettings_page(){
?>
<div class="wrap">
<h2>Opciones</h2>
<form method="post" action="options.php">
<?php settings_fields( '$WooSettings_settings_group' );?>
<?php do_settings_sections( '$WooSettings_settings_group' );?>
<?php $options = get_option( 'SKUAD' );?>
<p><input type="checkbox", id="SKUAD", name="SKUAD[SKU]"<?php checked( isset( $options['SKU'] ) ); ?>, value="SKU">SKU Desactivar</p>
<p><input type="checkbox", id="SKUAD",name="SKUAD[]", value="Prueba">Prueba</p>
<?php submit_button(); ?>
</form>
</div>
<?php };?>
me gustaria saber como se podria hacer que el codigo de guardado «checked» se ejecutara desde options.php he estado probando con este codigo
global $options;
function Woosettings_page(){
/*Comprobar si existe*/
if (isset($_POST['SKUAD'])) {
/*remplazar*/
foreach ($_POST['SKUAD'] as $value){
checked( $_POST['SKUAD']);
return 'SKUAD';
}
}
Iniciador del debate
daschin2
(@daschin2)
tambien he provado este que es hacer una array el codigo que falta el inicio es igual
function Woosettings_page(){
?>
<div class="wrap">
<h2>Opciones</h2>
<form method="post" action="options.php">
<?php $SKUAD = array();?>
<?php settings_fields( '$WooSettings_settings_group' );?>
<?php do_settings_sections( '$WooSettings_settings_group' );?>
<p><input type="checkbox", name="SKUAD[]", value="SKU">SKU Desactivar</p>
<p><input type="checkbox", name="SKUAD[]", value="Prueba">Prueba</p>
<?php submit_button(); ?>
</form>
</div>
pero en esta forma me es imposible que se guarde
Buenas,
Cuando lo guardas, ¿que valor tienes en la base de datos? O sea el registro que tengas en XX_options > meta_value = ‘SKUAD’ ¿qué valor tiene?
El checked mira bien la documentación, seguramente sería algo del estilo:
checked( $options['SKUAD'], 'SKU' );
Iniciador del debate
daschin2
(@daschin2)
lo que aparece en la base de datos es «SKUAD a:1:{s:3:»SKU»;s:3:»SKU»;}»
Iniciador del debate
daschin2
(@daschin2)
al poner otra checkbox con
<input type="checkbox", name="SKUAD[Prueba]"<?php checked( isset( $options['Prueba'] ) ); ?>, value="Prueba">
no lo toma y voy a revisar en la base de datos y tampoco aparece estoy seguro porque no lo detecta como una array o algo parecido y me lansa un error
Buenas,
En base de datos está correcto el guardado como a:1:{s:3:»SKU»;s:3:»SKU»;} ya que es un array serializado. Haciendo un get_option(‘SKUAD’) te retornaría correctamente los valores.
Igualmente haz lo siguiente:
Borra el registro en base de datos y quitale que sea un array.
Que sea solo:
<input type="checkbox" name="SKUAD" <?php checked(get_option('SKUAD'),'yes'); ?>, value="yes">
Espero que puedas hacer que funcione y, lo más importante, que entiendas como funciona.
En base de
Iniciador del debate
daschin2
(@daschin2)
Buenas muchas gracias ya tengo funcionando lo de las checkbox y ahora para hacer una accion con ellas tengo el siguiente codigo
function remover_sku($enabled){
if (empty($_POST['SKUAD'])){
return $false;
}else{
return $enabled;
}
}
add_filter( 'wc_product_sku_enabled', 'remover_sku' );
lo tengo linkeado por un include
actulmente tengo un problema porque puedo activar por primera vez pero al desactivarlo no vuelven a aparecer las SKU del woocommerce.
Creo que es algo que estoy haciendo mal con el empty
o alguna clase de declarasion que me borre algun valor de la variable
Hola @daschin2
Abre otro hilo para esa consulta y da esta por terminada para no mezclar temas.
Aunque sea el mismo proyecto para ti, una es asesoria de como hacer el guardado y esto es más una consulta con un filter.