Ben Rothman - WordPress Developer WordPress Archives - Page 4 of 5 - ©2023 Ben Rothman, Web Developer

Blog

My blog is dedicated to sharing my expertise, recommendations, and tutorials on WordPress. If you're interested in developing with WordPress, my blog is a valuable resource that you won't want to miss.

Categories
Web Development Website WordPress

How to Add a Custom Taxonomy to Users in WordPress

Last Tested: 2/5/2022

This will guide you through setting up a custom taxonomy that you can add to and change whenever you are looking at the profile of a user, it has functions to register, display and save the changes to the taxonomy. In our example we are going to assign each user a department or departments, to later use to give them access to the page or pages for the given department.

/* Step 1 Register the Taxonomy */
Register the taxonomy by placing the function below in your functions.php file or in your plugin file depending on your preference:

function custom_user_taxonomy() {

  $labels = array(
    'name'                       => _x( 'Departments', 'Departments Name', 'text_domain' ),
    'singular_name'              => _x( 'Department', 'Department Name', 'text_domain' ),
    'menu_name'                  => __( 'Departments', 'text_domain' ),
    'all_items'                  => __( 'All Departments', 'text_domain' ),
    'parent_item'                => __( 'Parent Department', 'text_domain' ),
    'parent_item_colon'          => __( 'Parent Department:', 'text_domain' ),
    'new_item_name'              => __( 'New Department Name', 'text_domain' ),
    'add_new_item'               => __( 'Add Department', 'text_domain' ),
    'edit_item'                  => __( 'Edit Department', 'text_domain' ),
    'update_item'                => __( 'Update Department', 'text_domain' ),
    'view_item'                  => __( 'View Department', 'text_domain' ),
    'separate_items_with_commas' => __( 'Separate department with commas', 'text_domain' ),
    'add_or_remove_items'        => __( 'Add or remove departments', 'text_domain' ),
    'choose_from_most_used'      => __( 'Choose from the most used', 'text_domain' ),
    'popular_items'              => __( 'Popular Departments', 'text_domain' ),
    'search_items'               => __( 'Search Departments', 'text_domain' ),
    'not_found'                  => __( 'Not Found', 'text_domain' ),
    'no_terms'                   => __( 'No departments', 'text_domain' ),
    'items_list'                 => __( 'Departments list', 'text_domain' ),
    'items_list_navigation'      => __( 'Departments list navigation', 'text_domain' ),
  );
  $args = array(
    'labels'                     => $labels,
    'hierarchical'               => true,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => true,
  );
  register_taxonomy( 'departments', 'user', $args );

}
add_action( 'init', 'custom_user_taxonomy', 0 );

Step 2: Add the Admin page for the custom Taxonomy by adding the code below to your functions.php file or to a plugin file. We will add this page as a sub-item of the Users menu on the WordPress dashboard. This page will allow us to define the different more specific departments that will be options in our custom taxonomy like ‘Sales’ and ‘IT’. Don’t forget to actually add those departments to the taxonomy or no choices will be rendered:

/**
* Admin page for the 'departments' taxonomy
*/
function cb_add_departments_taxonomy_admin_page() {

 $tax = get_taxonomy( 'departments' );

 add_users_page(
esc_attr( $tax->labels->menu_name ),
esc_attr( $tax->labels->menu_name ),
$tax->cap->manage_terms,
'edit-tags.php?taxonomy=' . $tax->name
 );

}
add_action( 'admin_menu', 'cb_add_departments_taxonomy_admin_page' );

/* Step 3 */

As the next step we are going to add the code below to… you guessed it, the functions.php file or a plugin file. The code below is going to add the taxonomy we defined in the previous steps to the profile of every user so that we can set each user’s department.

