Crear una comunidad en Wordpress sin usar Plugins

  • Autor Autor SoloNegocios
  • Fecha de inicio Fecha de inicio
S

SoloNegocios

Xi
SEO
Importante: Todas las paginas nuevas que creemos necesitan una validación y esa es la de <?php if (is_user_logged_in() ) ?> ya que no queremos que usuarios sin logearse tengan acceso a paginas como la de actualizar usuario o escribir artículos xD

Segunda parte: http://forobeta.com/wordpress/46089-crear-comunidad-wordpress-plugins.html#post468195

Tercera Parte: http://forobeta.com/wordpress/46089-crear-comunidad-wordpress-plugins-2.html#post468249

Cuarta Parte: http://forobeta.com/wordpress/46089-crear-comunidad-wordpress-plugins-2.html#post468311
4zyred.jpg
Wordpress es el mejor CMS para crear Blogs de eso no hay ninguna duda, pero hay algunas veces en la que sentimos que Wordpress nos limita y no podemos realizar algunos proyectos que tenemos en mente, uno de estos limitantes y para mi el mas importante es el dichoso "Panel de administración".

Se que muchos dirán "Pero si el Panel de administración es muy fácil de usar" yo eso lo se por algo llevo ya varios años usando Wordpress, el verdadero problema viene cuando queremos tener un Blog donde nuestros visitantes se registren y puedan escribir sus propios artículos, seamos sinceros el 99,5% de la gente que navega en Internet no es Blogger o Webmaster para ellos el Panel de administración es tan difícil como usar Ubuntu Linux.

Wordpress tiene una infinidad de Plugins que puedes usar para que los usuarios se registren, inicien sesión o escriban artículos sin necesidad de entrar al Panel de administración, el problema viene cuando los Plugins no tienen todo lo que necesitas o son tan viejos que ya no funcionan en versiones nuevas de Wordpress, por esa razón hoy les voy a enseñar a crear un Blog tipo comunidad usando Wordpress y un poco de "PHP+HTML+CSS".

