Skip to content

Instantly share code, notes, and snippets.

@venturaEffect
Last active August 10, 2020 12:47
Show Gist options
  • Save venturaEffect/daca393c8baff83c96dbc40b8df7e83f to your computer and use it in GitHub Desktop.
Save venturaEffect/daca393c8baff83c96dbc40b8df7e83f to your computer and use it in GitHub Desktop.

Revisions

  1. venturaEffect revised this gist Aug 10, 2020. 1 changed file with 437 additions and 4 deletions.
    441 changes: 437 additions & 4 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -1,13 +1,446 @@
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info<a>
    <?php
    /**
    * Astra Child Theme functions and definitions
    *
    * @link https://developer.wordpress.org/themes/basics/theme-functions/
    *
    * @package Astra Child
    * @since 1.0.0
    */

    /**
    * Define Constants
    */
    define( 'CHILD_THEME_ASTRA_CHILD_VERSION', '1.0.0' );

    /**
    * Enqueue styles
    */
    function child_enqueue_styles() {

    wp_enqueue_style( 'astra-child-theme-css', get_stylesheet_directory_uri() . '/style.css', array('astra-theme-css'), CHILD_THEME_ASTRA_CHILD_VERSION, 'all' );

    }

    add_action( 'wp_enqueue_scripts', 'child_enqueue_styles', 15 );

    /* PARA CUSTOMIZAR HEADER */

    function secondary_menus () {

    global $current_user;

    $c_user_id = get_current_user_id();
    $channel_name = get_user_meta( $c_user_id, 'channel_name', true);
    if (!is_user_logged_in() ) { ?>


    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</button>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch2">dashboard</a>
    </div>

    <?php

    } else {

    if (empty($channel_name)) { ?>


    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>

    <div class="popup btn-my-ch" onclick="myFunction()">dashboard
    <span class="popuptext" id="myPopup">First, <a href="https://channels.example.com/My-channel-info/">create channel</a></span>
    </div>

    </div>

    <script>
    // When the user clicks on <div>, open the popup
    function myFunction() {
    var popup = document.getElementById("myPopup");
    popup.classList.toggle("show");
    }
    </script>

    <?php
    } else { ?>

    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    <a class="btn-my-ch2" target="pupu" onclick="window.open('https://channels.example.com/wp-admin/admin.php?page=ir_instructor_overview','pupu','width=950,height=600');return false;">dashboard</a>
    </div>

    <?php
    }
    }

    }
    add_action( 'wp_head', 'secondary_menus', 10);


    /* mY CHANNEL INFO FORM UPDATE */

    function form_update() {

    global $post;
    if( $post->ID == 153) {

    /* Get user info. */
    global $current_user, $wp_roles;
    /* Load the registration file. */
    $error = array();
    /* If profile was saved, update profile. */
    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {



    /* Update user password. */
    if ( !empty($_POST['pass1'] ) && !empty( $_POST['pass2'] ) ) {
    if ( $_POST['pass1'] == $_POST['pass2'] )
    wp_update_user( array( 'ID' => $current_user->ID, 'user_pass' => esc_attr( $_POST['pass1'] ) ) );
    else
    $error[] = __('The passwords you entered do not match. Your password was not updated.', 'profile');
    }

    /* Update user information. */
    if ( !empty( $_POST['url'] ) )
    wp_update_user( array( 'ID' => $current_user->ID, 'user_url' => esc_url( $_POST['url'] ) ) );
    if ( !empty( $_POST['email'] ) ){
    if (!is_email(esc_attr( $_POST['email'] )))
    $error[] = __('The Email you entered is not valid. please try again.', 'profile');
    elseif(email_exists(esc_attr( $_POST['email'] )) != $current_user->id )
    $error[] = __('This email is already used by another user. try a different one.', 'profile');
    else{
    wp_update_user( array ('ID' => $current_user->ID, 'user_email' => esc_attr( $_POST['email'] )));
    }
    }

    if ( !empty( $_POST['first-name'] ) )
    update_user_meta( $current_user->ID, 'first_name', esc_attr( $_POST['first-name'] ) );
    if ( !empty( $_POST['last-name'] ) )
    update_user_meta($current_user->ID, 'last_name', esc_attr( $_POST['last-name'] ) );
    if ( !empty( $_POST['description'] ) )
    update_user_meta( $current_user->ID, 'description', esc_attr( $_POST['description'] ) );
    if ( !empty( $_POST['channel_name'] ) )
    if(channel_exists( esc_attr( $_POST['channel_name'] )) != $current_user->id )
    $error[] = __('This channel is already used by another user. try a different one.', 'profile');
    else {
    update_user_meta( $current_user->ID, 'channel_name', esc_attr( $_POST['channel_name'] ) );
    }
    if ( !empty( $_POST['pic'] ) )
    update_user_meta( $current_user->ID, 'pic', esc_attr( $_POST['pic'] ) );
    if ( !empty( $_POST['description_channel'] ) )
    update_user_meta( $current_user->ID, 'description_channel', esc_attr( $_POST['description_channel'] ) );

    /* Redirect so the page will show updated info.*/
    /*I am not Author of this Code- i dont know why but it worked for me after changing below line to if ( count($error) == 0 ){ */
    if ( !$error ) {
    wp_redirect( get_permalink() .'?updated=true' );
    exit;
    }
    }


    if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
    }
    }
    }
    add_action( 'wp_enqueue_scripts', 'form_update' );

    function custom_post () {


    global $post;
    if( $post->ID == 153) {

    /* Get user info. */
    global $current_user, $wp_roles;
    /* Load the registration file. */
    $error = array();
    /* If profile was saved, update profile. */
    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {

    var_dump($_POST);

    if ( !empty( $_POST['channel_name']) && !empty( $_POST['description_channel']) && !empty( $_POST['pic'] ) ) {
    // Finally, save/update the channel!
    $user = get_user_by( 'ID', $user_id );
    $channel_id = get_channel_by_author( $user_id );
    $args = [
    'ID' => $channel_id,
    'post_title' => $_POST['channel_name'],
    'post_name' => $_POST['channel_name'], // set the slug/permalink
    'post_content' => $_POST['description_channel'],
    'post_status' => 'publish',
    'post_type' => 'channel',
    ];
    $post_id = wp_insert_post( $args, true );
    var_dump($_POST);

    // check if we were succesful.
    if ( is_wp_error( $post_id ) ) {
    // it didn't work!
    error_log( $post_id->get_error_message() );
    } else if ( empty( $post_id ) ) {
    // it didn't work!
    error_log( "post_id is empty/false" );
    }
    }
    }
    }

    }

    add_action( 'wp', 'custom_post' );



    /* CREATING CHANNEL PAGES FROM USER PROFILES
    function create_channel_page( $user_id = '' ) {
    $user = new WP_User($user_id);
    if ( ! $user->ID ) return '';
    // check if the user whose profile is updating has already a post
    global $wpdb;
    $channel_post_exists = $wpdb->get_var( $wpdb->prepare(
    "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = 'channel' and post_status = 'publish'", $user->channel_name
    ) );
    // you have a custom role for channels
    // you should, because if not all user will have a page, also admin, subscribers...
    // if ( ! in_array('instructor', $user->roles) ) return '';
    $user_info = array_map( function( $a ){ return $a[0]; }, get_user_meta( $user->ID ) );
    $title = $user_info['channel_name'];
    // of course create the content as you want
    $content = 'This is the page for: ';
    $content .= $user_info['description_channel'];
    $post = array(
    'post_title' => $title,
    'post_name' => $user->channel_name,
    'post_content' => $content,
    'post_status' => 'publish',
    'post_type' => 'channel'
    );
    if ( $channel_post_exists ) {
    $post['ID'] = $channel_post_exists;
    wp_update_post( $post );
    } else {
    wp_insert_post( $post );
    }
    }
    add_action( 'personal_options_update', 'create_channel_page' );
    add_action( 'edit_user_profile_update', 'create_channel_page' );
    /* REMOVE OLD CHANNELS WHEN UPDATE
    add_action( 'save_post', 'removing_older_posts' );
    function removing_older_posts() {
    $args = array (
    'post_type' => 'channel',
    'author' => get_user_meta($user->ID),
    'orderby' => 'date',
    );
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) { //if the current user has posts under his/her name
    $i = 0; //create post counter
    while ( $query->have_posts() ) { //loop through each post
    $query->the_post(); //get the current post
    if ($i > 0) { //if you're not on the first post
    wp_delete_post( $query->post->ID, true ); //delete the post
    }
    $i++; //increment the post counter
    }
    wp_reset_postdata();
    }
    }
    */



    function get_channel_by_author( $user_id ) : int {

    global $current_user, $wp_roles;
    $user_id = get_current_user_id();
    // if we don't find anything then a value of 0 will create a new post rather than update an existing post.
    $channel_id = 0;
    $args = [
    'post_type' => 'channel',
    'posts_per_page' => 1,
    'post_author' => $user_id,
    ];
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
    $query->the_post();
    $channel_id = get_the_ID();
    // we only want a single post ID
    break;
    }
    // cleanup after the query
    wp_reset_postdata();
    } else {
    // perhaps the channel was created before post authors were set? Fall back to looking for the post by its slug/name
    return 0;
    }
    return $channel_id;
    }

    function get_channel_by_slug( string $slug ) : int {


    $channel_id = 0;
    $args = [
    'post_type' => 'channel',
    'posts_per_page' => 1,
    'post_name' => $slug
    ];
    //... etc etc see get_channel_by_author ...
    return $channel_id;
    error_log( $channel_id->get_error_message() );
    }


    function handle_channel_post( $user_id = '' ) {

    global $current_user, $wp_roles;
    $user_id = get_current_user_id();


    /*
    // First, is this user an instructor?
    $user = get_user_by( 'ID', $user_id );
    if ( ! $user || ! in_array( 'instructor', $user->roles, true ) ) {
    return;
    }
    */

    // get the channel name
    $channel_name = get_user_meta( $user_id, 'channel_name', true );
    if ( empty( $channel_name )) {
    error_log( "the user does not have a channel_name!" );
    }

    // Then lets find this users channel if it exists.
    // if we don't find anything then a value of 0 will create a new post rather than update an existing post.
    $channel_id = get_channel_by_author( $user_id );
    if ( $channel_id === 0 ) {
    // we didn't find a channel with that author, try the channel name.
    $channel_id = get_channel_by_slug( $channel_name );
    }


    // Finally, save/update the channel!
    $content .= get_user_meta( $user_id, 'description_channel', true );
    $args = [
    'ID' => $channel_id,
    'post_title' => $channel_name,
    'post_name' => $channel_name, // set the slug/permalink
    'post_content' => $content,
    'post_status' => 'publish',
    'post_type' => 'channel',
    ];
    $post_id = wp_insert_post( $args );

    // check if we were succesful.
    if ( is_wp_error( $post_id ) ) {
    // it didn't work!
    error_log( $post_id->get_error_message() );
    } else if ( empty( $post_id ) ) {
    // it didn't work!
    error_log( "post_id is empty/false" );
    }

    }


    add_action( 'personal_options_update', 'handle_channel_post' );
    add_action( 'edit_user_profile_update', 'handle_channel_post' );






    /* WISDMLABAS SNIPPETS */
    function ir_custom_profile_text( $translation, $text, $domain ) {
    // Check if instructor Profile menu
    if ( 'wdm_instructor_role' == $domain && 'Profile'== $text ) {
    $translation = 'My channel info';
    }
    return $translation;
    }
    add_filter ('gettext', 'ir_custom_profile_text', 10, 3);

    // Remove WordPress Logo from the header for instructors
    function ir_remove_admin_bar_logo() {
    global $wp_admin_bar;

    // Check if instructor dashboard
    if (! wdm_is_instructor()) {
    return;
    }

    // Remove Logo
    $wp_admin_bar->remove_menu( 'wp-logo' );
    }
    add_action( 'wp_before_admin_bar_render', 'ir_remove_admin_bar_logo', 11 );

    // To remove the thank you text
    add_filter('admin_footer_text', '__return_empty_string', 11);

    // To remove the WP version info
    add_filter('update_footer', '__return_empty_string', 11);


    //------ ESTO ES PARA REDIRECCIONAR AUTHORS PERMALINKS A CUSTOM PAGE ----//

    /*
    add_filter( 'author_link', 'new_author_link', 10, 1 );
    $users = get_users( array( 'fields' => array( 'ID' ) ) );
    foreach($users as $user){
    $channel_name = get_user_meta($user->ID, 'channel_name', true);
    $new_channel_name = str_replace('-', '%20', $channel_name);
    }
    function new_author_link( $link ) {
    $link = 'https://channels.example.com/channels/'.$new_channel_name; //set this however you wish
    return $link; //after you've set $link, return it to the filter
    }
    add_action('wp', function(){
    $users = get_users( array( 'fields' => array( 'ID' ) ) );
    foreach($users as $user){
    $channel_name = get_user_meta($user->ID, 'channel_name', true);
    $new_channel_name = str_replace('-', '%20', $channel_name);
    }
    list($uri, $qs) = explode('?', $_SERVER['REQUEST_URI']);
    if ( $uri == "/channels/".$new_channel_name ) /* Change this to path that you want to match*/ /* {
    locate_template( "single-channel.php" , true, false ); /* Don't forget to replace template name with actual template which you want to load */
    /* die(); */ /* So that WordPress does not load its template as per template hierarchy. */
    /* }
    });
    */

    // Limit media library access

    add_filter( 'ajax_query_attachments_args', 'wpb_show_current_user_attachments' );

    function wpb_show_current_user_attachments( $query ) {
    $user_id = get_current_user_id();
    if ( $user_id && !current_user_can('activate_plugins') && !current_user_can('edit_others_posts
    ') ) {
    $query['author'] = $user_id;
    }
    return $query;
    }
    ?>
  2. venturaEffect revised this gist Aug 10, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion functions.php
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</button>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info<a>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch2">dashboard</a>
  3. venturaEffect revised this gist Aug 10, 2020. 1 changed file with 4 additions and 421 deletions.
    425 changes: 4 additions & 421 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -1,430 +1,13 @@
    <?php
    /**
    * Astra Child Theme functions and definitions
    *
    * @link https://developer.wordpress.org/themes/basics/theme-functions/
    *
    * @package Astra Child
    * @since 1.0.0
    */

    /**
    * Define Constants
    */
    define( 'CHILD_THEME_ASTRA_CHILD_VERSION', '1.0.0' );

    /**
    * Enqueue styles
    */
    function child_enqueue_styles() {

    wp_enqueue_style( 'astra-child-theme-css', get_stylesheet_directory_uri() . '/style.css', array('astra-theme-css'), CHILD_THEME_ASTRA_CHILD_VERSION, 'all' );

    }

    add_action( 'wp_enqueue_scripts', 'child_enqueue_styles', 15 );

    /* PARA CUSTOMIZAR HEADER */

    function secondary_menus () {

    global $current_user;

    $c_user_id = get_current_user_id();
    $channel_name = get_user_meta( $c_user_id, 'channel_name', true);
    if (!is_user_logged_in() ) { ?>


    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</button>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch2">dashboard</a>
    </div>

    <?php

    } else {

    if (empty($channel_name)) { ?>

    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>

    <div class="popup btn-my-ch" onclick="myFunction()">dashboard
    <span class="popuptext" id="myPopup">First, <a href="https://channels.example.com/My-channel-info/">create channel</a></span>
    </div>

    </div>

    <script>
    // When the user clicks on <div>, open the popup
    function myFunction() {
    var popup = document.getElementById("myPopup");
    popup.classList.toggle("show");
    }
    </script>

    <?php
    } else { ?>

    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    <a class="btn-my-ch2" target="pupu" onclick="window.open('https://channels.example.com/wp-admin/admin.php?page=ir_instructor_overview','pupu','width=950,height=600');return false;">dashboard</a>
    </div>

    <?php
    }
    }

    }
    add_action( 'wp_head', 'secondary_menus', 10);


    /* mY CHANNEL INFO FORM UPDATE */

    function form_update() {

    global $post;
    if( $post->ID == 153) {

    /* Get user info. */
    global $current_user, $wp_roles;
    /* Load the registration file. */
    $error = array();
    /* If profile was saved, update profile. */
    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {

    /* Update user password. */
    if ( !empty($_POST['pass1'] ) && !empty( $_POST['pass2'] ) ) {
    if ( $_POST['pass1'] == $_POST['pass2'] )
    wp_update_user( array( 'ID' => $current_user->ID, 'user_pass' => esc_attr( $_POST['pass1'] ) ) );
    else
    $error[] = __('The passwords you entered do not match. Your password was not updated.', 'profile');
    }

    /* Update user information. */
    if ( !empty( $_POST['url'] ) )
    wp_update_user( array( 'ID' => $current_user->ID, 'user_url' => esc_url( $_POST['url'] ) ) );
    if ( !empty( $_POST['email'] ) ){
    if (!is_email(esc_attr( $_POST['email'] )))
    $error[] = __('The Email you entered is not valid. please try again.', 'profile');
    elseif(email_exists(esc_attr( $_POST['email'] )) != $current_user->id )
    $error[] = __('This email is already used by another user. try a different one.', 'profile');
    else{
    wp_update_user( array ('ID' => $current_user->ID, 'user_email' => esc_attr( $_POST['email'] )));
    }
    }

    if ( !empty( $_POST['first-name'] ) )
    update_user_meta( $current_user->ID, 'first_name', esc_attr( $_POST['first-name'] ) );
    if ( !empty( $_POST['last-name'] ) )
    update_user_meta($current_user->ID, 'last_name', esc_attr( $_POST['last-name'] ) );
    if ( !empty( $_POST['description'] ) )
    update_user_meta( $current_user->ID, 'description', esc_attr( $_POST['description'] ) );
    if ( !empty( $_POST['channel_name'] ) )
    if(channel_exists( esc_attr( $_POST['channel_name'] )) != $current_user->id )
    $error[] = __('This channel is already used by another user. try a different one.', 'profile');
    else {
    update_user_meta( $current_user->ID, 'channel_name', esc_attr( $_POST['channel_name'] ) );
    }
    if ( !empty( $_POST['pic'] ) )
    update_user_meta( $current_user->ID, 'pic', esc_attr( $_POST['pic'] ) );
    if ( !empty( $_POST['description_channel'] ) )
    update_user_meta( $current_user->ID, 'description_channel', esc_attr( $_POST['description_channel'] ) );

    /* Redirect so the page will show updated info.*/
    /*I am not Author of this Code- i dont know why but it worked for me after changing below line to if ( count($error) == 0 ){ */
    if ( !$error ) {
    wp_redirect( get_permalink() .'?updated=true' );
    exit;
    }
    }


    if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
    }
    }
    }
    add_action( 'wp_enqueue_scripts', 'form_update' );

    function custom_post () {

    global $post;
    if( $post->ID == 153) {

    /* Get user info. */
    global $current_user, $wp_roles;
    /* Load the registration file. */
    $error = array();
    /* If profile was saved, update profile. */
    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {

    var_dump($_POST);

    if ( !empty( $_POST['channel_name']) && !empty( $_POST['description_channel']) && !empty( $_POST['pic'] ) ) {
    // Finally, save/update the channel!
    $user = get_user_by( 'ID', $user_id );
    $channel_id = get_channel_by_author( $user_id );
    $args = [
    'ID' => $channel_id,
    'post_title' => $_POST['channel_name'],
    'post_name' => $_POST['channel_name'], // set the slug/permalink
    'post_content' => $_POST['description_channel'],
    'post_status' => 'publish',
    'post_type' => 'channel',
    ];
    $post_id = wp_insert_post( $args, true );
    var_dump($_POST);

    // check if we were succesful.
    if ( is_wp_error( $post_id ) ) {
    // it didn't work!
    error_log( $post_id->get_error_message() );
    } else if ( empty( $post_id ) ) {
    // it didn't work!
    error_log( "post_id is empty/false" );
    }
    }
    }
    }

    add_action( 'init', 'custom_post' );

    }



    /* CREATING CHANNEL PAGES FROM USER PROFILES
    function create_channel_page( $user_id = '' ) {
    $user = new WP_User($user_id);
    if ( ! $user->ID ) return '';
    // check if the user whose profile is updating has already a post
    global $wpdb;
    $channel_post_exists = $wpdb->get_var( $wpdb->prepare(
    "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = 'channel' and post_status = 'publish'", $user->channel_name
    ) );
    // you have a custom role for channels
    // you should, because if not all user will have a page, also admin, subscribers...
    // if ( ! in_array('instructor', $user->roles) ) return '';
    $user_info = array_map( function( $a ){ return $a[0]; }, get_user_meta( $user->ID ) );
    $title = $user_info['channel_name'];
    // of course create the content as you want
    $content = 'This is the page for: ';
    $content .= $user_info['description_channel'];
    $post = array(
    'post_title' => $title,
    'post_name' => $user->channel_name,
    'post_content' => $content,
    'post_status' => 'publish',
    'post_type' => 'channel'
    );
    if ( $channel_post_exists ) {
    $post['ID'] = $channel_post_exists;
    wp_update_post( $post );
    } else {
    wp_insert_post( $post );
    }
    }
    add_action( 'personal_options_update', 'create_channel_page' );
    add_action( 'edit_user_profile_update', 'create_channel_page' );
    /* REMOVE OLD CHANNELS WHEN UPDATE
    add_action( 'save_post', 'removing_older_posts' );
    function removing_older_posts() {
    $args = array (
    'post_type' => 'channel',
    'author' => get_user_meta($user->ID),
    'orderby' => 'date',
    );
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) { //if the current user has posts under his/her name
    $i = 0; //create post counter
    while ( $query->have_posts() ) { //loop through each post
    $query->the_post(); //get the current post
    if ($i > 0) { //if you're not on the first post
    wp_delete_post( $query->post->ID, true ); //delete the post
    }
    $i++; //increment the post counter
    }
    wp_reset_postdata();
    }
    }
    */



    function get_channel_by_author( $user_id ) : int {
    // if we don't find anything then a value of 0 will create a new post rather than update an existing post.
    $channel_id = 0;
    $args = [
    'post_type' => 'channel',
    'posts_per_page' => 1,
    'post_author' => $user_id,
    ];
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
    $query->the_post();
    $channel_id = get_the_ID();
    // we only want a single post ID
    break;
    }
    // cleanup after the query
    wp_reset_postdata();
    } else {
    // perhaps the channel was created before post authors were set? Fall back to looking for the post by its slug/name
    return 0;
    }
    return $channel_id;
    }

    function get_channel_by_slug( string $slug ) : int {
    $channel_id = 0;
    $args = [
    'post_type' => 'channel',
    'posts_per_page' => 1,
    'post_name' => $slug
    ];
    //... etc etc see get_channel_by_author ...
    return $channel_id;
    error_log( $channel_id->get_error_message() );
    }


    function handle_channel_post( $user_id = '' ) {
    // First, is this user an instructor?
    $user = get_user_by( 'ID', $user_id );
    if ( ! $user || ! in_array( 'instructor', $user->roles, true ) ) {
    return;
    }

    // get the channel name
    $channel_name = get_user_meta( $user_id, 'channel_name', true );
    if ( empty( $channel_name )) {
    error_log( "the user does not have a channel_name!" );
    }

    // Then lets find this users channel if it exists.
    // if we don't find anything then a value of 0 will create a new post rather than update an existing post.
    $channel_id = get_channel_by_author( $user_id );
    if ( $channel_id === 0 ) {
    // we didn't find a channel with that author, try the channel name.
    $channel_id = get_channel_by_slug( $channel_name );
    }


    // Finally, save/update the channel!
    $content .= get_user_meta( $user_id, 'description_channel', true );
    $args = [
    'ID' => $channel_id,
    'post_title' => $channel_name,
    'post_name' => $channel_name, // set the slug/permalink
    'post_content' => $content,
    'post_status' => 'publish',
    'post_type' => 'channel',
    ];
    $post_id = wp_insert_post( $args );

    // check if we were succesful.
    if ( is_wp_error( $post_id ) ) {
    // it didn't work!
    error_log( $post_id->get_error_message() );
    } else if ( empty( $post_id ) ) {
    // it didn't work!
    error_log( "post_id is empty/false" );
    }

    }


    add_action( 'personal_options_update', 'handle_channel_post' );
    add_action( 'edit_user_profile_update', 'handle_channel_post' );






    /* WISDMLABAS SNIPPETS */
    function ir_custom_profile_text( $translation, $text, $domain ) {
    // Check if instructor Profile menu
    if ( 'wdm_instructor_role' == $domain && 'Profile'== $text ) {
    $translation = 'My channel info';
    }
    return $translation;
    }
    add_filter ('gettext', 'ir_custom_profile_text', 10, 3);

    // Remove WordPress Logo from the header for instructors
    function ir_remove_admin_bar_logo() {
    global $wp_admin_bar;

    // Check if instructor dashboard
    if (! wdm_is_instructor()) {
    return;
    }

    // Remove Logo
    $wp_admin_bar->remove_menu( 'wp-logo' );
    }
    add_action( 'wp_before_admin_bar_render', 'ir_remove_admin_bar_logo', 11 );

    // To remove the thank you text
    add_filter('admin_footer_text', '__return_empty_string', 11);

    // To remove the WP version info
    add_filter('update_footer', '__return_empty_string', 11);


    //------ ESTO ES PARA REDIRECCIONAR AUTHORS PERMALINKS A CUSTOM PAGE ----//
    <span class="popuptext" id="myPopup">First, <a href="https://channels.example.com/My-channel-info/">create channel</a></span>
    /*
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    add_filter( 'author_link', 'new_author_link', 10, 1 );
    $users = get_users( array( 'fields' => array( 'ID' ) ) );
    foreach($users as $user){
    $channel_name = get_user_meta($user->ID, 'channel_name', true);
    $new_channel_name = str_replace('-', '%20', $channel_name);
    }
    <a class="btn-my-ch2" target="pupu" onclick="window.open('https://channels.example.com/wp-admin/admin.php?page=ir_instructor_overview','pupu','width=950,height=600');return false;">dashboard</a>
    function new_author_link( $link ) {
    $link = 'https://channels.example.com/channels/'.$new_channel_name; //set this however you wish
    return $link; //after you've set $link, return it to the filter
    }
    add_action('wp', function(){
    $users = get_users( array( 'fields' => array( 'ID' ) ) );
    foreach($users as $user){
    $channel_name = get_user_meta($user->ID, 'channel_name', true);
    $new_channel_name = str_replace('-', '%20', $channel_name);
    }
    list($uri, $qs) = explode('?', $_SERVER['REQUEST_URI']);
    if ( $uri == "/channels/".$new_channel_name ) /* Change this to path that you want to match*/ /* {
    locate_template( "single-channel.php" , true, false ); /* Don't forget to replace template name with actual template which you want to load */
    /* die(); */ /* So that WordPress does not load its template as per template hierarchy. */
    /* }
    });
    */

    // Limit media library access

    add_filter( 'ajax_query_attachments_args', 'wpb_show_current_user_attachments' );

    function wpb_show_current_user_attachments( $query ) {
    $user_id = get_current_user_id();
    if ( $user_id && !current_user_can('activate_plugins') && !current_user_can('edit_others_posts
    ') ) {
    $query['author'] = $user_id;
    }
    return $query;
    }
    ?>
  4. venturaEffect revised this gist Aug 10, 2020. 1 changed file with 7 additions and 7 deletions.
    14 changes: 7 additions & 7 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -36,8 +36,8 @@ function secondary_menus () {


    <div class="btn-ch">
    <a href="https://channels.stokednomads.com/My-channel-info/" class="btn-my-ch">my channel info</button>
    <a href="https://channels.stokednomads.com/My-channel-info/" class="btn-my-ch2">dashboard</a>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</button>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch2">dashboard</a>
    </div>

    <?php
    @@ -48,10 +48,10 @@ function secondary_menus () {


    <div class="btn-ch">
    <a href="https://channels.stokednomads.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>

    <div class="popup btn-my-ch" onclick="myFunction()">dashboard
    <span class="popuptext" id="myPopup">First, <a href="https://channels.stokednomads.com/My-channel-info/">create channel</a></span>
    <span class="popuptext" id="myPopup">First, <a href="https://channels.example.com/My-channel-info/">create channel</a></span>
    </div>

    </div>
    @@ -68,8 +68,8 @@ function myFunction() {
    } else { ?>

    <div class="btn-ch">
    <a href="https://channels.stokednomads.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    <a class="btn-my-ch2" target="pupu" onclick="window.open('https://channels.stokednomads.com/wp-admin/admin.php?page=ir_instructor_overview','pupu','width=950,height=600');return false;">dashboard</a>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    <a class="btn-my-ch2" target="pupu" onclick="window.open('https://channels.example.com/wp-admin/admin.php?page=ir_instructor_overview','pupu','width=950,height=600');return false;">dashboard</a>
    </div>

    <?php
    @@ -396,7 +396,7 @@ function ir_remove_admin_bar_logo() {
    }
    function new_author_link( $link ) {
    $link = 'https://channels.stokednomads.com/channels/'.$new_channel_name; //set this however you wish
    $link = 'https://channels.example.com/channels/'.$new_channel_name; //set this however you wish
    return $link; //after you've set $link, return it to the filter
    }
  5. venturaEffect revised this gist Aug 10, 2020. 1 changed file with 12 additions and 9 deletions.
    21 changes: 12 additions & 9 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -36,8 +36,8 @@ function secondary_menus () {


    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</button>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch2">dashboard</a>
    <a href="https://channels.stokednomads.com/My-channel-info/" class="btn-my-ch">my channel info</button>
    <a href="https://channels.stokednomads.com/My-channel-info/" class="btn-my-ch2">dashboard</a>
    </div>

    <?php
    @@ -48,10 +48,10 @@ function secondary_menus () {


    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    <a href="https://channels.stokednomads.com/My-channel-info/" class="btn-my-ch">my channel info</a>

    <div class="popup btn-my-ch" onclick="myFunction()">dashboard
    <span class="popuptext" id="myPopup">First, <a href="https://channels.example.com/My-channel-info/">create channel</a></span>
    <span class="popuptext" id="myPopup">First, <a href="https://channels.stokednomads.com/My-channel-info/">create channel</a></span>
    </div>

    </div>
    @@ -68,8 +68,8 @@ function myFunction() {
    } else { ?>

    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    <a class="btn-my-ch2" target="pupu" onclick="window.open('https://channels.example.com/wp-admin/admin.php?page=ir_instructor_overview','pupu','width=950,height=600');return false;">dashboard</a>
    <a href="https://channels.stokednomads.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    <a class="btn-my-ch2" target="pupu" onclick="window.open('https://channels.stokednomads.com/wp-admin/admin.php?page=ir_instructor_overview','pupu','width=950,height=600');return false;">dashboard</a>
    </div>

    <?php
    @@ -159,6 +159,8 @@ function custom_post () {
    $error = array();
    /* If profile was saved, update profile. */
    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {

    var_dump($_POST);

    if ( !empty( $_POST['channel_name']) && !empty( $_POST['description_channel']) && !empty( $_POST['pic'] ) ) {
    // Finally, save/update the channel!
    @@ -172,7 +174,8 @@ function custom_post () {
    'post_status' => 'publish',
    'post_type' => 'channel',
    ];
    $post_id = wp_insert_post( $args );
    $post_id = wp_insert_post( $args, true );
    var_dump($_POST);

    // check if we were succesful.
    if ( is_wp_error( $post_id ) ) {
    @@ -299,7 +302,7 @@ function get_channel_by_slug( string $slug ) : int {
    function handle_channel_post( $user_id = '' ) {
    // First, is this user an instructor?
    $user = get_user_by( 'ID', $user_id );
    if ( ! $user || ! in_array( 'admin', $user->roles, true ) ) {
    if ( ! $user || ! in_array( 'instructor', $user->roles, true ) ) {
    return;
    }

    @@ -393,7 +396,7 @@ function ir_remove_admin_bar_logo() {
    }
    function new_author_link( $link ) {
    $link = 'https://channels.example.com/channels/'.$new_channel_name; //set this however you wish
    $link = 'https://channels.stokednomads.com/channels/'.$new_channel_name; //set this however you wish
    return $link; //after you've set $link, return it to the filter
    }
  6. venturaEffect revised this gist Aug 10, 2020. 1 changed file with 2 additions and 3 deletions.
    5 changes: 2 additions & 3 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -295,8 +295,7 @@ function get_channel_by_slug( string $slug ) : int {
    error_log( $channel_id->get_error_message() );
    }

    $retrieved_nonce = $_REQUEST['_wpnonce'];
    if (wp_verify_nonce($retrieved_nonce, 'update-user')) {

    function handle_channel_post( $user_id = '' ) {
    // First, is this user an instructor?
    $user = get_user_by( 'ID', $user_id );
    @@ -345,7 +344,7 @@ function handle_channel_post( $user_id = '' ) {

    add_action( 'personal_options_update', 'handle_channel_post' );
    add_action( 'edit_user_profile_update', 'handle_channel_post' );
    }




  7. venturaEffect created this gist Aug 10, 2020.
    428 changes: 428 additions & 0 deletions functions.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,428 @@
    <?php
    /**
    * Astra Child Theme functions and definitions
    *
    * @link https://developer.wordpress.org/themes/basics/theme-functions/
    *
    * @package Astra Child
    * @since 1.0.0
    */

    /**
    * Define Constants
    */
    define( 'CHILD_THEME_ASTRA_CHILD_VERSION', '1.0.0' );

    /**
    * Enqueue styles
    */
    function child_enqueue_styles() {

    wp_enqueue_style( 'astra-child-theme-css', get_stylesheet_directory_uri() . '/style.css', array('astra-theme-css'), CHILD_THEME_ASTRA_CHILD_VERSION, 'all' );

    }

    add_action( 'wp_enqueue_scripts', 'child_enqueue_styles', 15 );

    /* PARA CUSTOMIZAR HEADER */

    function secondary_menus () {

    global $current_user;

    $c_user_id = get_current_user_id();
    $channel_name = get_user_meta( $c_user_id, 'channel_name', true);
    if (!is_user_logged_in() ) { ?>


    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</button>
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch2">dashboard</a>
    </div>

    <?php

    } else {

    if (empty($channel_name)) { ?>


    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>

    <div class="popup btn-my-ch" onclick="myFunction()">dashboard
    <span class="popuptext" id="myPopup">First, <a href="https://channels.example.com/My-channel-info/">create channel</a></span>
    </div>

    </div>

    <script>
    // When the user clicks on <div>, open the popup
    function myFunction() {
    var popup = document.getElementById("myPopup");
    popup.classList.toggle("show");
    }
    </script>

    <?php
    } else { ?>

    <div class="btn-ch">
    <a href="https://channels.example.com/My-channel-info/" class="btn-my-ch">my channel info</a>
    <a class="btn-my-ch2" target="pupu" onclick="window.open('https://channels.example.com/wp-admin/admin.php?page=ir_instructor_overview','pupu','width=950,height=600');return false;">dashboard</a>
    </div>

    <?php
    }
    }

    }
    add_action( 'wp_head', 'secondary_menus', 10);


    /* mY CHANNEL INFO FORM UPDATE */

    function form_update() {

    global $post;
    if( $post->ID == 153) {

    /* Get user info. */
    global $current_user, $wp_roles;
    /* Load the registration file. */
    $error = array();
    /* If profile was saved, update profile. */
    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {

    /* Update user password. */
    if ( !empty($_POST['pass1'] ) && !empty( $_POST['pass2'] ) ) {
    if ( $_POST['pass1'] == $_POST['pass2'] )
    wp_update_user( array( 'ID' => $current_user->ID, 'user_pass' => esc_attr( $_POST['pass1'] ) ) );
    else
    $error[] = __('The passwords you entered do not match. Your password was not updated.', 'profile');
    }

    /* Update user information. */
    if ( !empty( $_POST['url'] ) )
    wp_update_user( array( 'ID' => $current_user->ID, 'user_url' => esc_url( $_POST['url'] ) ) );
    if ( !empty( $_POST['email'] ) ){
    if (!is_email(esc_attr( $_POST['email'] )))
    $error[] = __('The Email you entered is not valid. please try again.', 'profile');
    elseif(email_exists(esc_attr( $_POST['email'] )) != $current_user->id )
    $error[] = __('This email is already used by another user. try a different one.', 'profile');
    else{
    wp_update_user( array ('ID' => $current_user->ID, 'user_email' => esc_attr( $_POST['email'] )));
    }
    }

    if ( !empty( $_POST['first-name'] ) )
    update_user_meta( $current_user->ID, 'first_name', esc_attr( $_POST['first-name'] ) );
    if ( !empty( $_POST['last-name'] ) )
    update_user_meta($current_user->ID, 'last_name', esc_attr( $_POST['last-name'] ) );
    if ( !empty( $_POST['description'] ) )
    update_user_meta( $current_user->ID, 'description', esc_attr( $_POST['description'] ) );
    if ( !empty( $_POST['channel_name'] ) )
    if(channel_exists( esc_attr( $_POST['channel_name'] )) != $current_user->id )
    $error[] = __('This channel is already used by another user. try a different one.', 'profile');
    else {
    update_user_meta( $current_user->ID, 'channel_name', esc_attr( $_POST['channel_name'] ) );
    }
    if ( !empty( $_POST['pic'] ) )
    update_user_meta( $current_user->ID, 'pic', esc_attr( $_POST['pic'] ) );
    if ( !empty( $_POST['description_channel'] ) )
    update_user_meta( $current_user->ID, 'description_channel', esc_attr( $_POST['description_channel'] ) );

    /* Redirect so the page will show updated info.*/
    /*I am not Author of this Code- i dont know why but it worked for me after changing below line to if ( count($error) == 0 ){ */
    if ( !$error ) {
    wp_redirect( get_permalink() .'?updated=true' );
    exit;
    }
    }


    if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
    }
    }
    }
    add_action( 'wp_enqueue_scripts', 'form_update' );

    function custom_post () {

    global $post;
    if( $post->ID == 153) {

    /* Get user info. */
    global $current_user, $wp_roles;
    /* Load the registration file. */
    $error = array();
    /* If profile was saved, update profile. */
    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) {

    if ( !empty( $_POST['channel_name']) && !empty( $_POST['description_channel']) && !empty( $_POST['pic'] ) ) {
    // Finally, save/update the channel!
    $user = get_user_by( 'ID', $user_id );
    $channel_id = get_channel_by_author( $user_id );
    $args = [
    'ID' => $channel_id,
    'post_title' => $_POST['channel_name'],
    'post_name' => $_POST['channel_name'], // set the slug/permalink
    'post_content' => $_POST['description_channel'],
    'post_status' => 'publish',
    'post_type' => 'channel',
    ];
    $post_id = wp_insert_post( $args );

    // check if we were succesful.
    if ( is_wp_error( $post_id ) ) {
    // it didn't work!
    error_log( $post_id->get_error_message() );
    } else if ( empty( $post_id ) ) {
    // it didn't work!
    error_log( "post_id is empty/false" );
    }
    }
    }
    }

    add_action( 'init', 'custom_post' );

    }



    /* CREATING CHANNEL PAGES FROM USER PROFILES
    function create_channel_page( $user_id = '' ) {
    $user = new WP_User($user_id);
    if ( ! $user->ID ) return '';
    // check if the user whose profile is updating has already a post
    global $wpdb;
    $channel_post_exists = $wpdb->get_var( $wpdb->prepare(
    "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = 'channel' and post_status = 'publish'", $user->channel_name
    ) );
    // you have a custom role for channels
    // you should, because if not all user will have a page, also admin, subscribers...
    // if ( ! in_array('instructor', $user->roles) ) return '';
    $user_info = array_map( function( $a ){ return $a[0]; }, get_user_meta( $user->ID ) );
    $title = $user_info['channel_name'];
    // of course create the content as you want
    $content = 'This is the page for: ';
    $content .= $user_info['description_channel'];
    $post = array(
    'post_title' => $title,
    'post_name' => $user->channel_name,
    'post_content' => $content,
    'post_status' => 'publish',
    'post_type' => 'channel'
    );
    if ( $channel_post_exists ) {
    $post['ID'] = $channel_post_exists;
    wp_update_post( $post );
    } else {
    wp_insert_post( $post );
    }
    }
    add_action( 'personal_options_update', 'create_channel_page' );
    add_action( 'edit_user_profile_update', 'create_channel_page' );
    /* REMOVE OLD CHANNELS WHEN UPDATE
    add_action( 'save_post', 'removing_older_posts' );
    function removing_older_posts() {
    $args = array (
    'post_type' => 'channel',
    'author' => get_user_meta($user->ID),
    'orderby' => 'date',
    );
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) { //if the current user has posts under his/her name
    $i = 0; //create post counter
    while ( $query->have_posts() ) { //loop through each post
    $query->the_post(); //get the current post
    if ($i > 0) { //if you're not on the first post
    wp_delete_post( $query->post->ID, true ); //delete the post
    }
    $i++; //increment the post counter
    }
    wp_reset_postdata();
    }
    }
    */



    function get_channel_by_author( $user_id ) : int {
    // if we don't find anything then a value of 0 will create a new post rather than update an existing post.
    $channel_id = 0;
    $args = [
    'post_type' => 'channel',
    'posts_per_page' => 1,
    'post_author' => $user_id,
    ];
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
    $query->the_post();
    $channel_id = get_the_ID();
    // we only want a single post ID
    break;
    }
    // cleanup after the query
    wp_reset_postdata();
    } else {
    // perhaps the channel was created before post authors were set? Fall back to looking for the post by its slug/name
    return 0;
    }
    return $channel_id;
    }

    function get_channel_by_slug( string $slug ) : int {
    $channel_id = 0;
    $args = [
    'post_type' => 'channel',
    'posts_per_page' => 1,
    'post_name' => $slug
    ];
    //... etc etc see get_channel_by_author ...
    return $channel_id;
    error_log( $channel_id->get_error_message() );
    }

    $retrieved_nonce = $_REQUEST['_wpnonce'];
    if (wp_verify_nonce($retrieved_nonce, 'update-user')) {
    function handle_channel_post( $user_id = '' ) {
    // First, is this user an instructor?
    $user = get_user_by( 'ID', $user_id );
    if ( ! $user || ! in_array( 'admin', $user->roles, true ) ) {
    return;
    }

    // get the channel name
    $channel_name = get_user_meta( $user_id, 'channel_name', true );
    if ( empty( $channel_name )) {
    error_log( "the user does not have a channel_name!" );
    }

    // Then lets find this users channel if it exists.
    // if we don't find anything then a value of 0 will create a new post rather than update an existing post.
    $channel_id = get_channel_by_author( $user_id );
    if ( $channel_id === 0 ) {
    // we didn't find a channel with that author, try the channel name.
    $channel_id = get_channel_by_slug( $channel_name );
    }


    // Finally, save/update the channel!
    $content .= get_user_meta( $user_id, 'description_channel', true );
    $args = [
    'ID' => $channel_id,
    'post_title' => $channel_name,
    'post_name' => $channel_name, // set the slug/permalink
    'post_content' => $content,
    'post_status' => 'publish',
    'post_type' => 'channel',
    ];
    $post_id = wp_insert_post( $args );

    // check if we were succesful.
    if ( is_wp_error( $post_id ) ) {
    // it didn't work!
    error_log( $post_id->get_error_message() );
    } else if ( empty( $post_id ) ) {
    // it didn't work!
    error_log( "post_id is empty/false" );
    }

    }


    add_action( 'personal_options_update', 'handle_channel_post' );
    add_action( 'edit_user_profile_update', 'handle_channel_post' );
    }





    /* WISDMLABAS SNIPPETS */
    function ir_custom_profile_text( $translation, $text, $domain ) {
    // Check if instructor Profile menu
    if ( 'wdm_instructor_role' == $domain && 'Profile'== $text ) {
    $translation = 'My channel info';
    }
    return $translation;
    }
    add_filter ('gettext', 'ir_custom_profile_text', 10, 3);

    // Remove WordPress Logo from the header for instructors
    function ir_remove_admin_bar_logo() {
    global $wp_admin_bar;

    // Check if instructor dashboard
    if (! wdm_is_instructor()) {
    return;
    }

    // Remove Logo
    $wp_admin_bar->remove_menu( 'wp-logo' );
    }
    add_action( 'wp_before_admin_bar_render', 'ir_remove_admin_bar_logo', 11 );

    // To remove the thank you text
    add_filter('admin_footer_text', '__return_empty_string', 11);

    // To remove the WP version info
    add_filter('update_footer', '__return_empty_string', 11);


    //------ ESTO ES PARA REDIRECCIONAR AUTHORS PERMALINKS A CUSTOM PAGE ----//

    /*
    add_filter( 'author_link', 'new_author_link', 10, 1 );
    $users = get_users( array( 'fields' => array( 'ID' ) ) );
    foreach($users as $user){
    $channel_name = get_user_meta($user->ID, 'channel_name', true);
    $new_channel_name = str_replace('-', '%20', $channel_name);
    }
    function new_author_link( $link ) {
    $link = 'https://channels.example.com/channels/'.$new_channel_name; //set this however you wish
    return $link; //after you've set $link, return it to the filter
    }
    add_action('wp', function(){
    $users = get_users( array( 'fields' => array( 'ID' ) ) );
    foreach($users as $user){
    $channel_name = get_user_meta($user->ID, 'channel_name', true);
    $new_channel_name = str_replace('-', '%20', $channel_name);
    }
    list($uri, $qs) = explode('?', $_SERVER['REQUEST_URI']);
    if ( $uri == "/channels/".$new_channel_name ) /* Change this to path that you want to match*/ /* {
    locate_template( "single-channel.php" , true, false ); /* Don't forget to replace template name with actual template which you want to load */
    /* die(); */ /* So that WordPress does not load its template as per template hierarchy. */
    /* }
    });
    */

    // Limit media library access

    add_filter( 'ajax_query_attachments_args', 'wpb_show_current_user_attachments' );

    function wpb_show_current_user_attachments( $query ) {
    $user_id = get_current_user_id();
    if ( $user_id && !current_user_can('activate_plugins') && !current_user_can('edit_others_posts
    ') ) {
    $query['author'] = $user_id;
    }
    return $query;
    }
    ?>