function cb_edit_user_department_section( $user ) {
  global $pagenow;

  $tax = get_taxonomy( 'departments' );

  /* Make sure the user can assign terms of the departments taxonomy before proceeding. */
  if ( !current_user_can( $tax->cap->assign_terms ) )
    return;

  /* Get the terms of the 'departments' taxonomy. */
  $terms = get_terms( 'departments', array( 'hide_empty' => false ) ); ?>

  <h3><?php _e( 'Departments' ); ?></h3>

  <table class="form-table">

    <tr>
      <th><label for="departments"><?php _e( 'Allocated Departments' ); ?></label></th>

      <td><?php

      /* If there are any departments terms, loop through them and display checkboxes. */
      if ( !empty( $terms ) ) {
          echo cb_custom_form_field('departments', $terms, $user->ID);
      }

      /* If there are no departments terms, display a message. */
      else {
        _e( 'There are no departments available.' );
      }

      ?></td>
    </tr>

  </table>
<?php }

add_action( 'show_user_profile', 'cb_edit_user_department_section' );
add_action( 'edit_user_profile', 'cb_edit_user_department_section' );
add_action( 'user_new_form', 'cb_edit_user_department_section' );

/* Step 4 */
Define the function for saving the custom taxonomy by putting this code into… well the functions.php file or a plugin file. You probably get that by now but the code below does define that function:

/**
 * @param int $user_id The ID of the user to save the terms for.
 */
function cb_save_user_department_terms( $user_id ) {

  $tax = get_taxonomy( 'departments' );

  /* Make sure the current user can edit the user and assign terms before proceeding. */
  if ( !current_user_can( 'edit_user', $user_id ) && current_user_can( $tax->cap->assign_terms ) )
    return false;

  $term = $_POST['departments'];
  $terms = is_array($term) ? $term : (int) $term; // fix for checkbox and select input field

  /* Sets the terms (we're just using a single term) for the user. */
  wp_set_object_terms( $user_id, $terms, 'departments', false);

  clean_object_term_cache( $user_id, 'departments' );
}

add_action( 'personal_options_update', 'cb_save_user_department_terms' );
add_action( 'edit_user_profile_update', 'cb_save_user_department_terms' );
add_action( 'user_register', 'cb_save_user_department_terms' );

That was it! Four steps to add this awesome functionality. This data stored per user is very useful for having different types or tiers of users that have access to special content that is hidden from everyone else. Happy WordPressing!

Categories
Website WordPress

WordPress: Consider the Security of your website

I have always found it useful to install a security plugin to every WordPress website I work on so that security concerns are not always looming, they are dealt with right off the bat.

I am aware that people always say that WordPress is insecure, but that is only true if the creator of the WordPress website in question is not concerned about security because there is nothing inherently different about the security of a WordPress site that cannot be configured for more security just like a site built on any other technology.

The big three for security plugins that I like to use:

  1. Securi
  1. Wordfence
  1. iThemes Security

If you have one of these three on your WordPress website with the correct configuration your site is more secure than many sites out there. The different plugins protect against slightly different things, and some of the security has to come from the webhost but having one of these installed on your site is a huge step in the right, secure direction. You are of course welcome to provide your own security and configure things about your website and server on your own but these plugins are all great and will provide protection against most threats.

Only configure your own security if you feel like you are more equipped to handle it than the countless developers many of whom are security experts, who contributed too and created these plugins.

Categories
Travel WordCamp WordPress

WordCamp US 2018

Nashville Part II

Nashville is awesome, this is the second year that I have been able to come here for WordCamp US. I was here for the event last year but this year my friend Evan came with me and it was a lot of fun. There were some great talks on Gutenberg and ARIA which I found very interesting. Obviously this is not how I SHOULD be judging this event but the food they gave for lunch was simply amazing.

In addition to the WordCamp which was very cool and interesting, being in Nashville was fun. The people are nice there and the food was amazing. I have to give a shout out to Hattie B’s (not that they even need shoutouts because they offer such a great product) but I went there and got hot chicken, a nice cold beer and some mac and cheese that would amaze even someone who doesn’t like that stuff.