La mayoría de funciones que uso son sacadas de algunos temas de Wordpress y de Blogs que encontré Googleando, lo que hice fue reunir todas esas funciones que necesitaba y las modifique a mis necesidades, ahora si ya dejare la carreta y empezare con lo interesante.

  • Formulario de Registro:
    Lo primero que vamos a hacer es crear el formulario para que nuestros visitantes puedan registrarse en el sitio para eso entramos a nuestro Hosting y buscamos la carpeta del tema que estamos usando "wp-content/themes/tu-tema/", aquí vamos a crear un archivo nuevo llamado registro.php, después regresamos al Panel de Wordpress y vamos menú "Apariencias->Editor" en donde ya nos debe aparecer listado el archivo registro.php

    Antes de comenzar a meterle código al archivo registro.php debemos recordar que el formulario de registros es una simple pagina con un formulario así que para hacernos la vida mas sencilla vamos a la Plantilla de pagina "page.php" y copiamos todo el código y lo pegamos en el registro.php.

    Ahora pegamos el siguiente código al inicio del registro.php, arriba de todo el código que colocamos antes

    PHP:
    <?php
    /**
     * @package WordPress
     * @subpackage Tu Tema
     
     Template Name: Registro
     
     */
     ?>

    Esto lo que hace es decirle a WP que este archivo es una plantilla de pagina, mas adelante les muestro para que sirve.

    Abajo de este código colocamos este otro código

    PHP:
    <?php 
    if ( $_POST['signup_post'] == '1')
    {
     $username = $_POST['user_login'];
     $password = $_POST['password'];
     $confirm = $_POST['confirm'];
     $email = $_POST['user_email'];
     $nombre = $_POST['nombre'];
     $apellido = $_POST['apellido'];
     $message = add_new_user($username, $password, $confirm, $email, $nombre, $apellido);
    }				
    ?>

    Esto lo que hace es recibir los datos de los campos de texto que tendrá el formulario y crea el usuario con esos datos.

    Como recuerdan copiamos todo el código del page.php asi que ahora buscamos esta parte "<?php the_content(); ?>", la eliminamos y copiamos este código
    PHP:
    <form action="" method="post">
     <?php display_message($message) ?>
       <fieldset>
        <ul>
         <li>
          <label>Nombre</label>
          <input type="text" value="<?php echo $_POST['nombre']; ?>" name="nombre" class="input"/>
         </li>
         <li>
          <label>Apellido</label>
          <input type="text" value="<?php echo $_POST['apellido']; ?>" name="apellido" class="input"/>
         </li>
         <li>
          <label>Nombre de Usuario</label>
          <input type="text" value="<?php echo $_POST['user_login']; ?>" name="user_login" class="input"/>
          <small class="nota">Escoge el nombre con el que te van a conocer</small>
         </li>
         <li>
          <label>Correo Electrónico</label>
          <input type="text" value="<?php echo $_POST['user_email']; ?>" name="user_email" class="input"/>
          <small class="nota">Ej. miguel@hotmail.com</small>
         </li>
         <li>
          <label>Contraseña</label>
          <input type="password" value="" name="password" class="input"/>
          <small class="nota">Mínimo 6 caracteres</small>
         </li>
         <li>
          <label>Confirmar Contraseña</label>
          <input type="password" value="" name="confirm" class="input"/>
          <small class="nota">Escribe de nuevo la contraseña</small>
         </li>
         <li>
          <input type="submit" id="register" value="Crear mi Cuenta"/>
          <input type="hidden" name="signup_post" value="1"/>
         </li>
        </ul>
       </fieldset>
      </form>

    Como pudieron ver no es algo del otro mundo es puro HTML y solo 2 funciones las cuales paso a explicar ahora y obviamente las deben colocar en el archivo functions.php:

    PHP:
    function display_message( $message = false )
    {
     if( is_wp_error( $message ) )
     {
      echo '<p>' . $message->get_error_message() . '</p>';	
     }
    }

    display_message= Solo sirve para retornar un mensaje de error, lo vamos a usar para decirles a los usuarios cosas tipo: La contraseña es muy corta, ese Email ya esta siendo usado por otro usuario, etc-

    PHP:
    function add_new_user($username, $password, $confirm, $email, $nombre, $apellido)
    {
     require ( ABSPATH . WPINC . '/registration.php' );
    		
     // Remove html tags from the title and content fields
     $username_stripped = strip_tags($username);
     $password_stripped = strip_tags($password);
     $confirm_stripped = strip_tags($confirm);
     $email_stripped = strip_tags($email);
     $nombre_stripped = strip_tags($nombre);
     $apellido_stripped = strip_tags($apellido);
    	
     // Check to see if User Registration is turned OFF
     if (get_option('users_can_register') == '0') return new WP_Error('reg_off', 'Lo sentimos, los registros están desactivados');
     // Validate the Form Data
     if(isEmptyString($nombre_stripped)) return new WP_Error('forgot_nombre', 'Por favor ingresa tu Nombre');
     if(isEmptyString($apellido_stripped)) return new WP_Error('forgot_apellido', 'Por favor ingresa tu Apellido');
     if(isEmptyString($username_stripped)) return new WP_Error('forgot_username', 'Por favor ingresa un Nombre de Usuario');
     if(strlen($username_stripped)<6) return new WP_Error('username_corto', 'El Nombre de Usuario debe tener 6 caracteres como mínimo');
     if(username_exists($username_stripped)) return new WP_Error('username_exists', 'Lo sentimos, ese Nombre de Usuario ya existe');
     if(!is_email($email_stripped)) return new WP_Error('verify_email', 'Por favor ingresa un Correo Electrónico valido');
     if(email_exists($email_stripped)) return new WP_Error('email_exists', 'Lo sentimos, ese Correo Electrónico ya esta siendo usado por otro usuario');
     if(isEmptyString($password_stripped)) return new WP_Error('forgot_password', 'Por favor ingresa una Contraseña');
     if(strlen($password_stripped)<6) return new WP_Error('password_corto', 'La Contraseña debe tener por lo menos 6 caracteres');
     if($password_stripped != $confirm_stripped) return new WP_Error('passwords_no_match', 'Tu Contraseña no concuerda');
    
     // Create the user
     $user_data = array
     (
    	'first_name' => $nombre_stripped,
    	'last_name' => $apellido_stripped,
    	'user_login' => $username_stripped,
    	'user_pass' => $password_stripped,
    	'user_email' => $email_stripped,
     );
     $user_id = wp_insert_user($user_data);
     $user = get_userdata($user_id);
    	
     // Log the User In
     wp_login($username_stripped, $password_stripped);
     wp_clearcookie();
     wp_setcookie($username_stripped, $remember, false);
    	
     // Email User with Login Info
     $site = get_bloginfo("name");
     $sitename = str_replace("&amp;", "&", $site);
    
     $headers = 'From: '.$sitename.' <noreply@'.$sitename.'>' . "\r\n";
     $to = $user->user_email;
     $subject = sprintf(__('Ya tienes cuenta en %s - ¡Bienvenido!'), $sitename) . "\r\n\r\n";
     $message = sprintf(__('Estimado %s:'), $user->user_login) . "\r\n\r\n";
     $message .= sprintf(__('Gracias por registrarte a %s la Comunidad en la que podrás dar a conocer Tus Propias Opiniones de todos los Productos y Servicios que hayas Comprado o Usado.'), $sitename) . "\r\n\r\n";
     $message .= sprintf(__('-------------------------------------------------------------------------------------')). "\r\n\r\n";
     $message .= sprintf(__('Te recordamos tus datos:)')). "\r\n\r\n";
     $message .= sprintf(__('Nombre de Usuario: %s'), $user->user_login) . "\r\n\r\n";
     $message .= sprintf(__('Contraseña: %s'), $password_stripped) . "\r\n\r\n";
     $message .= sprintf(__('-------------------------------------------------------------------------------------')). "\r\n\r\n";
     $message .= sprintf(__('Una vez más, ¡bienvenido!')) . "\r\n\r\n";
     $message .= sprintf(__('Equipo de %s'), $sitename) . "\r\n\r\n";
    
     wp_mail($to, $subject, $message, $headers);
     // Redirect the User to My Account
     redirect_to_myaccount_url();
    }

    Esta función es la que se encarga de verificar los datos que el usuario ingreso y si son correctos le crea su cuenta en nuestro Blog y le envia un correo electrónico avisándole, si no son correctos retorna un mensaje que sera guardado e una variable para ser mostrado con display_message la función anterior.

    Si no se dieron cuenta add_new_user usa 2 funciones mas que voy a explicar, recuerden pegarlas en el Functions.php

    PHP:
    function isEmptyString($data)
    {
     return (trim($data) === "" or $data === null);
    }

    Sirve para saber si la cadena ingresada tiene algún carácter o no, es para validar si el usuario ingreso un nombre de usuario, correo o contraseña

    PHP:
    function redirect_to_myaccount_url()
    {
     wp_redirect(get_bloginfo('url') . '/panel/');
    }

    Esta función lo que hace es redireccionar al usuario que se registro a donde queremos, en mi caso se registran y los mando a Midominio.com/panel/

    Las demas funciones son funciones estándar de PHP o funciones de WP, ahora viene la ultima parte y esa es en el Panel de Administración ir al menú Pagina->Añadir nueva, le colocamos como nombre Registro y a mano derecha debe salir una caja llamada "Atributos de la Pagina" en esa caja dice "Superior" y "Plantilla", en "Plantilla" escogemos el nombre que le pusimos en registro.php, si no recuerdan es esta parte Template Name: Registro, así que para eso era el nombre, guardamos y listo, vamos a midominio.com/registro y debe salir algo como esto

    20hlp9d.jpg

    Si probamos y colocamos mal los datos nos muestra el Mensaje de Error, asi

    288z4gp.jpg

    Obviamente no se vera igual porque para eso ya les toca meterle mano al CSS cosa que no explicare ya que cada uno tiene su estilo xD
  • Formulario para Iniciar Sesión:

    Para el formulario de iniciar sesión segumos casi los mismos pasos que en el anterior formulario, este formulario usara ReCaptcha (reCAPTCHA: Stop Spam, Read Books) ya que hay que asegurar que los Juakers que usan Fuerza Bruta para averiguar contraseñas no pasen, asi que vayan registrándose xD
    1. Entramos a nuestro Hosting y buscamos la carpeta del tema que estamos usando "wp-content/themes/tu-tema/", aquí vamos a crear un archivo nuevo llamado iniciar-sesion.php.
    2. Regresamos al Panel de Wordpress y vamos menú "Apariencias->Editor", en donde ya nos debe aparecer listado el archivo iniciar-sesion.php
    3. Vamos a la Plantilla de pagina "page.php" y copiamos todo el código y lo pegamos en el iniciar-sesión.php.
    4. Ahora pegamos el siguiente código al inicio del iniciar-sesion.php, arriba de todo el código que colocamos antes
      PHP:
      <?php
      /**
       * @package WordPress
       * @subpackage Tu Tema
       
       Template Name: Iniciar Sesion
       
       */
      ?>

      Ya saben que es para darle un nombre a esta pagina.
    5. Abajo de este código colocamos este otro código, ATENCION este código tiene 2 variables que están con ***********, esos asteriscos los deben remplazar con sus llaves de ReCaptcha por eso deben registrarse, mas adelante les explico

      PHP:
      <?php 
       require_once('recaptchalib.php');
       $publickey = "***********";
       $privatekey = "***********";
       if ( $_POST['login'] == '1')
       {
        $username = $_POST['user_login'];
        $password = $_POST['password'];
        $re_ip = $_SERVER['REMOTE_ADDR'];
        $re_challenge = $_POST['recaptcha_challenge_field'];
        $re_response = $_POST['recaptcha_response_field'];
        $re_valid = recaptcha_check_answer($privatekey, $re_ip, $re_challenge, $re_response);
        if ($re_valid->is_valid)
        {
         $message = log_in_user($username, $password);
        }
        else
        {
         $message = new WP_Error('reg_off', 'El Código de Verificación esta Errado');
        }
       }
      ?>
      Esto lo que hace es recibir los datos de los campos de texto que tendrá el formulario y verificar si el usuario copio bien la frase que aparece en el ReCaptcha con lo que protegemos las contraseñas de nuestros usuarios, si todo esta bien se Inicia Sesión si no esta bien pues le dice que esta mal 😛
    6. Como recuerdan copiamos todo el código del page.php así que ahora buscamos esta parte "<?php the_content(); ?>", la eliminamos y copiamos este código

      PHP:
      <form action="" method="post">
        <?php display_message($message) ?>
         <fieldset>
          <ul>
           <li>
            <label>Nombre de Usuario</label>
            <input type="text" value="" name="user_login" class="input"/>
           </li>
           <li>
            <label>Contraseña</label>
            <input type="password" value="" name="password" class="input"/>
           </li>
          </ul>
         </fieldset>
      
         <fieldset>
          <ul>
           <li>
            <?php echo recaptcha_get_html($publickey, $error); ?>
           </li>
          </ul>
         </fieldset>
      
         <fieldset>
          <ul>
           <li>
            <input type="submit" value="Entrar en mi Cuenta"/>
            <input type="hidden" name="login" value="1"/>
           </li>
           <li>
            <a href='http://www.tudominio.com/recuperar-contrasena' title='Contrasena' rel='nofollow'>Olvidaste tu Contraseña?</a>
           </li>
          </ul>
         </fieldset>
      
        </form>

    Otra ves es puro HTML con la funcion que ya conocen "display_message" y otras nuevas: log_in_user y las de ReCaptcha

    PHP:
    // Log In User
    function log_in_user($username, $password)
    {
     // Get the user based on the username from the POST
     $user = parse_user($username);
     // Remove html tags from the title and content fields
     $username_stripped = strip_tags($username);
     $password_stripped = strip_tags($password);
    
     // Validate the Form Data
     if(isEmptyString($username_stripped)) return new WP_Error('forgot_username', 'Por favor ingresa un Nombre de Usuario');
     if(isEmptyString($password_stripped)) return new WP_Error('incorrect_password', 'Por favor ingresa una Contraseña');
     if(!wp_check_password( $password_stripped, $user->user_pass ) ) return new WP_Error('incorrect_password', 'Ingresaste una Contraseña incorrecta');
    	
     wp_set_auth_cookie($user->ID, $remember);
     wp_login($username_stripped, $password_stripped);
    		
     redirect_to_myaccount_url();
    }

    Esta función debe ir en el Functions.php y lo que hace es revisar si los datos que les pasamos con el formulario son correctos o no para que así se pueda logear el usuario, usa funciones de WP y las otras que ya se habían explicado antes.

    Por ultimo vamos al Panel de Administración, menú Pagina->Añadir nueva, le colocamos como nombre Iniciar Sesion y a mano derecha debe salir una caja llamada "Atributos de la Pagina" en esa caja dice "Superior" y "Plantilla", en "Plantilla" escogemos el nombre que le pusimos en iniciar-sesion.php, si no recuerdan es esta parte Template Name: Iniciar Sesión, así que para eso era el nombre, guardamos y listo

    Ya hemos creado el formulario y la pagina de iniciar sesión ahora solo nos falta la parte del ReCaptcha, si ya se registraron y agregaron el dominio les darán 2 llaves Public Key y Private Key las cuales tienen que colocar en las variables donde están los ************, esto esta en el Iniciar-sesion.php

    PHP:
     $publickey = "***********";
     $privatekey = "***********";

    Despues de modificar esto vamos a Downloads - recaptcha - Project Hosting on Google Code y descargamos la ultima versión de la librería ReCaptcha para PHP, la descomprimimos y subimos el archivo llamado recaptchalib.php a la carpeta de nuestro Theme en el Hosting "Wp-Content/themes/MiTema/"

    Ahora vamos a midominio.com/iniciar-sesion y debe salir algo como esto

    xe4htg.jpg


    2ho93yc.jpg


    ATENCIÓN: El enlace que dice "Olvidaste tu Contraseña" aun no funciona ya que todavía no hemos creado esa parte es la que viene después xD
 
