尝试从部分工作的前端保存自定义帖子类型

时间:2011-09-13 作者:dabito

我已经创建了以下自定义帖子类型(lugares表示位置),其中包含一个自定义的玉米饼分类法,它在后端运行良好:

/**
*   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;
}
从前端表单添加新条目部分有效。

表单的代码如下:

<?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;
[这根本不起作用。我可以使用一些技巧来调试它,因为即使wp的debug设置为true,我也无法获得很多信息。]

编辑:它现在部分工作。也就是说,帖子已保存,但无法从后端编辑。

我看不出我做错了什么

3 个回复
最合适的回答,由SO网友:dabito 整理而成

事实证明,自定义帖子类型的名称与我在表单中添加的类型之间存在差异。一个是“lugares”,另一个是“lugares”。从这一点上,我认为功能被破坏了。

按如下方式重新构建了register post类型:

add_action(\'init\', \'lugar_register\');
函数lugar\\u寄存器(){

$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,
    \'hierarchical\' => false,
    \'menu_position\' => null,
    \'supports\' => array(\'title\',\'editor\',\'author\',\'thumbnail\',\'comments\',\'custom-fields\')
  );

register_post_type( \'lugar\' , $args );
}

命名自定义类型时必须非常小心。

SO网友:Flo Mincucci

你试过了吗TDO Mini Forms? 它允许用户从前端发布内容。我不知道它是否允许提交自定义类型,但至少可以给你一个提示。

SO网友:Joost de Valk

看来你找到了问题,但对于其他读者,我发现Gravity Forms 如果你将其与this wp.org plugin 以支持自定义帖子类型。

结束

相关推荐

Front-End Post Submission

我正在尝试添加一个表单,用户可以从前端提交帖子。我正在学习本教程:http://wpshout。com/wordpress从前端提交帖子/我正在做的是添加this code 到我的一个页面模板。表单显示正常,但当我单击“提交”按钮时,它会显示“Page not found error“”许多评论者说这不起作用。谁能给我指出正确的方向吗?代码是否不完整?有缺陷吗?我做错什么了吗?谢谢Towfiq I。