The State of the Word (delivered every year by one of the founders of WordPress, Matt Mullenweg, was great as usual and instructed us to continue learning more about Gutenberg and the cool functionality it brings.

Categories
WordPress

WordPress 5.0 “Bebo”

Say Hello to the New Editor

https://youtube.com/watch?v=72xdCU__XCk%3Fversion%3D3%26rel%3D1%26showsearch%3D0%26showinfo%3D1%26iv_load_policy%3D1%26fs%3D1%26hl%3Den-US%26autohide%3D2%26wmode%3Dtransparent

We’ve made some big upgrades to the editor. Our new block-based editor is the first step toward an exciting new future with a streamlined editing experience across your site. You’ll have more flexibility with how content is displayed, whether you are building your first site, revamping your blog, or write code for a living.

Categories
Web Development Website WordPress

WP Employees

This is a small WordPress plugin I wrote to use for an issue I ran into a lot as a freelancer. Many small businesses want to make a “Team Page” to showcase their staff and make the business more personal. I found myself getting needing to create these same team pages for multiple clients on WordPress.

Ahh, that sounds like an opportunity for me to work some WordPress magic, and use Custom Post Types along with custom fields to generate quick team pages.

So I did just that using PHP, HTML and CSS. The code is available on my GitHub at the link below. Happy WordPressing!

Categories
Website WordPress

WordPress: How Should I backup My Site?

Backing up a site is an important and often overlooked step, the reason being that it does not add or remove anything visible on the site, BUT if your host ever has a problem, or your server has an issue, or your site gets hacked, etc… a backup is a great thing to have. The plugin, Updraft Plus, allows you to set an automated back-up schedule so that you will always have your site from last week or last month to go back to immediately in case there is a disaster.

Site backups with Updraft Plus are the epitome of “set it and forget it” as the backup process happens automatically on the schedule you configure and store the backups in google drive, dropbox, email or whatever you prefer. Updraft Plus is a great plugin to install for peace of mind especially when managing a web store that needs to be back online as quickly as possible after a problem.

Categories
Travel WordCamp WordPress

I was a WordCamp Organizer!

I was an Organizer at WordCamp NYC 2017! For anyone that was there, I was one of the camera operators and I was an introducer for a few people because someone did not show up so I filled in for them.

Being an organizer for a WordCamp was a fun experience and it is definitely something I plan on doing again in some capacity!

Categories
Travel WordCamp WordPress

WordCamp Boston 2017

Going to WordCamp Boston was especially fun for me because the event was held at Boston University and I went their for some of my college education. The event was very interesting and I picked up some new security tips that I had not previously considered.

I stayed with my Aunt and Uncle who live outside of the city. I felt bad because I had to leave before they woke up and I got home after they went to sleep, but thanks to them all the same for hosting me while I was in town.

Categories
Travel WordCamp WordPress

WordCamp Baltimore 2017

This was SUCH a fun WordCamp. I met my friend Evan there and we attended all of the same talks. It was at this awesome IMET center (apparently it stands for Institute of Marine and Environmental Technology but I did not see anything Marine-y or Environmental-y there, it just looked like an awesome campus). There were some great talks about javascript integration and WordPress sitemap design.

This was a very nice WordCamp, interesting talks all day AND an awesome ice cream party at the end of it all.

UPDATE:

I have now been to three WordCamp Baltimore’s due to the fact that they are great.

ANOTHER UPDATE:

My friend Evan gave a talk about workflow efficiency at WordCamp Baltimore and it was clearly the best talk at the camp, so shout out to Evan!

Categories
Web Development Website WordPress

WordPress: Advanced Custom Fields or ACF

This powerful plugin is a great way to graphically add beautiful fields and data to every post of a certain type, extending the already-rich WordPress functionality in a great way that I personally love and use all the time.

ACF allows you to make logical rules about when certain fields are shown, which post types they are for, how they are accessed, conditional logic for given fields and a whole lot more. There are not enough good things for me to say about this plugin.

There are plenty of other ways to add fields to WordPress posts since it is such a useful functionality but this uses easy-to-create logic rules to add fields where they are needed instead of relying on code which many of the other solutions do which is limiting.

The ACF pro version also allows for the creation of custom blocks for the Gutenberg editor. I will not explain all of the nuances of block creation, but ACF is a great way to graphically achieve a lot of great things in a WordPress site without having to write much code! (although values given into ACF are accessible via code too!)