Última edición:
A favoritos, gracias.
 
Muy buen tutorial, se un poquito complejo, por ejemplo el cms que mas uso si no el unico es drupal, este cms te permite hacer eso que dices con tan solo modificar unas linea y listo o bien con modulos que ya bienen por defecto y bien facil pero veo que en wordpres se enfoca meramente a blogin y no da mas aya no se ve que wordpres tenga una vision de hacer una red comunidad y sin embargo en drupal puff sin comparar obiamente le sobra para hacer un facebook identico.

buen tutorial
 
Solo Negocios recargado jeje, excelente tutorial loco 😛
 
Excelente tuto Enlace eliminado

Mi aporte sería que lo complementaría con un Javascript MD5 para el password.
 
Ya agregue la parte para Iniciar Sesión la cual usa la librería ReCpatcha para evitar "Juakers"

Excelente tuto Enlace eliminado

Mi aporte sería que lo complementaría con un Javascript MD5 para el password.

Interesante esa parte nunca se me paso por la cabeza algo así xD
 
Sin duda este se va a mis favoritos, ahora que ando preparandome para incursionar en el mundo de los blogs, web site y monetización. Excelente articulo.
 
espero con ansias la proxima actualizacion XD tengo ya un proyecto en mente😛
 
A favoritos, un excelente tutorial, de un excelente usuario, que volvió al foro para revivirlo y para aportarle todo lo que hacía falta. Dedo verde y a mis marcadores.
 
Continuación ya que el foro no permite mas de 20.000 caracteres xD

Formulario para restablecer la contraseña:

El formulario para recuperar la contraseña es sencillo y con los mismos pasos que los demas.

  1. Entramos a nuestro Hosting y buscamos la carpeta del tema que estamos usando "wp-content/themes/tu-tema/", aquí vamos a crear un archivo nuevo llamado recuperar-contrasena.php.
  2. Regresamos al Panel de Wordpress y vamos menú "Apariencias->Editor", en donde ya nos debe aparecer listado el archivo recuperar-contrasena.php
  3. Vamos a la Plantilla de pagina "page.php" y copiamos todo el código y lo pegamos en el recuperar-contrasena.php.
  4. Ahora pegamos el siguiente código al inicio del recuperar-contrasena.php, arriba de todo el código que colocamos antes

    PHP:
    <?php
    /**
     * @package WordPress
     * @subpackage Tu Tema
     
     Template Name: Recuperar Contraseña
     
     */
    ?>
    Ya saben que es para darle un nombre a esta pagina.
  5. Abajo de este código colocamos este otro código

    PHP:
    <?php 
     if ( $_POST['forgot_pass_post'] == '1')
     {
      $email_address = $_POST['email_address'];
      $ip = $_SERVER['REMOTE_ADDR'];
      $message = nueva_contrasena($email_address, $ip);
     }
    ?>

    Esto lo que hace es tomar los datos ingresados en el formulario para verificar y restablecer la contraseña del usuario enviandosela al correo electrónico con que se registro.
  6. Como recuerdan copiamos todo el código del page.php así que ahora buscamos esta parte "<?php the_content(); ?>", la eliminamos y copiamos este código

    PHP:
    <form action="" method="post">
       <?php display_message($message) ?>
    
       <fieldset>
        <ul>
         <li>
          <label>Correo Electrónico</label>
          <input type="text" value="" name="email_address" class="input"/>
         </li>
        </ul>
       </fieldset>
       <fieldset>
        <ul>
         <li>
          <input type="submit" value="Recuperar Contraseña"/>
          <input type="hidden" name="forgot_pass_post" value="1"/>
         </li>
        </ul>
       </fieldset>
    
      </form>

    Otra ves es puro HTML con la función que ya conocen "display_message" y una nueva: nueva_contrasena

    Recuerden copiar esta función en el archivo Functions.php

    PHP:
    function nueva_contrasena($email, $ip)
    {
     $email_stripped = strip_tags($email);
    
     if(is_email($email_stripped))
      $user = get_user_by_email($email_stripped);
     else
      return new WP_Error('verify_email', 'Por favor ingresa un Correo Electrónico valido');
    
     $newPass = wp_generate_password(10);
     require ( ABSPATH . WPINC . '/registration.php' );
     if (!username_exists($user->user_login))
      return new WP_Error('email_doesnt_exist','No hay ningún Usuario usando ese Correo Electrónico');
     if ($user->ID == 1)
      return new WP_Error('cant_change_admin_pass','No puedes cambiarle la Contraseña a este Usuario');
     else
     {
      wp_set_password($newPass, $user->ID);
      $site = get_bloginfo("name");
      $sitename = str_replace("&amp;", "&", $site);
      $headers = 'From: '.$sitename.' <forgot_password@'.$sitename.'>' . "\r\n";
      $to = $user->user_email;
      $subject = 'Actualización de la cuenta - Su Contraseña a sido restablecida';
      $message = sprintf(__('Querido %s,'), $user->user_login) . "\r\n\r\n";
      $message .= sprintf(__('Tu Contraseña a sido restablecida ya que recientemente fue llenada la opción Recordar Contraseña en %s.'), $sitename) . "\r\n\r\n";
      $message .= sprintf(__('-------------------------------------------------------------------------------------')). "\r\n\r\n";
      $message .= sprintf(__('Nombre de Usuario: %s'), $user->user_login) . "\r\n\r\n";
      $message .= sprintf(__('Nueva Contraseña: %s'), $newPass) . "\r\n\r\n";
      $message .= sprintf(__('-------------------------------------------------------------------------------------')). "\r\n\r\n";
      $message .= sprintf(__('Esta solicitud fue presentada por la siguiente dirección IP: %s.'), $ip) . "\r\n\r\n";
      $message .= sprintf(__('Gracias,')) . "\r\n\r\n";
      $message .= sprintf(__('Que tengas un buen dia!')) . "\r\n\r\n";
      wp_mail($to, $subject, $message, $headers);
      update_usermeta( $user->ID, 'passwordreset', 'yes');
      return $message = 'Tu Contraseña fue restablecida y te la hemos enviado por Correo Electrónico.';
     }
    }

    Esta función revisa si el correo electrónico ingresado en el formulario es de algún usuario registrado si es así manda un email con la contraseña nueva y la IP de quien uso el formulario para que el usuario sepa la IP si algún loco uso el formulario para cambiarle la contraseña.
  7. Por ultimo vamos al Panel de Administración, menú Pagina->Añadir nueva, le colocamos como nombre Recuperar Contraseña y a mano derecha debe salir una caja llamada "Atributos de la Pagina" en esa caja dice "Superior" y "Plantilla", en "Plantilla" escogemos el nombre que le pusimos en recuperar-contrasena.php, si no recuerdan es esta parte Template Name: Recuperar Contraseña, así que para eso era el nombre, guardamos y listo

    Ahora vamos a midominio.com/recuperar-contrasena y nos sale algo así

    1621ndi.jpg


    25s0dpj.jpg


  • Panel de Usuario:

  1. Entramos a nuestro Hosting y buscamos la carpeta del tema que estamos usando "wp-content/themes/tu-tema/", aquí vamos a crear un archivo nuevo llamado panel.php.
  2. Regresamos al Panel de Wordpress y vamos menú "Apariencias->Editor", en donde ya nos debe aparecer listado el archivo panel.php
  3. Vamos a la Plantilla de pagina "page.php" y copiamos todo el código y lo pegamos en el panel.php.
  4. Ahora pegamos el siguiente código al inicio del panel.php, arriba de todo el código que colocamos antes

    PHP:
    <?php
    /**
     * @package WordPress
     * @subpackage Tu Tema
     
     Template Name: Panel
     
     */
    ?>
  5. Abajo de este código colocamos este otro código

    PHP:
    <?php 
     global $current_user;
     get_currentuserinfo(); 
    ?>

    Esto lo que hace es sacar la información del usuario registrado.
  6. Como recuerdan copiamos todo el código del page.php así que ahora buscamos esta parte "<?php the_content(); ?>", la eliminamos y copiamos este código

    PHP:
    <h3>Bienvenido <strong><?php echo $current_user->display_name ?></strong></h3>
    <?php echo get_avatar($current_user->ID,50) ?>
    <?php echo "<a href='http://www.tudominio.com/author/$current_user->display_name' title='Mis opiniones' rel='nofollow'>Mis opiniones</a>"; ?>
    <ul>
      <li>Publicadas: <strong><?php echo contar_post_autor($current_user->ID,1) ?></strong></li>
      <li>Pendientes de moderación: <strong><?php echo contar_post_autor($current_user->ID,2) ?></strong></li>
    </ul>
    <strong>Últimas 5 Opiniones Publicadas</strong>
    <ul>
     <?php listar_posts_usuario($current_user->ID,10,1); ?>
    </ul>
    <strong>Últimas 5 Opiniones Pendientes de Moderación</strong>
    <ul>
     <?php listar_posts_usuario($current_user->ID,10,2); ?>
    </ul>

    Aquí usamos funciones nuevas: contar_post_autor y listar_posts_usuario, las demas son funciones de WP, recuerden colocar estas funciones en el Function.php del Theme.

    PHP:
    function contar_post_autor($id,$tipo)
    {
     global $wpdb;
     if ($tipo==1)
        return (int) $wpdb->get_var('SELECT count(id) FROM `'.$wpdb->prefix.'posts` where `post_type`=\'post\' and `post_status`=\'publish\' and `post_author`='.$id);
     else if($tipo==2)
        return (int) $wpdb->get_var('SELECT count(id) FROM `'.$wpdb->prefix.'posts` where `post_type`=\'post\' and `post_status`=\'pending\' and `post_author`='.$id);
    }

    Retorna la cantidad de Posts de cada usuario registrado, pide el ID del usuario y un valor numérico que puede ser: 1 Para Posts Publicados y 2 Para Posts Pendientes de Revisión

    PHP:
    function listar_posts_usuario($user_id,$number_of_posts,$status_post)
    {
     global $wpdb, $post;
    
     if($status_post==0)
     {
      $random_posts = $wpdb->get_results("SELECT $wpdb->posts.ID, post_title, post_status, post_type, post_author, post_date FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' OR post_status = 'pending' AND post_author = '.$user_id.' ORDER BY post_date DESC limit $number_of_posts");
    
      foreach ($random_posts as $post)
      {
       $post_title = htmlspecialchars(stripslashes($post->post_title));
       echo "<li>".mysql2date('j/M/Y', $post->post_date)."</li><li><a href=\"".get_permalink($post->ID)."\">$post_title</a></li> <li>".$post->post_status."</li>";
      }
     }
     else if($status_post==1)
     {
      $random_posts = $wpdb->get_results("SELECT $wpdb->posts.ID, post_title, post_status, post_type, post_author, post_date FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_author = '.$user_id.' ORDER BY post_date DESC limit $number_of_posts");
    
      foreach ($random_posts as $post)
      {
       $post_title = htmlspecialchars(stripslashes($post->post_title));
       echo "<li><a href=\"".get_permalink($post->ID)."\">$post_title</a></li>";
      }
     }
     else if($status_post==2)
     {
      $random_posts = $wpdb->get_results("SELECT $wpdb->posts.ID, post_title, post_status, post_type, post_author, post_date FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'pending' AND post_author = '.$user_id.' ORDER BY post_date DESC limit $number_of_posts");
    
      foreach ($random_posts as $post)
      {
       $post_title = htmlspecialchars(stripslashes($post->post_title));
       echo "<li><a href=\"".get_permalink($post->ID)."\">$post_title</a></li>";
      }
     }
    }

    Esta función nos regresa una lista con los nombres de los Posts de cada usuario, cada nombre va enlazado hacia el Post en cuestión, los datos que piden son el ID del usuario, el numero de Posts a motsrara en la lista y el estatus del Posts: 1 Posts Publicados y Pendientes, 2 Posts Publicados, 3 Posts Pendientes.
  7. Por ultimo vamos al Panel de Administración, menú Pagina->Añadir nueva, le colocamos como nombre Recuperar Contraseña y a mano derecha debe salir una caja llamada "Atributos de la Pagina" en esa caja dice "Superior" y "Plantilla", en "Plantilla" escogemos el nombre que le pusimos en panel.php, si no recuerdan es esta parte Template Name: Panel, así que para eso era el nombre, guardamos y listo

