Cercando di salvare il tipo di post personalizzato dal frontend parzialmente funzionante
-
30-10-2019 - |
Domanda
Ho creato il seguente tipo di post personalizzato (Lugares significa luoghi) con una tassonomia personalizzata di tacos e funziona bene come backend:
/**
* Custom post-type lugares
**/
add_action('init', 'lugares_register');
function lugares_register() {
$labels = array(
'name' => _x('Lugares', 'post type general name'),
'singular_name' => _x('Lugar', 'post type singular name'),
'add_new' => _x('Agregar nuevo', 'lugar'),
'add_new_item' => __('Agregar lugar'),
'edit_item' => __('Editar lugar'),
'new_item' => __('Nuevo lugar'),
'view_item' => __('Ver lugar'),
'search_items' => __('Buscar lugares'),
'not_found' => __('No hay lugares'),
'not_found_in_trash' => __('No hay lugares en la papelera'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','thumbnail','comments','custom-fields','revisions')
);
register_post_type( 'lugares' , $args );
}
register_taxonomy("tacos", array("lugares"), array("hierarchical" => true, "label" => "Tacos", "singular_label" => "Tacos", "rewrite" => true));
add_action("admin_init", "admin_init_lugares");
function admin_init_lugares(){
add_meta_box("descripcion_usuario", "Descripción usuario", "descripcion_usuario", "lugares", "normal", "low");
add_meta_box("direccion", "Dirección", "direccion", "lugares", "normal", "low");
add_meta_box("horarios", "Horarios", "horarios", "lugares", "normal", "low");
add_meta_box("telefonos", "Teléfonos", "telefonos", "lugares", "side", "low");
add_meta_box("garantia_tdt", "Garantía TourDelTaco", "garantia_tdt", "lugares", "side", "low");
add_meta_box("servicio_a_domicilio", "Servicio a domicilio", "servicio_a_domicilio", "lugares", "side", "low");
}
function descripcion_usuario() {
global $post;
$custom = get_post_custom($post->ID);
$descripcion_usuario = ( !empty($custom["descripcion_usuario"][0]) ) ? $custom["descripcion_usuario"][0] : "";
?>
<p><label>Descripción usuario:</label><br />
<textarea cols="50" rows="5" name="descripcion_usuario"><?php echo $descripcion_usuario; ?></textarea></p>
<?php
}
function direccion(){
global $post;
$custom = get_post_custom($post->ID);
$direccion = ( !empty($custom["direccion"][0]) ) ? $custom["direccion"][0] : "";
?>
<p><label>Dirección:</label><br />
<textarea cols="50" rows="5" name="direccion"><?php echo $direccion; ?></textarea></p>
<?php
}
function horarios() {
global $post;
$custom = get_post_custom($post->ID);
$horarios = ( !empty($custom["horarios"][0]) ) ? $custom["horarios"][0]: "";
?>
<p><label>Horarios:</label><br />
<input type="text" name="horarios" value="<?php echo $horarios; ?>"/></p>
<?php
}
function telefonos() {
global $post;
$custom = get_post_custom($post->ID);
$telefonos = ( !empty($custom["telefonos"][0]) ) ? $custom["telefonos"][0] : "";
?>
<p><label>Teléfonos:</label><br />
<textarea cols="38" rows="3" name="telefonos"><?php echo $telefonos; ?></textarea></p>
<?php
}
function garantia_tdt() {
global $post;
$custom = get_post_custom($post->ID);
$garantia_tdt = ( !empty($custom["garantia_tdt"][0]) ) ? $custom["garantia_tdt"][0] : "";
?>
<p><label>Garantía TourDelTaco:</label><br />
<input type="radio" id="garantia_tdt" name="garantia_tdt" value="si" <?php if ($garantia_tdt == 'si') echo 'checked';?>/> Si<br />
<input type="radio" id="garantia_tdt" name="garantia_tdt" value="no" <?php if ($garantia_tdt == 'no') echo 'checked';?>/> No
</p>
<?php
}
function servicio_a_domicilio() {
global $post;
$custom = get_post_custom($post->ID);
$servicio_a_domicilio = (!empty($custom["servicio_a_domicilio"][0])) ? $custom["servicio_a_domicilio"][0] : "";
?>
<p><label>¿Cuenta con servicio a domicilio?:</label><br />
<input type="radio" id="servicio_a_domicilio" name="servicio_a_domicilio" value="si" <?php if ($servicio_a_domicilio == 'si') echo 'checked';?>/> Si<br />
<input type="radio" id="servicio_a_domicilio" name="servicio_a_domicilio" value="no" <?php if ($servicio_a_domicilio == 'no') echo 'checked';?>/> No
</p>
<?php
}
add_action('save_post', 'save_details_lugares');
function save_details_lugares(){
global $post;
$custom_meta_fields = array( 'horarios','direccion','descripcion_usuario','garantia_tdt','telefonos','servicio_a_domicilio' );
foreach( $custom_meta_fields as $custom_meta_field ):
if(isset($_POST[$custom_meta_field]) && $_POST[$custom_meta_field] != ""):
update_post_meta($post->ID, $custom_meta_field, $_POST[$custom_meta_field]);
endif;
endforeach;
}
add_action("manage_posts_custom_column", "lugares_custom_columns");
add_filter("manage_edit-lugares_columns", "lugares_edit_columns");
function lugares_custom_columns($column){
global $post;
switch ($column) {
case "description":
the_excerpt();
break;
case "direccion":
$custom = get_post_custom();
echo $custom["direccion"][0];
break;
case "horarios":
$custom = get_post_custom();
echo $custom["horarios"][0];
break;
case "descripcion_usuario":
$custom = get_post_custom();
echo $custom["descripcion_usuario"][0];
break;
case "tacos":
echo get_the_term_list($post->ID, 'tacos', '', ', ','');
break;
}
}
function lugares_edit_columns($columns){
$columns = array(
"cb" => "<input type=\"checkbox\" />",
"title" => "Nombre del lugar",
"description" => "Descripción",
"direccion" => "Dirección",
"horarios" => "Horarios",
"descripcion_usuario" => "Descripción usuario",
"tacos" => "Tacos"
);
return $columns;
}
L'aggiunta di nuove voci da un modulo front-end funziona parzialmente.
Il codice nel modulo è questo:
<?php if ( empty($_POST) && !isset($_POST['agregar_lugar']) ) : ?>
<h2>Agregar un lugar...</h2>
<form id="" class="" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<label for="title">Nombre:</label><input type="text" name="title" id="title" />
<label for="direccion">Dirección:</label><input type="text" name="direccion" id="direccion" />
<label for="horarios">Horarios:</label><input type="text" name="horarios" id="horarios" />
<label for="descripcion_usuario">Descripción:</label><input type="text" name="descripcion_usuario" id="descripcion_usuario" />
<label for="servicio_a_domicilio">Servicio a domicilio:</label><input type="radio" name="servicio_a_domicilio" id="servicio_a_domicilio_si" value="si" />Sí<input type="radio" name="servicio_a_domicilio" id="servicio_a_domicilio_no" value="no" />No
<label for="telefonos">Teléfonos:</label><input type="text" name="telefonos" id="telefonos" />
<input type="submit" name="agregar_lugar" id="agregar-lugar" value="Agregar lugar">
</form>
<?php else:
$title = $_POST['title'];
$direccion = $_POST['direccion'];
$horarios = $_POST['horarios'];
$descripcion_usuario = $_POST['descripcion_usuario'];
$servicio_a_domicilio = $_POST['servicio_a_domicilio'];
$telefonos = $_POST['telefonos'];
$errores = array();
//title
if(empty($title))
$errores['title'] = 'Es obligatorio introducir un nombre.';
//direccion
if( empty($direccion) )
$errores['direccion'] = 'Es obligatorio introducir una dirección.';
if($servicio_a_domicilio !== 'si') $servicio_a_domicilio = 'no';
// guardar
$post = array(
'post_title' => $title,
'post_status' => 'draft',
'post_type' => 'Lugares',
'post_author' => 2
);
$lugares_post_ID = wp_insert_post($post);
endif;
E semplicemente non funziona. Potrei usare alcuni suggerimenti per il debug questo perché anche con il debug di WP impostato su True, non ho molte informazioni.
EDIT: ora funziona parzialmente. Cioè, i post vengono salvati, ma non possono essere modificati dal backend.
Non riesco a vedere cosa sto facendo di sbagliato
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange