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&oacute;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&eacute;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&iacute;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>&iquest;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&oacute;n",
        "direccion" => "Direcci&oacute;n",
        "horarios" => "Horarios",
        "descripcion_usuario" => "Descripci&oacute;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&oacute;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&oacute;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&iacute;<input type="radio" name="servicio_a_domicilio" id="servicio_a_domicilio_no" value="no" />No
    <label for="telefonos">Tel&eacute;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&oacute;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
scroll top