Si todo sale bien debe quedar algo así (No igual porque para eso falta meterle mano al CSS y eso no lo explico porque todos tenemos un diseño diferente)

e05rpc.jpg
 
Última edición:
Pedazo de hilo. Iré probando lo que has puesto y quedo a la espera del resto, pero mil gracias!
 
  • Formulario para actualizar datos de Usuario:

Este formulario es un poco mas largo, pero sigue siendo los mismos pasos

  1. Entramos a nuestro Hosting y buscamos la carpeta del tema que estamos usando "wp-content/themes/tu-tema/", aquí vamos a crear un archivo nuevo llamado actualizar-datos.php.
  2. Regresamos al Panel de Wordpress y vamos menú "Apariencias->Editor", en donde ya nos debe aparecer listado el archivo actualizar-datos.php
  3. Vamos a la Plantilla de pagina "page.php" y copiamos todo el código y lo pegamos en el actualizar-datos.php.
  4. Ahora pegamos el siguiente código al inicio del actualizar-datos.php, arriba de todo el código que colocamos antes
    PHP:
    <?php
    /**
     * @package WordPress
     * @subpackage Tu Tema
     
     Template Name: Actualizar Datos
     
     */
     ?>

    Ya saben que es solo para ponerle un nombre
  5. Abajo de el código de arriba pegamos el siguiente código

    PHP:
    <?php 
     global $current_user;
     get_currentuserinfo(); 
    
    if(isset($_POST['boton1']))
    {
     $username = $_POST['user_login'];
     $password = $_POST['password'];
     $confirm = $_POST['confirm'];
     $email = $_POST['user_email'];
     $nombre = $_POST['nombre'];
     $apellido = $_POST['apellido'];
     $message = actualizar_user($current_user->ID, $password, $confirm, $email, $nombre, $apellido, $_FILES['foto']['tmp_name'], $_FILES['foto']['size'], $_FILES['foto']['type']);
    }

    Esto coge los datos ingresados en el formulario y verifica si todo estuvo bien para así modificar los datos del usuario
  6. Como recuerdan copiamos todo el código del page.php así que ahora buscamos esta parte "<?php the_content(); ?>", la eliminamos y copiamos este código

    PHP:
    <form action="" method="post" enctype="multipart/form-data">
               <center><?php display_message($message) ?></center>
       <fieldset>
        <ul>
         <li>
          <label>Nombre</label>
          <input type="text" value="<?php echo $current_user->user_firstname ?>" name="nombre" class="input"/>
         </li>
         <li>
          <label>Apellido</label>
          <input type="text" value="<?php echo $current_user->user_lastname ?>" name="apellido" class="input"/>
         </li>
         <li>
          <label>Nombre de Usuario</label>
          <input type="text" value="<?php echo $current_user->user_login ?>" name="user_login" class="input" disabled="disabled"/>
          <small class="nota">No puedes cambiar el nombre de usuario</small>
         </li>
         <li>
          <label>Correo Electrónico</label>
          <input type="text" value="<?php echo $current_user->user_email ?>" name="user_email" class="input"/>
          <small class="nota">El Correo Electrónico es Obligatorio</small>
         </li>
         <li>
          <label>Contraseña</label>
          <input type="password" value="" name="password" class="input"/>
          <small class="nota">Mínimo 6 caracteres</small>
         </li>
         <li>
          <label>Confirmar Contraseña</label>
          <input type="password" value="" name="confirm" class="input"/>
          <small class="nota">Escribe de nuevo la contraseña</small>
         </li>
        </ul>
       </fieldset>
       <fieldset>
        <ul>
         <li>
          <table width="100%" >
           <tr>
            <td width="257"><label>Subir Avatar</label></td>
            <td><input type="file" name="foto"/></td>
           </tr>
          </table>
         </li>
        </ul>
       </fieldset>
       <fieldset>
        <ul>
         <li>
          <center><input type="submit" name="boton1" id="actualizar" value="Actualizar Perfil"/></center>
         </li>
        </ul>
       </fieldset>
            </form>

    Esto es solamente el formulario que tomara los datos del usuario, tambien permite subir el avatar del usuario

    Hay una función nueva: actualizar_user, la cual sirve para actualizar los datos del usuario, recuerden pegarla en el Functions.php

    PHP:
    function actualizar_user($user_id, $password, $confirm, $email, $nombre, $apellido, $foto_nombre, $foto_peso, $foto_ext)
    {
     require ( ABSPATH . WPINC . '/registration.php' );
    		
     // Remove html tags from the title and content fields
     $username_stripped = strip_tags($username);
     $password_stripped = strip_tags($password);
     $confirm_stripped = strip_tags($confirm);
     $email_stripped = strip_tags($email);
     $nombre_stripped = strip_tags($nombre);
     $apellido_stripped = strip_tags($apellido);
    	
     // Validate the Form Data
     if(isEmptyString($nombre_stripped)) return new WP_Error('forgot_nombre', 'Por favor ingresa tu Nombre');
     if(isEmptyString($apellido_stripped)) return new WP_Error('forgot_apellido', 'Por favor ingresa tu Apellido');
     if(!is_email($email_stripped)) return new WP_Error('verify_email', 'Por favor ingresa un Correo Electrónico valido');
     $id_email=email_exists($email_stripped);
     if($id_email)
     {
      if($id_email!=$user_id)
       return new WP_Error('email_exists', 'Lo sentimos, ese Correo Electrónico ya esta siendo usado por otro usuario');
     }
    
     if(is_uploaded_file($foto_nombre))
     {
      if($foto_peso>30000)
      {
       return new WP_Error('avatar_grande', 'El Avatar no debe pesar mas de 30 Kb');
      }
      else
      {
       $sep=explode('image/',$foto_ext); // Separamos image/
       $tipo=$sep[1]; // Obtenemos el tipo de imagen que es 
       if($tipo != "jpeg" && $tipo != "jpg" && $tipo != "pjpeg" && $tipo != "png" && $tipo != "gif")
       {
        return new WP_Error('avatar_formato', 'El Avatar debe estar guardada en Formato Jpg, Png o Gif');
       }
      }
      $upload_dir_var = wp_upload_dir(); // obtenemos la ubicación de los archivos subidos en nuestro WordPress
      $upload_dir = $upload_dir_var['basedir']; // obtenemos el path absoluto de la carpeta de archivos subidos
      $filename = $user_id . '_avatar'; // obtenemos el nombre del archivo subido con el form
      $filename = trim($filename); // eliminamos posibles espacios antes y después del nombre de archivo
      $filename = ereg_replace(" ", "-", $filename); // eliminamos posibles espacios intersticiales en el nombre de archivo
      $typefile = $foto_ext; // obtenemos el tipo de archivo (JPG, PNG...)
      $uploaddir = realpath($upload_dir); // nos aseguramos de que el path de la carpeta de archivos subidos es absoluto
      $uploadfile = $uploaddir.'/avatar/'.$filename; // formamos el nombre definitivo que tendrá el archivo
      $slugname = preg_replace('/\.[^.]+$/', '', basename($uploadfile)); // este es el nombre que tendrá la imagen en la base de datos
      if ( file_exists($uploadfile) )
      { // si un archivo con el mismo nombre ya existe se añade un sufijo al nombre
       $count = "0";
       while ( file_exists($uploadfile) )
       {
        $count++;
        $exten = 'jpg';
        $uploadfile = $uploaddir.'/avatar/'.$slugname.'-'.$count.'.'.$exten;
       }
      } 
      else
      {
       $exten = 'jpg';
       $uploadfile = $uploadfile . '.' . $exten;
      }
      $uploadfile = strtolower($uploadfile);
      $upload_dir_var = wp_upload_dir(); // obtenemos la ubicación de los archivos subidos en nuestro WordPress
      $dir_real_avatar = $upload_dir_var['baseurl']; // obtenemos el path absoluto de la carpeta de archivos subidos
      $ruta_real_avatar = $dir_real_avatar.'/avatar/'.$filename.'.'.$exten; // formamos el nombre definitivo que tendrá el archivo
      $hay_avatar=1;
     }
     else
     {
      $ruta_real_avatar=get_user_meta($id_email,'foto_editor',true);
      $hay_avatar=0;
     }
    
     if(!isEmptyString($password_stripped)) 
     {
      if(strlen($password_stripped)<6)
      {
       return new WP_Error('password_corto', 'La Contraseña debe tener por lo menos 6 caracteres');
      }
      else
      {
       if($password_stripped != $confirm_stripped)
       {
        return new WP_Error('passwords_no_match', 'Tu Contraseña no concuerda');
       }
      }
      $user_data = array
      (
    	'ID' => $user_id,
    	'first_name' => $nombre_stripped,
    	'last_name' => $apellido_stripped,
    	'user_pass' => $password_stripped,
    	'user_email' => $email_stripped,
    	'foto_editor' => $ruta_real_avatar,
      );
     }
     else
     {
      $user_data = array
      (
    	'ID' => $user_id,
    	'first_name' => $nombre_stripped,
    	'last_name' => $apellido_stripped,
    	'user_email' => $email_stripped,
    	'foto_editor' => $ruta_real_avatar,
      );
     }
     if($hay_avatar==1)
     {
      if(!file_exists($uploaddir.'/avatar/'))
       mkdir($uploaddir.'/avatar/',0777);
      if (move_uploaded_file($foto_nombre, $uploadfile))
       escalar_imagen($uploadfile,50,50);
     }
     wp_update_user($user_data);
     $user = get_userdata($user_id);
    
     wp_clearcookie();
     wp_setcookie($user->user_login, $remember, false);
    	
     // Redirect the User to My Account
     redirect_to_myaccount_url();
    }

    Esta función esta medio envolatada ya que la comencé un día, la seguí otro y la termine mucho después xD, actualiza los datos del usuario y si sube un avatar crea una carpeta en "Wp-Content/uploads/" llamada "Avatars" ahí guarda los avatars el nombre del archivo es ID Usuario_avatar.jpg o sea 2_avatar.jpg

    PHP:
    function open_image ($file)
    {
     //detect type and process accordinally
     global $type;
     $size=getimagesize($file);
     switch($size["mime"])
     {
      case "image/jpeg":$im = imagecreatefromjpeg($file); //jpeg file
            break;
      case "image/gif":$im = imagecreatefromgif($file); //gif file
            break;
      case "image/png":$im = imagecreatefrompng($file); //png file
            break;
      default:$im=false;
            break;
     }
     return $im;
    }
    
    function escalar_imagen($imagen,$altura,$ancho)
    {
     $camino_nombre=explode("/",$imagen);
     $nombre=end($camino_nombre);
     $camino=substr($imagen,0,strlen($imagen)-strlen($nombre));
     $img=open_image ($camino.$nombre);
     
      if (!$img)
      { /* Comprobar si ha fallado */
       $img = @imagecreatefromjpeg("imagenes/img1.jpg");	
       $datos = getimagesize("imagenes/img1.jpg") or die("Problemas con $camino$nombre<br>");
       $anchura = $ancho;
       $thumb = imagecreatetruecolor($anchura,$altura);
       imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]); // calidad
       //imagecopyresized ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]); // rapidez
       imagejpeg($thumb,$camino.$nombre);
      }
      else
      {	
       $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>");
       $ratio = ($datos[1] / $altura);
       $anchura = round($datos[0] / $ratio);
       $thumb = imagecreatetruecolor($anchura,$altura);
       imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]); // calidad
       //imagecopyresized ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]); // rapidez
       imagejpeg($thumb,$camino.$nombre);
      }
    }

    Esta función escala las imágenes al tamaño que le pases, acepta imágenes JPG, GIF, PNG pero todas las imágenes las guarda en JPG ya que pesan menos xD
  7. Por ultimo vamos al Panel de Administración, menú Pagina->Añadir nueva, le colocamos como nombre Actualizar Datos y a mano derecha debe salir una caja llamada "Atributos de la Pagina" en esa caja dice "Superior" y "Plantilla", en "Plantilla" escogemos el nombre que le pusimos en actualizar-datos.php, si no recuerdan es esta parte Template Name: Actualizar Datos, así que para eso era el nombre, guardamos y listo

    Debe quedar algo asi:

    zkn9rk.jpg

