Soporte » Plugins y Hacks » WooCommerce » Acceso a escribir y publicar posts después de realizar la compra

  • Hola a todos.

    Es la primera vez que publico aquí y no sé muy bien si mi pregunta va exactamente aquí, si no es así pido disculpas.

    Mi pregunta es ¿cómo se puede hacer para que el usuario solamente pueda acceder a escribir y publicar posts después de haber comprado un artículo en woocommerce, pero no antes de ello? He estado investigando un poco y creo que debería usar la función is_checkout y quizá también publish_post, pero no sé muy bien cómo hacerlo porque tengo pocos conocimientos de programación y soy nuevo en wordpress.

    Muchas gracias por adelantado.

    • Este debate fue modificado hace 3 meses, 1 semana por  musiker81.
    • Este debate fue modificado hace 3 meses, 1 semana por  musiker81.
    • Este debate fue modificado hace 3 meses, 1 semana por  musiker81.
    • Este debate fue modificado hace 3 meses, 1 semana por  musiker81.
Viendo 4 respuestas - 1 de 4 (de 4 total)
  • Moderador josearcos

    (@josearcos)

    Hola @musiker81, no creo que haya ningún plugin para esto, así que tendrás que crearlo tu mismo. Lo que te recomiendo que hagas es que crees un producto virtual, llámalo como quieras. Luego, tras comprobar que un usuario ha comprado ese producto, cámbiale el rol a ese usuario a Autor por ejemplo.
    El gancho que te ayudará a saber si un usuario ha comprado un producto es: woocommerce_payment_complete

    Ese gancho te proporciona el parámetro $order_id para utilizarlo en la función. Dentro de esa función obtén el usuario que ha realizado dicha orden y cámbiale el rol.

    Espero que te sirva.

    Saludos.

    musiker81

    (@musiker81)

    Hola @josearcos, muchas gracias por tu amplia respuesta. Lo he intentado de esta forma pero no hace nada:

    add_action( 'woocommerce_payment_complete', 'so_payment_complete' );
    function so_payment_complete( $order_id ){
        $order = wc_get_order( $order_id );
        $user = $order->get_user();
        if( $user ){
          
           $user = new WP_User( $user_id );
           $user->add_cap( 'publish_post' );
    		
        }
    }

    En ese IF falta una lado de la condición y el operador 😅

    musiker81

    (@musiker81)

    Gracias Elías, es cierto, pero ahora lo he intentado de esta forma y tampoco funciona. No da fallo, pero no hace nada. He pensado que quizá puede ser porque estoy simulando una compra (aunque llego hasta el final) en vez de una compra real, ¿es posible?. Por cierto, lo estoy escribiendo en el archivo functions.php de mi tema, supongo que será ahí el sitio correcto.

    add_action( 'woocommerce_payment_complete', 'so_payment_complete' );
    function so_payment_complete( $order_id ){
        $order = wc_get_order( $order_id );
        $user = $order->get_user();
        if( empty($user) ){
    echo "La variable está vacía"; 
    }else{       
    $user->add_cap( 'publish_posts' );
        }
    } 
    • Esta respuesta fue modificada hace 3 meses por  musiker81.
Viendo 4 respuestas - 1 de 4 (de 4 total)
  • Debes estar registrado para responder a este tema.