从前端将图像添加到在CPT上发布的帖子

时间:2015-04-13 作者:JoseLazo

我创建了一个CPT,其中有一个页面,您可以从前端添加帖子。这是函数中的代码。php:

// Hook into the \'init\' action
add_action( \'init\', \'register_cpt_promociona\', 0 );

if ( ! function_exists(\'register_cpt_promociona\') ) {

    // Register Custom Post Type
    function register_cpt_promociona() {

        $labels = array(
            \'name\'                => _x( \'Promociones publicadas\', \'Post Type General Name\', \'ainder\' ),
            \'singular_name\'       => _x( \'Promociona\', \'Post Type Singular Name\', \'ainder\' ),
            \'menu_name\'           => __( \'Promociona\', \'ainder\' ),
            \'parent_item_colon\'   => __( \'Promoción padre\', \'ainder\' ),
            \'all_items\'           => __( \'Todas las Promociones\', \'ainder\' ),
            \'view_item\'           => __( \'Ver Promociones\', \'ainder\' ),
            \'add_new_item\'        => __( \'Tu Promoción\', \'ainder\' ),
            \'add_new\'             => __( \'Añadir nuevo\', \'ainder\' ),
            \'edit_item\'           => __( \'Editar Promoción\', \'ainder\' ),
            \'update_item\'         => __( \'Actualizar Promoción\', \'ainder\' ),
            \'search_items\'        => __( \'Buscar Promoción\', \'ainder\' ),
            \'not_found\'           => __( \'Ningna Promoción encontrada\', \'ainder\' ),
            \'not_found_in_trash\'  => __( \'Ningna Promoción encontrada en la papelera\', \'ainder\' ),
        );

        $rewrite = array(
            \'slug\'                => \'promociona\',
            \'with_front\'          => true,
            \'pages\'               => true,
            \'feeds\'               => true,
        );

        $args = array(
            \'label\'               => __( \'promociona\', \'ainder\' ),
            \'description\'         => __( \'CPT de Promociones de usuarios\', \'ainder\' ),
            \'labels\'              => $labels,
            \'supports\'            => array( \'title\', \'editor\', \'thumbnail\', \'author\', \'comments\', \'custom-fields\', ),
            \'taxonomies\'          => array( \'categoria-promociona\' ),
            \'hierarchical\'        => false,
            \'public\'              => true,
            \'show_ui\'             => true,
            \'show_in_menu\'        => true,
            \'show_in_nav_menus\'   => true,
            \'show_in_admin_bar\'   => true,
            \'menu_position\'       => 5,
            \'can_export\'          => true,
            \'has_archive\'         => true,
            \'exclude_from_search\' => false,
            \'publicly_queryable\'  => true,
            \'rewrite\'             => $rewrite,
        );

        register_post_type( \'promociona\', $args );

    } // end function register_cpt_promociona

} // end if (!function_exists)

// Lo enganchamos en la acción init y llamamos a la función create_promociona_taxonomies() cuando arranque
add_action( \'init\', \'create_promociona_taxonomies\', 0 );

// Creamos dos taxonomías, género y autor para el custom post type "promoción"
function create_promociona_taxonomies() {
    // Añadimos nueva taxonomía y la hacemos jerárquica (como las categorías por defecto)
    $labels = array(
        \'name\'              => _x( \'Categoría de la promoción\', \'taxonomy general name\' ),
        \'singular_name\'     => _x( \'Categoría promociona\', \'taxonomy singular name\' ),
        \'search_items\'      =>  __( \'Buscar por Categoría\' ),
        \'all_items\'         => __( \'Todas las Categorías\' ),
        \'parent_item\'       => __( \'Categoría padre\' ),
        \'parent_item_colon\' => __( \'Categoría padre:\' ),
        \'edit_item\'         => __( \'Editar Categoría\' ),
        \'update_item\'       => __( \'Actualizar Categoría\' ),
        \'add_new_item\'      => __( \'Añadir nueva Categoría\' ),
        \'new_item_name\'     => __( \'Nombre de la nueva Categoría\' ),
    );
    register_taxonomy( \'categoria-promociona\', 
        array( \'promociona\' ), 
            array(
                \'hierarchical\'  => true,
                \'labels\'        => $labels, /* ADVERTENCIA: Aquí es donde se utiliza la variable $labels */
                \'show_ui\'       => true,
                \'query_var\'     => true,
                \'rewrite\'       => array( \'slug\' => \'categoria-promociona\' ),
            )
        );
} // end function create_promociona_taxonomies
这是proyecta文件页中的代码。php:

    <?php

/**
 * Template Name: AINDER Promociona Loop
 *
 * @package BuddyPress
 * @subpackage Theme
 */

if (!is_user_logged_in()) {
    wp_redirect( home_url() );
}

get_header( \'buddypress\' ); ?>

<script type="text/javascript">
    jQuery(document).ready(function() {
        jQuery(\'#titulo-cpt\').focus(function(event) { 
            jQuery(\'#whats-new-options\').addClass(\'whats-new-options-open\', 2000);
        });
        jQuery(\'#whats-new\').focus(function(event) {
            jQuery(\'#whats-new-options\').addClass(\'whats-new-options-open\', 2000);
        });
    });
</script>

<?php 
    // Conseguimos primero el id de la página para la imagen destacada y lo guardamos en una variable
    $id_page = get_the_ID();
    // Conseguimos el objeto ainder-promociona (CPT)
    $obj = get_post_type_object( \'promociona\' );
?>

    <div id="content">

        <div id="item-header" role="complementary">

            <div id="item-header-avatar">

                <div class="single-group-box-image-container">
                    <a href="" title="<?php echo $obj->labels->singular_name; ?>"><img src="http://localhost/ainder/wp-content/uploads/group-avatars/30/aacdd8a094d297fd5d336809ccd89d01-bpfull.jpg" class="avatar group-30-avatar avatar-150 photo" width="150" height="150" alt="Logo del grupo LA INTELIGENCIA EMOCIONAL EN EL EMPRENDEDOR"></a>
                    <?php echo get_the_post_thumbnail( $id_page, array( 150, 150 ) ); ?>
                </div>

            </div><!-- #item-header-avatar -->

            <div id="item-header-content" class="cpt-morado">

                <h2><?php echo $obj->labels->singular_name; ?></h2>

                <div class="single-group-meta"></div>

                    <p><?php _e( \'¿Tienes una empresa, organización u ONG? <br>
                    Dala a conocer\', \'ainder\' ); ?></p>

                    <div class="gtags-header"><!-- Categorías -->
                    </div> <!-- .gtags-header -->

            </div><!-- #item-header-content -->
        </div><!-- #item-header -->


        <div id="item-body">

<!-- FORMULARIO -->

            <?php
            // Para crear los post desde el front con un formulario
            if ($_POST && ( $_POST[\'titulo-promociona\'] != \'\' ) ) {

                $post_type      = \'promociona\';
                $post_title     = $_POST[\'titulo-promociona\'];
                $post_content   = $_POST[\'contenido-promociona\'];
                $post_category  = $_POST[\'categoria-promociona\'];
                $image          = $_POST[\'imagen-promociona\'];
                $video_url      = $_POST[\'video-promociona\'];
                $enlace_url     = $_POST[\'enlace-promociona\'];

                $new_post = array(
                 \'post_author\'      => $user->ID,
                 \'post_title\'       => $post_title,
                 \'post_content\'     => $post_content,
                 \'post_category\'    => array($post_category),
                 \'post_status\'      => \'publish\',
                 \'comment_status\'   => \'open\',
                 \'post_type\'        => $post_type
                );

                // Creamos el post con los datos de $new_post y obtenemos su ID nuevecita
                $post_id = wp_insert_post( $new_post );

                // Insertamos la "categoría" (realmente es una taxonomía)
                wp_set_object_terms( $post_id, $post_category, \'categoria-promociona\');

                if ( !empty( $video_url )  ) {
                    // Insertamos en DDBB la URL del video si lo hay
                    update_post_meta( $post_id, \'video_url\', $video_url );
                }

                if ( !empty( $enlace_url ) ) {
                    // Insertamos en DDBB la URL del enlace si lo hay
                    update_post_meta( $post_id, \'enlace_url\', $enlace_url );
                }


                // Para la imagen lo tenemos un poco más complicado
                if ( !empty( $image ) ) {
                    // Guardamos la ruta del directorio upload en una variable
                    $upload_dir = wp_upload_dir();
                    // Leemos el archivo y lo guardamos en una variable
                    $image_data = file_get_contents($image);
                    // Nombramos la imagen con el nombre del archivo
                    $filename   = basename($image);

                    if(wp_mkdir_p($upload_dir[\'path\']))
                        $file = $upload_dir[\'path\'] . \'/\' . $filename;
                    else
                        $file = $upload_dir[\'basedir\'] . \'/\' . $filename;

                    file_put_contents($file, $image_data);

                    $wp_filetype = wp_check_filetype($filename, null );

                    $attachment = array(
                        \'post_mime_type\' => $wp_filetype[\'type\'],
                        \'post_title\'     => sanitize_file_name($filename),
                        \'post_content\'   => \'\',
                        \'post_status\'    => \'inherit\'
                    );

                    $attach_id = wp_insert_attachment( $attachment, $file, $post_id );

                    require_once(ABSPATH . \'wp-admin/includes/image.php\');

                    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );

                    wp_update_attachment_metadata( $attach_id, $attach_data );

                    set_post_thumbnail( $post_id, $attach_id );
                } // end if (isset($image))

            } // end if ($_POST)
            ?>

            <div class="cpt-title">
                <h4><?php echo $obj->labels->add_new_item; ?></h4>
            </div>

            <div class="cpt_form_container">

                <form action="" method="post" id="whats-new-form" name="whats-new-form" >

                    <?php // do_action( \'bp_before_activity_post_form\' ); ?>

                    <div id="whats-new-avatar"> <!-- AVATAR DEL USUARIO -->
                        <a href="<?php echo bp_loggedin_user_domain(); ?>">
                            <?php bp_loggedin_user_avatar( \'width=\' . bp_core_avatar_thumb_width() . \'&height=\' . bp_core_avatar_thumb_height() ); ?>
                        </a>
                    </div>

                    <p class="titulo-cpt">
                        <?php _e( \'Titula tu Link\', \'ainder\' ); ?>
                    </p>

                    <div id="whats-new-content">

                        <div id="whats-new-textarea">
                                <input type="text" class="bp-suggestions" name="titulo-promociona" id="titulo-cpt" required maxlength="60"></input>
                        </div>

                        <p class="input-cpt">
                            <?php printf( __( \'%s, explica en qué consiste y qué ofreces (max. 300 caracteres)\', \'ainder\' ), bp_get_user_firstname( bp_get_loggedin_user_fullname() ) ); ?>
                        </p>

                        <div id="whats-new-textarea">
                            <textarea class="bp-suggestions" name="contenido-promociona" id="whats-new" required>
                            </textarea>
                        </div>

                        <div id="whats-new-options">
                            <p class="input-cpt">
                                <?php _e( \'Añade una imagen (obligatorio)\', \'ainder\' ); ?>
                            </p>
                            <div id="whats-new-textarea">
                                <input type="file" class="bp-suggestions" name="imagen-promociona" id="imagen-cpt" required>
                            </div>

                            <p class="input-cpt">
                                <?php _e( \'Añade el Link\', \'ainder\' ); ?>
                            </p>
                            <div id="whats-new-textarea">
                                <input type="url" class="bp-suggestions" name="enlace-promociona" id="enlace-cpt">
                            </div>

                            <p class="input-cpt">
                                <?php _e( \'Añade un video\', \'ainder\' ); ?>
                            </p>
                            <div id="whats-new-textarea">
                                <input type="url" class="bp-suggestions" title="Si pegas el enlace para compartir de Youtube, aparecerá el vídeo, si sólo pegas la ruta normal aparecerá el enlace vinculado al vídeo" name="video-promociona" id="video-cpt">
                            </div>

                            <div id="whats-new-submit">
                                <input type="submit" name="submit" id="submit" value="<?php esc_attr_e( \'Publicar\', \'ainder\' ); ?>" />
                            </div>

                            <?php //if ( bp_is_active( \'groups\' ) && !bp_is_my_profile() && !bp_is_group() ) : ?>

                            <div id="whats-new-post-in-box">

                                <?php _e( \'Publicar en\', \'ainder\' ); ?>:

                                <select required id="whats-new-post-in" name="categoria-promociona">
                                    <option selected="selected" value="">
                                        <?php 
                                            $args = array(
                                                \'post_type\' => \'promociona\',
                                                \'taxonomy\'  => \'categoria-promociona\',
                                                \'hide_empty\' => 0,
                                                \'order\' => \'ASC\'
                                            );

                                            $categories = get_categories($args);

                                            foreach($categories as $category) { 
                                                                //echo \'<div class="cat"><h2><a href="\' . get_category_link( $category->term_id ) . \'" title="\' . sprintf( __( "have a look at %s" ), $category->name ) . \'" \' . \'>\' . $category->name.\'</a></h2><br /><p>Books: \'. $category->count.\' </p></div> \'; 
                                                echo "<option value=\'".$category->name."\'>$category->name</option>"; // $category->term_id
                                            }  
                                        ?>

                                </select>
                            </div> <!-- #whats-new-post-in-box -->
                                <!-- <input type="hidden" id="whats-new-post-object" name="whats-new-post-object" value="groups" /> -->

                            <?php // elseif ( bp_is_group_home() ) : ?>

                                <!-- <input type="hidden" id="whats-new-post-object" name="whats-new-post-object" value="groups" /> -->
                                <!-- <input type="hidden" id="whats-new-post-in" name="whats-new-post-in" value="<?php// bp_group_id(); ?>" /> -->

                            <?php // endif; ?>

                            <?php //do_action( \'bp_activity_post_form_options\' ); ?>

                        </div><!-- #whats-new-options -->
                    </div><!-- #whats-new-content -->

                    <?php wp_nonce_field( \'post_update\', \'_wpnonce_post_update\' ); ?>
                    <?php// do_action( \'bp_after_activity_post_form\' ); ?>

                </form><!-- #whats-new-form -->
            </div> <!-- .bpfb_form_container -->
        </div> <!-- .item-body -->

<!-- /FORMULARIO -->

<!-- Loop de CPT promociona -->

        <div class="titulo-loop">
            <h4><?php echo $obj->labels->name; ?></h4>
        </div>

        <div class="categoria-loop">
            <div id="titulo-desplegable">
                <span class="desplegable"><?php _e(\'Elegir por categorías\', \'ainder\') ?></span>


                <!-- <option selected="selected" value="0"><?php _e("Elegir categoría", "ainder"); ?></option> -->
                <?php 
                $terms = get_terms( \'categoria-promociona\' );

                echo \'<ul class="desplegable-categoria-loop">\';


                foreach ( $terms as $term ) {

                    // The $term is an object, so we don\'t need to specify the $taxonomy.
                    $term_link = get_term_link( $term );

                    // If there was an error, continue to the next term.
                    if ( is_wp_error( $term_link ) ) {
                        continue;
                    }

                    // We successfully got a link. Print it out.
                    echo \'<li><a href="\' . esc_url( $term_link ) . \'">\' . $term->name . \'</a></li>\';
                }

                echo \'</ul>\';


                ?>
            </div>
        </div> <!-- .categoria-loop -->

        <div class="clear"></div>

        <div id="item-loop">

            <?php
            $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
            $wp_query  = new WP_Query( array( 
                \'post_type\'             => \'promociona\',
                \'post-category\'         => array( $category_name ),
                \'posts_per_page\'        => 7,
                \'ignore_sticky_posts\'   => 1,
                \'paged\'                 => $paged
                )
            );

        if ( $wp_query->have_posts() ) :
            while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>

        <div class="cpindex">

            <div class="cpautor">

                <span class="avatar">
                    <a href="<?php echo bp_core_get_user_domain( get_the_author_meta( \'ID\' ) ); ?>" title="<?php the_author_meta( \'display_name\' ); ?>">
                        <?php bp_activity_avatar( array( \'user_id\' => get_the_author_meta( \'ID\' ) ) ); ?>
                    </a>
                </span>
                <span class="texto-publicado"><?php _e(\'Publicado por: \', \'ainder\'); ?></span>
            </div> <!-- .cpautor -->

            <div class="cpthumbnail">
                <?php 
                if ( has_post_thumbnail() ) {
                    echo get_the_post_thumbnail( $post_id, array( 100, 100) );
                 } ?>
            </div>

            <div class="cptitle">
                <h5><?php echo get_the_title(); ?></h5>
            </div>

            <div class="cpcategories">

                <p class="custompostmetadata"><?php _e( \'CATEGORÍA:\', \'ainder\'); ?> <?php the_terms( get_the_ID(), \'categoria-promociona\' ); ?></p>
            </div>

            <div class="cpcontent">

                <?php the_excerpt(); ?> <?php //the_content(); ?>
                <div class="cpmetas">

                    <span class="cplink"><?php _e( \'Link: \', \'ainder\'); ?><a target="_blank" href="<?php echo get_post_meta( get_the_ID(), \'enlace_url\', true ); ?>"><?php echo get_post_meta( get_the_ID(), \'enlace_url\', true ); ?></a></span>
                    <br>
                    <span class="cpvideo"><?php _e( \'Video: \', \'ainder\'); ?><a target="_blank" href="<?php echo get_post_meta( get_the_ID(), \'video_url\', true ); ?>"><?php echo get_post_meta( get_the_ID(), \'video_url\', true ); ?></a></span> 
                </div> <!-- .cpmetas -->
            </div> <!-- .cpcontent -->

            <div class="clear"></div>

        </div> <!-- .cpindex -->

    <?php endwhile;

    if (  $wp_query->max_num_pages > 1 ) { ?>
        <div id="nav-below" class="navigation">
            Paginación
            <div class="nav-previous"><?php next_posts_link( __( \'<span class="meta-nav">&larr;</span> Anteriores\', \'ainder\' ) ); ?></div>
            <div class="nav-next"><?php previous_posts_link( __( \'Siguientes <span class="meta-nav">&rarr;</span>\', \'ainder\' ) ); ?></div>
        </div>
    <?php } // end if($loop-)
endif;
wp_reset_postdata();
?>

        </div>

    </div><!-- .content -->

<?php get_sidebar( \'buddypress\' ); ?>
<?php get_footer( \'buddypress\' ); ?>
重要的一点是:
    // Para la imagen lo tenemos un poco más complicado
if ( !empty( $image ) ) {
    // Guardamos la ruta del directorio upload en una variable
    $upload_dir = wp_upload_dir();
    // Leemos el archivo y lo guardamos en una variable
    $image_data = file_get_contents($image);
    // Nombramos la imagen con el nombre del archivo
    $filename   = basename($image);

    if(wp_mkdir_p($upload_dir[\'path\']))
        $file = $upload_dir[\'path\'] . \'/\' . $filename;
    else
        $file = $upload_dir[\'basedir\'] . \'/\' . $filename;

    file_put_contents($file, $image_data);

    $wp_filetype = wp_check_filetype($filename, null );

    $attachment = array(
        \'post_mime_type\' => $wp_filetype[\'type\'],
        \'post_title\'     => sanitize_file_name($filename),
        \'post_content\'   => \'\',
        \'post_status\'    => \'inherit\'
    );

    $attach_id = wp_insert_attachment( $attachment, $file, $post_id );

    require_once(ABSPATH . \'wp-admin/includes/image.php\');

    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );

    wp_update_attachment_metadata( $attach_id, $attach_data );

    set_post_thumbnail( $post_id, $attach_id );
} // end if (isset($image))
问题是,即使图片在媒体库中,也看不到任何地方。我认为这与读取图像文件的时间有关($ image_data = file_get_contents ($ image);) 或通过插入数据文件(file_put_contents ($ file, $ image_data);).有人能解释一下这件事吗?

提前感谢

1 个回复
SO网友:JoseLazo

经过两天的寻找解决方案和代码斗争,I found the solution:

正如我所怀疑的,问题是读取文件($image_data = file_get_contents($image);).

表格中未包含第一个错误enctype =" multipart / form-data " 同时发送文件和数据。

第二个错误是,如果不是全局变量$\\u文件,则图像不会由$\\u POST加载(在4.1.0之前的PHP版本中,应使用HTTP\\u POST\\u文件而不是$\\u文件)。

最后一个错误是,我们必须将文件移动到上载目录中,才能使用move_uploaded_file( $_FILES[\'imagen-promociona\'][\'tmp_name\'], $uploadfile )

我希望至少能帮助别人。

谢谢

结束

相关推荐

Front-End Post Submission

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