EDITO: Falto lo mas importante decirle a WP que use nuestros Avatars xD

PHP:
function mis_avatars($avatar, $id_or_email, $size, $default, $alt)
{
 $custom_avatar = get_user_meta($id_or_email,'foto_editor',true);
 if ($custom_avatar)
  $return = '<img src="'.$custom_avatar.'" width="'.$size.'" height="'.$size.'" class="avatar avatar-50 photo" alt="'.$alt.'" />';
 else
  $return = '<img src="http://tudominio.com/avatar-por-defecto" width="'.$size.'" height="'.$size.'" class="avatar avatar-50 photo" alt="'.$alt.'" />';
 return $return;
}
add_filter('get_avatar', 'mis_avatars', 10, 5);

Le dice a WP que use los Avatars que suben los usuarios, miren que hay una parte "http://tudominio.com/avatar-por-defecto" ahi colocan el Avatar por defecto para los que no han subido un Avatar.

Esta función tiene un problema y es para los Administradores del sitio si van a comentarios en el panel verán que todos usan el mismo avatar, no he podido corregir eso xD
Mas adelante:
  • Escribir Artículos desde el mismo Theme con opción para subir 1 imagen al articulo y crear miniaturas de esa imagen para los que usan un Theme con miniaturas:
 
Última edición:
Un gran aporte a la comunidad, se nota que trabajaste un poco en esto, felicidades
 
