New Dev Setup PHP & Ubuntu – For Windows

Useful for Debugging :
https://old.garthbaker.co.za/re-install-ubuntu-windows-11/

Install PHP 8 (Ubuntu Terminal cd ~)

sudo apt update
sudo apt -y upgrade
--
sudo apt update
sudo apt install lsb-release ca-certificates apt-transport-https software-properties-common -y
sudo add-apt-repository ppa:ondrej/php
--
sudo apt update
sudo apt install php8.0
--
php -v

Installing Required Extensions (Ubuntu Terminal cd ~)

The below command should be enough. But if you missing extensions, check below

sudo apt install php8.0-curl php8.0-cli php8.0-xml php8.0-mbstring php8.0-zip php8.0-pdo php8.0-mysql php8.0-gd

If you want to list all PHP 8.0 loaded modules use the command:
php -m

sudo apt install php8.0-

php8.0-amqp       php8.0-common     php8.0-gd         php8.0-ldap       php8.0-odbc       php8.0-readline   php8.0-sqlite3    php8.0-xsl
php8.0-apcu       php8.0-curl       php8.0-gmp        php8.0-mailparse  php8.0-opcache    php8.0-redis      php8.0-sybase     php8.0-yac
php8.0-ast        php8.0-dba        php8.0-igbinary   php8.0-mbstring   php8.0-pgsql      php8.0-rrd        php8.0-tidy       php8.0-yaml
php8.0-bcmath     php8.0-dev        php8.0-imagick    php8.0-memcached  php8.0-phpdbg     php8.0-smbclient  php8.0-uuid       php8.0-zip
php8.0-bz2        php8.0-ds         php8.0-imap       php8.0-msgpack    php8.0-pspell     php8.0-snmp       php8.0-xdebug     php8.0-zmq
php8.0-cgi        php8.0-enchant    php8.0-interbase  php8.0-mysql      php8.0-psr        php8.0-soap       php8.0-xhprof
php8.0-cli        php8.0-fpm        php8.0-intl       php8.0-oauth      php8.0-raphf      php8.0-solr       php8.0-xml

Install Composer (Ubuntu Terminal cd ~)

//Update your packages:
sudo apt-get update

//Install Curl to get the composer library:
sudo apt-get install curl

//Installing composer:
sudo curl -s https://getcomposer.org/installer | php

//Move the composer file to bin path :
sudo mv composer.phar /usr/local/bin/composer

//Verify composer installation :
composer

Install NPM (Ubuntu Terminal cd ~)

sudo apt install npm

Activate WSL 2 and Virtual Machine Platform
(Run as Admin in powershell ~)

NB!!! Don't forget to install the kernel for wsl2 :
https://docs.microsoft.com/en-za/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

//Enable the WSL2 without reboot 
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 

//Enable the Virtual Machine Platform 
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Set WSL2 Default (Run as Admin in powershell ~)

wsl --set-default-version 2

Manually Started – JS Cronjob

When you write your script and save it, it will not automatically run.

You must load the file first.
After loading the file the cronjob will continue running automatically.

<script type="text/javascript">
  // Cron Timer (Set run timer)
  setTimeout(function() {
   location.reload();
 }, 25000 /* 25 seconds */ );
</script>

<?php
  // Call to Method
  csv_dump_and_send();
?>

xDebug PHP Wizard

Setting up xDebug is a bit of a pain as the links are not clearly linked.
So below is some info to help you 😉

In order to use the Install Wizard.
Open your PHPinfo() page from the xampp default dashboard page
http://localhost/dashboard/phpinfo.php

Copy all "Ctrl+A" and paste into the install wizard box and you will get further instructions

The Install Wizard (I think this is mainly for windows. Linux and mac can use terminal)
https://xdebug.org/wizard

Here's the downloads you going to need as the one you get from the wizard is not working. (currently at the time of this post creation)
https://xdebug.org/download#releases

Remove menu items for non admins

function TRIM_ADMIN_MENU() {
    global $current_user;
    if(!current_user_can('administrator')) {
        remove_menu_page( 'tools.php' ); // No tools for <= editors
        remove_menu_page( 'activity_log_page' ); // Activity log
    }
}
add_action('admin_init', 'TRIM_ADMIN_MENU');

WordPress unregister post type

if( !function_exists( 'plugin_prefix_unregister_post_type' ) ) {
    function plugin_prefix_unregister_post_type(){
        unregister_post_type( 'project' );
    }
}
add_action('init','plugin_prefix_unregister_post_type');

Create New Post Type – WordPress Native

function create_posttype() {
  register_post_type( 'wpll_product',
    array(
      'labels' => array(
        'name' => __( 'Videos' ),
        'singular_name' => __( 'Video' )
      ),
      'public' => true,
      'has_archive' => true,
      'rewrite' => array('slug' => 'videos'),
    )
  );
}
add_action( 'init', 'create_posttype' );

Add Script to WordPess Header

function my_custom_js() {
    echo '<script src="https://wchat.freshchat.com/js/widget.js"></script>';
}
// Add hook for admin <head></head>
add_action( 'admin_head', 'my_custom_js' );
// Add hook for front-end <head></head>
add_action( 'wp_head', 'my_custom_js' );

Remove Admin Menu Items

function remove_menus(){
  remove_menu_page( 'index.php' );                  //Dashboard
  remove_menu_page( 'edit.php' );                   //Posts
  remove_menu_page( 'upload.php' );                 //Media
  remove_menu_page( 'edit.php?post_type=page' );    //Pages
  remove_menu_page( 'edit-comments.php' );          //Comments
  remove_menu_page( 'themes.php' );                 //Appearance
  remove_menu_page( 'plugins.php' );                //Plugins
  remove_menu_page( 'users.php' );                  //Users
  remove_menu_page( 'tools.php' );                  //Tools
  remove_menu_page( 'options-general.php' );        //Settings 
}
add_action( 'admin_menu', 'remove_menus' );