Que aportazo!!!! ya se extrañaban este tipo de topics SN.
 
Escribir artículos desde el Theme con posibilidad de subir 1 imagen en cada articulo:

  1. Vamos al "Wp-Content/themes/Mi Tema/" y creamos un archivo llamado escribir-articulo.php
  2. Regresamos al Panel de Wordpress y vamos menú "Apariencias->Editor", en donde ya nos debe aparecer listado el archivo escribir-articulo.php
  3. Vamos a la Plantilla de pagina "page.php" y copiamos todo el código y lo pegamos en el escribir-articulo.php.
  4. Ahora pegamos el siguiente código al inicio del escribir-articulo.php, arriba de todo el código que colocamos antes

    PHP:
    <?php
    /**
     * @package WordPress
     * @subpackage Tu Tema
     
     Template Name: Escribir Articulo
     
     */
     ?>
  5. Abajo de este código colocamos este otro código

    PHP:
    <?php 
    if(isset($_POST['boton1']))
    {
     $articulo_title = $_POST['articulo_title'];
     $articulo_content = $_POST['articulo_content'];
     $articulo_category = $_POST['cat'];
     $message = nuevo_articulo($articulo_title, $articulo_content, $articulo_category, $_FILES['foto']['tmp_name'], $_FILES['foto']['size'], $_FILES['foto']['type']);
    }

    Esto recibe los datos del formulario y crea un articulo nuevo en la base de datos.
  6. Como recuerdan copiamos todo el código del page.php así que ahora buscamos esta parte "<?php the_content(); ?>", la eliminamos y copiamos este código

    PHP:
    <form action="" method="post" enctype="multipart/form-data">
               <?php display_message($message) ?>
              <fieldset>
               <ul>
                <li>
                 <label>Titulo</label>
                 <input type="text" name="articulo_title" id="articulo_title" size="30" value="<?php echo $_POST['articulo_title']?>" />
                </li>
                <li>
                 <label>Tu opinión</label>
                 <textarea rows="10" cols="40" name="articulo_content" id="articulo_content"><?php echo $_POST['articulo_content']?></textarea>
                </li>
               </ul>
              </fieldset>
              <fieldset>
               <ul>
                <li>
                 <label>Categoría</label>
                 <?php wp_dropdown_categories('orderby=name&hide_empty=0&exclude=1&hierarchical=1') ?>
                </li>
                <li>
                 <table width="100%" >
                  <tr>
                   <td width="155"><label>Subir Foto</label></td>
                   <td><input type="file" name="foto"/></td>
                  </tr>
                 </table>
                </li>
               </ul>
              </fieldset>
              <fieldset>
               <ul>
               </ul>
              </fieldset>
              <fieldset>
               <ul>
                <li>
                 <center><input type="submit" name="boton1" id="publicar" value="Enviar mi opinión"/></center>
                </li>
               </ul>
              </fieldset>
             </form>
  7. Un simple formulario con campos para el titulo, contenido, categoría y subir imagen.

    Usamos una nueva función: nuevo_articulo la cual guarda como pendiente cada articulo escrito por los usuarios en la base de datos, esta función va en el archivo Functios.php

    PHP:
    function nuevo_articulo($question_title, $question_content, $question_category, $foto_nombre, $foto_peso, $foto_ext)
    {
     //Strip any tags then may have been put into the array
     $question_title_stripped = strip_tags($question_title);
     $question_content_stripped = strip_tags($question_content);
    
     // Get the Current User Info
     $user = wp_get_current_user();
    	
     global $wpdb;
     $gather_questions = "SELECT * FROM wp_posts WHERE post_author = '" . $user->ID . "'";
     $user_questions = $wpdb->get_results($gather_questions);
    
     // Validate the Form Data
     if (isEmptyString($question_title_stripped))
     {
      return new WP_Error('no_title_entered', 'Escribe el Titulo de tu Opinión');
     }
     if (isEmptyString($question_content_stripped))
     {
      return new WP_Error('no_content', 'Escribe tu Opinión sobre el Producto que Compraste');
     }
     if (str_word_count($question_content_stripped)<100)
     {
      return new WP_Error('content_corto', 'Tu Opinión es muy corta cuéntanos mas del Producto que Compraste, recuerda decirnos cuales fueron las cosas que te gustaron y las que no te gustaron del Producto');
     }
    
     // Validate - Check to see if user already posted this exact question
     foreach ($user_questions as $user_question)
     {
      if ($user_question->post_author == $user->ID )
      {
       if ($user_question->post_title == $question_title_stripped)
       {
        return new WP_Error('duplicate_user_question', 'Ya hay una Opinión con este Titulo, Cambia el Titulo');
       }
       else 
       {
       }			
      }
      else
      {
      }
     }
    
     if(!is_uploaded_file($foto_nombre))
     {
      return new WP_Error('no_foto', 'Tienes que subir una Foto del Producto que Compraste');
     }
     else
     {
      if($foto_peso>50000)
      {
       return new WP_Error('foto_grande', 'La Foto no debe pesar mas de 50 Kb');
      }
      else
      {
       $sep=explode('image/',$foto_ext); // Separamos image/
       $tipo=$sep[1]; // Obtenemos el tipo de imagen que es 
       if($tipo != "jpeg" && $tipo != "jpg" && $tipo != "pjpeg")
       {
        return new WP_Error('foto_formato', 'La Foto debe estar guardada en Formato Jpg');
       }
      } 
     }
     $question_author = $user->ID;
    
    
     $upload_dir_var = wp_upload_dir(); // obtenemos la ubicación de los archivos subidos en nuestro WordPress
     $upload_dir = $upload_dir_var['path']; // obtenemos el path absoluto de la carpeta de archivos subidos
     $filename = $question_title_stripped; // obtenemos el nombre del archivo subido con el form
     $filename = trim($filename); // eliminamos posibles espacios antes y después del nombre de archivo
     $filename = ereg_replace(" ", "-", $filename); // eliminamos posibles espacios intersticiales en el nombre de archivo
     $typefile = $foto_ext; // obtenemos el tipo de archivo (JPG, PNG...)
     $uploaddir = realpath($upload_dir); // nos aseguramos de que el path de la carpeta de archivos subidos es absoluto
     $uploadfile = $uploaddir.'/'.$filename; // formamos el nombre definitivo que tendrá el archivo
     $slugname = preg_replace('/\.[^.]+$/', '', basename($uploadfile)); // este es el nombre que tendrá la imagen en la base de datos
     if ( file_exists($uploadfile) )
     { // si un archivo con el mismo nombre ya existe se añade un sufijo al nombre
      $count = "0";
      while ( file_exists($uploadfile) )
      {
       $count++;
       if ( $typefile == 'image/jpeg' )
       {
        $exten = 'jpg';
       }
       elseif ($typefile == 'image/png' )
       {
        $exten = 'png';
       }
       elseif ($typefile == 'image/gif' )
       {
        $exten = 'gif';
       }
       $uploadfile = $uploaddir.'/'.$slugname.'-'.$count.'.'.$exten;
      }
     }
     else
     {
      if ( $typefile == 'image/jpeg' )
      {
       $exten = 'jpg';
      }
      elseif ($typefile == 'image/png' )
      {
       $exten = 'png';
      }
      elseif ($typefile == 'image/gif' )
      {
       $exten = 'gif';
      }
      $uploadfile = $uploadfile . '.' . $exten;
     }
     $uploadfile = strtolower($uploadfile);
    
     $contenido_con_imagen='<p style="text-align: center;"><img class="aligncenter size-full wp-image-25" title="' . ereg_replace(" ", "-", $question_title_stripped) . '" src="' . $upload_dir_var['url'] . '/' . basename($uploadfile) . '" alt="' . $question_title_stripped . '" /></p>';
    
     $post = array(
    	  'ID' => '',
    	  'post_author' => $question_author, 
    	  'post_category' => array($question_category),
    	  'post_content' => $contenido_con_imagen . $question_content_stripped, 
    	  'post_title' => $question_title_stripped,
    	  'post_status' => 'pending'
    	);  
     // Insert the Question into the DB
     $question_id = wp_insert_post($post);
     if (move_uploaded_file($foto_nombre, $uploadfile))
     {
      escalar_imagen($uploadfile,400,500);
      // aquí ejecutaremos el código para insertar la imagen en la base de datos
      $post_id = $question_id; // el identificador del post o página al que queremos asociar la imagen
      $slugname = preg_replace('/\.[^.]+$/', '', basename($uploadfile));
      $attachment = array(
           'post_mime_type' => $typefile, // tipo de archivo
           'post_title' => $slugname, // el nombre del archivo en la Libreria de medios
           'post_content' => '', // contenido extra asociado a la imagen
           'post_status' => 'inherit'
           );
      $attach_id = wp_insert_attachment( $attachment, $uploadfile, $post_id );
      require_once(ABSPATH . "wp-admin" . '/includes/image.php');
    
      $attach_data = wp_generate_attachment_metadata( $attach_id, $uploadfile );
      wp_update_attachment_metadata( $attach_id,  $attach_data );
     } 
     // Get the newly created post info for redirection
     $question = get_post($question_id);
    	
     // Redirect to the newly posted Question
     wp_redirect($question->guid);
    }

    A esta función se le pasa el titulo, contenido, categoría, nombre del archivo de la imagen, peso del archivo de la imagen, extensión de la imagen.

    Avisa si ya existe un articulo con el mismo titulo, tambien obliga al usuario a colocar un titulo, una imagen JPG de 30 KB como máximo (Se puede modificar el tamaño) y obliga a que el tamaño del articulo en palabras sea 100 o mayor pero se puede cambiar al gusto.

    La imagen subida la transforma a Jpg aparte de eso escala la imagen a 500 de ancho y 400 de alto, pero se puede cambiar, guarda la imagen en la carpeta Uploads en 3 diferentes tamaños como lo hace WP normalmente, tambien guarda la imagen con el mismo nombre del titulo para el SEO

    Eje:

    Titulo del articulo: Descarga juegos para celular gratis
    Nombre de la imagen: descarga-juegos-para-celular-gratis.jpg

    La imagen la coloca centrada arriba del contenido del articulo

    Eje:
    Titulo
    Imagen
    Contenido
  8. Por ultimo vamos al Panel de Administración, menú Pagina->Añadir nueva, le colocamos como nombre Recuperar Contraseña y a mano derecha debe salir una caja llamada "Atributos de la Pagina" en esa caja dice "Superior" y "Plantilla", en "Plantilla" escogemos el nombre que le pusimos en escribir-articulo.php, si no recuerdan es esta parte Template Name: Escribir Articulo, así que para eso era el nombre, guardamos y listo

    Debe quedar un formulario asi

    f3rosy.jpg
 
Excelente aporte SoloNegocios, va directo a favoritos, me será muy útil.

Tenemos algún sitio usándolo para verlo rodar?

Saludos
 
Un excelente articulo! ¿Has pensado mejorar el aspecto de subir articulos por parte de los usuarios poniendole el editor TinyMCE? Con eso ya quedaria perfecto 🙂
 
Un excelente articulo! ¿Has pensado mejorar el aspecto de subir articulos por parte de los usuarios poniendole el editor TinyMCE? Con eso ya quedaria perfecto 🙂

Yo lo tenia con TinyMCE pero quise darle mas sencilles ya que busco usuarios novatos como los que viven en Facebook que no saben que es una Negrita o una lista o justificar texto xD
 
Carai,que aportaso 😉
 
Atrás
Arriba