<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aellon</title>
    <description>The latest articles on DEV Community by Aellon (@aellon).</description>
    <link>https://dev.to/aellon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F304643%2F7ca70448-3392-4166-b3a1-28dc54a97dad.jpg</url>
      <title>DEV Community: Aellon</title>
      <link>https://dev.to/aellon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aellon"/>
    <language>en</language>
    <item>
      <title>Are you a T-Shaped Developer?</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Sun, 16 Jul 2023 18:08:16 +0000</pubDate>
      <link>https://dev.to/aellon/are-you-a-t-shaped-developer-4npk</link>
      <guid>https://dev.to/aellon/are-you-a-t-shaped-developer-4npk</guid>
      <description>&lt;p&gt;Up until now, I never put much thought into what type of developer I am. I studied a full stack curriculum at Flatiron School and I've focused on both frontend and backend at different times of my career. The other day my teammate mentioned that we should all work toward becoming T-shaped developers. That was a new one for me. What in the world is a T-shaped developer? &lt;/p&gt;

&lt;p&gt;After a bit of research I learned that a T-shaped developer embodies the best of both worlds between being a specialist and a jack of all trades. They are an experienced expert in one field with some knowledge in other areas too. &lt;/p&gt;

&lt;p&gt;While full stack usually entails that knowledge is generalized across the board, a T-shaped developer is a shiny rebranded version of full stack. It has the well-roundedness of full stack with the added bonus of a specialized area of expertise.&lt;/p&gt;

&lt;p&gt;In the following chart example, the teal background color shows my depth of knowledge in data integrations (the vertical part of the T) as well as breadth across frontend, backend, full stack, and mobile app development (the horizontal part of the T).&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frih8qht80wcszt302585.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frih8qht80wcszt302585.png" alt="T-Shaped Developer Chart Example Across Stacks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I omitted some skills from the teal area for the sake of making a perfect T-shape, so a truer representation of my skills would look more like an abstract shape scribbled by a toddler.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx742vvkcec40xysr4b7a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx742vvkcec40xysr4b7a.jpg" alt="Photo of child painting by Dragos Gontariu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's no clear-cut definition of which fields are included as part of the chart, and the shape's contents seem to be entirely customizable. We all know that being a software engineer encompasses more than just writing code all day, so the next example shows my skills in the software engineer column along with aspects of other roles that I take on regularly. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rheut9ej6vc09hmq1jz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rheut9ej6vc09hmq1jz.png" alt="T-Shaped Developer Chart Example Across Roles"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You see, the chart can look different for everyone. Our levels of expertise are subjective and relative, so I could argue that every developer is already a T-shaped developer!&lt;/p&gt;

&lt;p&gt;Creating a personal chart is a great exercise to dive deep into your own levels of expertise. What do you think, are you a T-shaped developer?&lt;/p&gt;

</description>
      <category>fullstack</category>
      <category>tshaped</category>
      <category>discuss</category>
      <category>career</category>
    </item>
    <item>
      <title>How to Test Accessibility, a Guide for Software Engineers</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Wed, 04 Jan 2023 04:28:28 +0000</pubDate>
      <link>https://dev.to/aellon/how-to-test-accessibility-a-guide-for-software-engineers-i4b</link>
      <guid>https://dev.to/aellon/how-to-test-accessibility-a-guide-for-software-engineers-i4b</guid>
      <description>&lt;p&gt;Over one billion people worldwide live with a disability that can affect access to the Web. This guide is a starting point for Software Engineers to make sure UI elements are accessible.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The power of the web is in its universality. Access by everyone regardless of disability is an essential aspect.” —Tim Berners-Lee, W3C Director and Inventor of the World Wide Web &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📖 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📘 Automated and Manual Testing&lt;/li&gt;
&lt;li&gt;🎬 Take Action to Remediate Issues&lt;/li&gt;
&lt;li&gt;✅ Accessibility Testing Checklist&lt;/li&gt;
&lt;li&gt;❓ Resources and Training&lt;/li&gt;
&lt;li&gt;📋 Related articles&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  📘 Automated and Manual Testing
&lt;/h3&gt;

&lt;p&gt;After creating or updating a page or another frontend component, check your work by doing the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automated Audit&lt;/strong&gt;: Run an accessibility audit using at least one of the following tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Chrome’s Lighthouse

&lt;ul&gt;
&lt;li&gt;Video Tutorial (Skip to 1:22): &lt;a href="https://www.youtube.com/watch?v=rvn2XCmNKXI&amp;amp;t=82s"&gt;Google Lighthouse | Automated Accessibility Tool Review&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Blog: &lt;a href="https://medium.com/accessibility-a11y/do-an-accessibility-audit-using-google-chrome-lighthouse-30ff7887901c"&gt;Do an Accessibility Audit using Google Chrome LightHouse  &lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Accessible Web’s Extension

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://accessibleweb.com/web-accessibility-checker-browser-extension/"&gt;Web Accessibility Extension | Accessible Web&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sufficient Color Contrast Ratio&lt;/strong&gt;: Check if the color contrast ratio is accessible with one of the following tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use the color contrast tool that is part of the Accessible Web extension&lt;/li&gt;
&lt;li&gt;Copy the text and background colors into this handy tool, &lt;a href="https://www.aremycolorsaccessible.com/"&gt;Are My Colors Accessible&lt;/a&gt;, and play with the hue, saturation, and lightness meters until you find a combination of text and background colors that is accessible and use those colors on your page. &lt;iframe src="https://player.vimeo.com/video/786154480" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Screen Reader Capability&lt;/strong&gt;: Use a screen reader to read the elements on the page. You should have the ability to read out all field labels, alternative text, headings, navigation, and error messaging. Choose your OS adventure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MacOS: no downloads necessary! Macs have accessibility features out of the box

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://support.apple.com/guide/mac-help/get-started-with-accessibility-features-mh35884/mac"&gt;Get started with accessibility features on Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5R-6WvAihms&amp;amp;t=1s"&gt;Screen Reader Basics: VoiceOver -- A11ycasts #07 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Windows

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nvaccess.org/download/"&gt;Download NVDA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Jao3s_CwdRU"&gt;Screen Reader Basics: NVDA -- A11ycasts #09 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Keyboard Compatibility&lt;/strong&gt;: Use only the keyboard to interact with the elements on the page. You should have the ability to navigate menus, fill out and submit forms, open links, and open/close modals. Keyboard focus should also be visible (usually with a border highlight around the element).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click in the browser address bar&lt;/li&gt;
&lt;li&gt;Take your hand off your mouse/trackpad and use only your keyboard&lt;/li&gt;
&lt;li&gt;Start tabbing around&lt;/li&gt;
&lt;li&gt;Use Shift+Tab to navigate backward, spacebar activates checkboxes and buttons

&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://webaim.org/techniques/keyboard/#testing"&gt;handy list of which keystrokes to use&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Look for focus and tabbing order. Can you get to all interactive objects?

&lt;ul&gt;
&lt;li&gt;Demo of browsing &amp;amp; interacting using a keyboard: &lt;a href="https://www.youtube.com/watch?v=757suz8MTV8"&gt;Browsing with a keyboard&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Zooming In&lt;/strong&gt;: Check for loss of content or functionality by zooming in to 200% in the browser. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do any elements overlap other elements? i.e. an image overlaps text or navigation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  🎬 Take Action to Remediate Issues
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Fix issues identified in the automated audit and manual testing.&lt;/li&gt;
&lt;li&gt;Run the audit and manually test again to make sure everything is fixed.&lt;/li&gt;
&lt;li&gt;Pat yourself on the back! You made the page more inclusive!&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  ✅ Accessibility Testing Summary Checklist
&lt;/h3&gt;

&lt;p&gt;Refer to this checklist each time you need to test for accessibility and use the instructions above as needed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run an automated audit using Google Chrome Lighthouse or Accessible Web Extension.&lt;/li&gt;
&lt;li&gt;Check for a sufficient color contrast ratio for all text and background colors.&lt;/li&gt;
&lt;li&gt;Use a screen reader to read the elements on the page.&lt;/li&gt;
&lt;li&gt;Start in the browser address bar and use only the keyboard to interact with the elements on the page.&lt;/li&gt;
&lt;li&gt;Zoom in to 200% in the browser and check for any loss of content or functionality.&lt;/li&gt;
&lt;li&gt;Fix any issues detected.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ❓ Resources and Training
&lt;/h3&gt;

&lt;p&gt;W3C Web Accessibility Initiative’s more in-depth guide of easy things to do to test accessibility: &lt;a href="https://www.w3.org/WAI/test-evaluate/preliminary/"&gt;Easy Checks – A First Review of Web Accessibility&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;W3C Web Accessibility Initiative’s official guidelines: &lt;a href="https://www.w3.org/TR/WCAG21/#later-versions-of-accessibility-guidelines"&gt;Web Content Accessibility Guidelines (WCAG) 2.1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;small&gt; Cover photo by &lt;a href="https://unsplash.com/@elizabeth_woolner?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Elizabeth Woolner&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>tutorial</category>
      <category>frontend</category>
    </item>
    <item>
      <title>How to View Apex Code Coverage in VS Code</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Thu, 21 Jul 2022 22:19:00 +0000</pubDate>
      <link>https://dev.to/aellon/how-to-view-apex-code-coverage-in-vs-code-4643</link>
      <guid>https://dev.to/aellon/how-to-view-apex-code-coverage-in-vs-code-4643</guid>
      <description>&lt;p&gt;This is a summary of instructions for how to view unit test coverage in VS Code as an alternative to using Salesforce’s Developer Console. The official guide, &lt;a href="https://developer.salesforce.com/tools/vscode/en/apex/testing"&gt;Apex Tests | Salesforce for VSCode&lt;/a&gt; is a great resource, but this post also includes a video walkthrough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instructions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In VS Code click Code &amp;gt; Preferences &amp;gt; Settings and search for Apex Coverage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set &lt;code&gt;salesforcedx-vscode-core.retrieve-test-code-coverage&lt;/code&gt; to &lt;strong&gt;true&lt;/strong&gt; by checking the box of that setting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the beaker icon in the Activity Bar on the left side of the VS Code editor and run a test or multiple tests. The coverage percentage and lines that were not covered by the test run will show in the output panel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To see code coverage for your test, click the three-bars icon that’s next to your Org alias at the bottom of VS Code and open the class or trigger that you’re testing. Click the the three-bars icon to toggle between enabling and disabling code coverage highlighting.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A video walkthrough:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/-fwY2Wyhhao"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;p&gt;Do you prefer to review test coverage in the developer console or VS Code? Let me know in the comments!&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>testing</category>
      <category>guide</category>
      <category>salesforce</category>
    </item>
    <item>
      <title>How to Share a Salesforce Scratch Org</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Tue, 31 May 2022 18:11:30 +0000</pubDate>
      <link>https://dev.to/aellon/how-to-share-a-salesforce-scratch-org-518n</link>
      <guid>https://dev.to/aellon/how-to-share-a-salesforce-scratch-org-518n</guid>
      <description>&lt;p&gt;A scratch org is a disposable deployment of Salesforce code and metadata. Sometimes it's helpful to share a scratch org with a teammate. In this scenario Person A wants to share their scratch org with Person B. Reasons for sharing an org include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Collaboration on a ticket&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Passing along an org that you no longer need so a teammate can jump right into development instead of spinning up a new org&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instructions
&lt;/h2&gt;

&lt;p&gt;Person A gets the Auth Url to provide for Person B by doing the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the terminal run &lt;code&gt;sfdx force:org:display -u &amp;lt;YourOrgUsername&amp;gt; --verbose&lt;/code&gt; and replace &lt;code&gt;&amp;lt;YourOrgUsername&amp;gt;&lt;/code&gt; with your org username or simply &lt;code&gt;sfdx force:org:display --verbose&lt;/code&gt; to use the default org.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the value for Sfdx Auth Url and give it to Person B. The value will have the format "force://@" or "force://::@".&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N0j9leTJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4djhxjdvsvliukbo0pfl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N0j9leTJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4djhxjdvsvliukbo0pfl.png" alt="SFDX Force Org Display Verbose Example" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then Person B stores the Auth Url by doing the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create an auth.key file. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open that file with vscode or another text editor&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the Auth Url provided by Person A&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save the file. It should looks something like this:&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lbqLZ0Ik--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/noogj773marh6f38rcm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lbqLZ0Ik--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/noogj773marh6f38rcm9.png" alt="AuthUrl file example" width="800" height="59"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the terminal run the command &lt;code&gt;sfdx force:auth:sfdxurl:store -f ../auth.key&lt;/code&gt; where &lt;code&gt;../auth.key&lt;/code&gt; is the path to the file with the auth url info. This command will use that file to identify and connect to the scratch org. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the org with the command &lt;code&gt;sfdx force:org:open&lt;/code&gt; and voila! They're in Person A's org.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Related articles
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.salesforce.com/docs/atlas.en-us.228.0.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_auth_sfdxurl.htm"&gt;Salesforce sfdxurl Commands&lt;/a&gt;&lt;/p&gt;

</description>
      <category>salesforce</category>
      <category>tutorial</category>
      <category>collaboration</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Automagic Table of Contents</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Fri, 24 Jul 2020 20:45:41 +0000</pubDate>
      <link>https://dev.to/aellon/automagic-table-of-contents-3ai9</link>
      <guid>https://dev.to/aellon/automagic-table-of-contents-3ai9</guid>
      <description>&lt;p&gt;Imagine visiting a website with seemingly endless scrolling. You could easily get lost in a sea of content, but I won't let that happen. Table of contents to the rescue! I will examine three approaches below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Way (not recommended)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Hardcoding a table of contents at the top of every page of content&lt;/strong&gt;&lt;br&gt;
This wouldn't be very &lt;a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="noopener"&gt;DRY&lt;/a&gt;. It's an easy solution to get something working right away, but it could be time consuming in the long run. What if you need to add a table of contents to 100 pages, or what if a client is entering content? That would be a lot of copying and pasting, and a lot of room for error.&lt;/p&gt;
&lt;h3&gt;
  
  
  Better Way
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Table of contents that is generated dynamically&lt;/strong&gt;&lt;br&gt;
This way uses some jQuery to generate the table of contents automatically. It will get the text from every &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; element and generate a table of contents with links to those headings. CSS-Tricks has a &lt;a href="https://css-tricks.com/automatic-table-of-contents/"&gt;really nice demo&lt;/a&gt; for this.  &lt;/p&gt;
&lt;h3&gt;
  
  
  Best Way
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Table of contents that is generated dynamically &lt;em&gt;and&lt;/em&gt; highlights which section you're in&lt;/strong&gt;&lt;br&gt;
This takes the better way and adds some automagical flair to it. The table of contents will be hidden at first, to show a banner image or keep the navigation menu minimal. Then upon scrolling, the table of contents will appear, fixed to the top of the page. As you scroll down it will underline the section you're in. &lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/aellonK/embed/YzwgRPO?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The last approach may not be a good fit for every project, but it is my favorite for a long page of content. How would you add a table of contents? &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>jquery</category>
      <category>tableofcontents</category>
      <category>dynamic</category>
    </item>
    <item>
      <title>Agile &amp; Scrum &amp; Kanban, oh my!</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Mon, 25 May 2020 22:08:44 +0000</pubDate>
      <link>https://dev.to/aellon/agile-scrum-kanban-oh-my-116d</link>
      <guid>https://dev.to/aellon/agile-scrum-kanban-oh-my-116d</guid>
      <description>&lt;p&gt;While I've heard of Agile, Scrum, and Kanban, I'll admit that I wasn't well-versed in what defines these tools at this time yesterday. They came up in conversation and I realized I wanted to learn more! &lt;/p&gt;

&lt;p&gt;The definitions I found in my research were very abstract, which is the beauty of the &lt;a href="https://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt;, because it's flexible enough to use with non-tech teams. I even realized that we practice an Agile process at my current company. Our way of doing things hits all of the key points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Working software over comprehensive documentation&lt;/strong&gt; : We develop beta sites ASAP then refine and fix any bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Individuals and interactions over processes and tools&lt;/strong&gt; : We all have the freedom to plan our work for the day, and there is no micromanaging. Every morning we meet briefly to discuss what we will do that day. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer collaboration over contract negotiation&lt;/strong&gt; : Clients play a key role in developing their websites because they add their own content. They also collaborate in the decisions of features. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responding to change over following a plan&lt;/strong&gt; : We maintain flexibility throughout each project and adapt along the way. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I also came across the following job posting, which shows how an Agile environment would be applied in a software engineer position. They are looking for someone who will:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Collaboratively tackle difficult and ambiguous problems as part of a cross-functional team.&lt;/li&gt;
&lt;li&gt;Write, test, debug, and deploy code across a variety of languages and frameworks, particularly Javascript/React.&lt;/li&gt;
&lt;li&gt;Work across the different phases of the software development lifecycle including estimating level-of-effort, identifying the best approach, building, performing QA testing, deploying, documenting, debugging, and supporting features.&lt;/li&gt;
&lt;li&gt;Participate and contribute to stand-ups, sprint planning, and retrospectives at the agile team level and up.&lt;/li&gt;
&lt;li&gt;Perform code reviews with helpful and meaningful feedback for your teammates.&lt;/li&gt;
&lt;li&gt;Research, document, note trade-offs and recommend potential solutions around future product features.&lt;/li&gt;
&lt;li&gt;Work collaboratively across the engineering department to ensure standard methodologies and processes are followed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a great real-world example of an Agile engineer's day-to-day, but how do Scrum and Kanban fit into all of this? Well, these are frameworks that offer more specifications to implement an agile workflow. The previous job posting refers to a Scrum environment, because the Scrum framework usually consists of small teams, sprint planning for ~2 week sprints, daily stand-ups, sprint reviews, and end-of-sprint retrospectives.  &lt;/p&gt;

&lt;p&gt;Kanban is another framework and is all about visualizing work, often done with a Kanban board made up of columns that contain tasks to do, what's in process, what needs to be reviewed, and what's done. &lt;a href="https://www.atlassian.com/agile/kanban"&gt;This Atlassian video&lt;/a&gt; explains it really well.&lt;/p&gt;

&lt;p&gt;Many teams including the one I'm on use both Scrum and Kanban in their Agile environment. I use a digital Kanban board called &lt;a href="https://www.getflow.com/"&gt;Flow&lt;/a&gt; as well as participate in daily Scrum stand-ups. We definitely lean more toward Kanban than Scrum. What's your workflow like? &lt;/p&gt;

</description>
      <category>agile</category>
      <category>kanban</category>
      <category>scrum</category>
      <category>workflow</category>
    </item>
    <item>
      <title>3-Letter Months with ACF and PHP</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Fri, 15 May 2020 19:14:15 +0000</pubDate>
      <link>https://dev.to/aellon/3-letter-months-with-acf-and-php-4792</link>
      <guid>https://dev.to/aellon/3-letter-months-with-acf-and-php-4792</guid>
      <description>&lt;p&gt;I only have a few months of experience working with Wordpress, so there are a lot of small victories, and I'm learning more each day. I have at least one AH-HA! moment each week from solving something with code, which is so rewarding. &lt;/p&gt;

&lt;p&gt;This week my moment came from learning how to truncate dates in PHP for a Wordpress site. The design called for showing event dates, but only including the first three letters of the month. That way the month would always fit within its container. One way to do this could be having the client just manually type the first three letters into a text field for the event date. Though a more elegant solution is to offer them a calendar for picking the date, and adding a function to reduce the month name to three letters, so there's less room for error on the client's end, and it all happens behind the scenes. Here's how I did it:&lt;/p&gt;

&lt;p&gt;First I built custom fields for the event date and event time using Advanced Custom Fields.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zPC_5vpG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/EcEKw52h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zPC_5vpG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/EcEKw52h.png" alt="Advanced Custom Fields for Event Date Example" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I use a custom option to return just the month and the day (F j). We will refer to the F for formatting it before karate chopping it into its first three letters later on. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e8VLeojh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/T4EZoZj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e8VLeojh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/T4EZoZj.png" alt="Advanced Custom Field for Event custom date return" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also made a custom post type for Events which is why you will see &lt;code&gt;$posts = get_field('events');&lt;/code&gt; in the complete code below. &lt;/p&gt;

&lt;p&gt;After creating a few events and relating them to the Events page, I loop through all of the event posts, getting the date with &lt;a href="https://www.php.net/manual/en/datetime.format.php"&gt;&lt;code&gt;DateTime&lt;/code&gt;&lt;/a&gt; and setting it to a variable in the events page. Then I use PHP's &lt;a href="https://www.php.net/manual/en/function.substr.php"&gt;&lt;code&gt;substr&lt;/code&gt;&lt;/a&gt; function to only display the first three letters of the month, and &lt;a href="https://www.php.net/manual/en/datetime.format.php"&gt;&lt;code&gt;format&lt;/code&gt;&lt;/a&gt; to return the day. The &lt;code&gt;substr&lt;/code&gt; function takes three arguments: a string, an integer for the start location, and an integer for the the end of the desired truncated string. Since I want to display 3 letters, the start is 0 and the end is 3. That's it! Here is the whole loop. &lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
 

</description>
      <category>php</category>
      <category>wordpress</category>
      <category>acf</category>
    </item>
    <item>
      <title>Add Footnotes in Wordpress Without a Plugin</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Fri, 08 May 2020 22:47:58 +0000</pubDate>
      <link>https://dev.to/aellon/add-footnotes-in-wordpress-without-a-plugin-32do</link>
      <guid>https://dev.to/aellon/add-footnotes-in-wordpress-without-a-plugin-32do</guid>
      <description>&lt;p&gt;There are limited options for adding footnotes within Wordpress. When I search for "Wordpress footnotes," every single search result on the first page leads to plugins. Then I search for "Wordpress footnotes without plugin" and the results yield a couple of HTML options like adding an anchor link. I can work with this, but I'll need to tweak it so that the client can easily add content with footnotes since they will not be editing HTML directly.&lt;/p&gt;

&lt;p&gt;First, we (or the client) will add content with a link to the footnote:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Type the number and highlight/select that number. Then click the link icon that appears in the block editor bar. It will prompt you to “search or type url”. Type “#fn” followed by the number of the footnote. For instance if this is the 4th footnote on that page, the link would be #fn4. Note: This could be # followed by any ID you prefer. I find it easiest to use the number of the footnote as part of the ID.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QjGB8HF1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/K9haFkL.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QjGB8HF1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/K9haFkL.png" alt="step 1 visual reference" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add an ordered list block as the last block of content on the page.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M4zIOwgY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/MhY6jwo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M4zIOwgY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/MhY6jwo.png" alt="step 2 visual reference" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now that we have some content to work with, we can get to the code. Before trying the following code make sure you're loading jQuery. &lt;/p&gt;

&lt;p&gt;I applied a class of "info-page" to the page where I need footnotes so it is easy to reference. We need to create an ID for each &lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/code&gt; element in the ordered list by setting the "id" attribute to "fn" + one more than the index of the list item to account for the index starting at 0. That way, the links we set in Wordpress (like #fn1) will correspond to the &lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/code&gt; element with an ID containing that value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// set ID for each &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt; in footnotes &amp;lt;ol&amp;gt;&amp;lt;/ol&amp;gt;
    jQuery('.info-page ol li').each(function(index, value){
        jQuery(this).attr("id", "fn" + (index + 1) );
    });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! It's simple to add anchor links in Wordpress that can be used for more than just footnotes. However if you want to get fancy with the footnotes and you're using Bootstrap, continue reading.&lt;/p&gt;

&lt;p&gt;We will use &lt;a href="https://getbootstrap.com/docs/4.4/components/popovers/"&gt;Bootstrap popovers&lt;/a&gt; to display the footnote text inline with the footnote number, so that users can simply hover over the number to see what the reference is rather than having a jump scroll to the bottom in order to read it. They will also have that option if they click on the number but this provides a nice stay-in-place alternative. (TLDR: &lt;a href="https://codepen.io/aellonK/pen/oNjqJXq"&gt;Codepen&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;First we want to grab those links that we added in Wordpress (#fn1 and so on). Then we add a simple class to each link so that we can reference it later.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        // get each link from the content
        var links = jQuery( ".info-page" ).find('a');
    })

// add a class of "footnote-link" to each link to reference later for the popover
        jQuery(links).each(function(){
            var link = this;
            jQuery(link).addClass(function() {
                return 'footnote-link';
            });
        });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next we take the formatted ID and the footnote text of all of the &lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/code&gt; elements and then set a variable for just the IDs. We will also need an array that contains the HTML of the links.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    // get the formatted ID and the footnote text of all of the &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;
    var footnoteArray = new Array();
    jQuery('.info-page ol li').each(function(id, value) {                   
        var formattedID = ("#" + jQuery(this).attr('id'));

                // add the arrow and number before the text (feel free to skip this style choice)
            var text = "&amp;amp;rarr; " + (id + 1) + ". " + this.innerText;
            footnoteArray.push({formattedID, text});
    });

        // get the IDs from the footnoteArray
        var footnoteIDs = jQuery.map( footnoteArray, function(value, key ) {
        return value.formattedID;
            });

        // make a new array that contains the HTML link values
        var LinkArray = new Array();
    jQuery('.info-page .footnote-link').each(function(id, value) {
        LinkArray.push(value.outerHTML);
            });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the queen bee of this function. We will loop over all of the footnote links and wrap each of them in a button that will trigger the popover containing the corresponding footnote text.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    // loop over all of the links to the footnotes
    jQuery.each(LinkArray, function(ind, value) {
        var link = value;
        var footnoteText = "";
        var linkHref =  jQuery(link).attr("href");

        // check if there is a match between the href attribute values and any of the footnoteIDs
        if (jQuery.inArray(linkHref, footnoteIDs) != -1) {

            // if there is a match, get the footnote text from that matching value
            footnoteText = footnoteArray.find(x =&amp;gt; x.formattedID === linkHref).text

            // get the link whose ID matches this one and wrap it in a button with the corresponding text for the popover
            jQuery( ".info-page a[href$='" + linkHref + "']" ).wrap(function() {
                return '&amp;lt;button type="button" class="btn btn-sm footnote-popover" data-toggle="popover" data-trigger="hover" data-content="' + footnoteText + '" &amp;gt;&amp;lt;/button&amp;gt;';
            });                         
        };
    });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember to initialize the popopvers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jQuery('.footnote-popover').popover({
        container: 'body'
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Voila! Hover over the numbers in this Codepen for full effect with a little popover style: &lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/aellonK/embed/oNjqJXq?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>bootstrap</category>
      <category>javascript</category>
      <category>jquery</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>DIY: Computer Vision</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Fri, 01 May 2020 23:08:06 +0000</pubDate>
      <link>https://dev.to/aellon/build-your-own-object-detection-pb6</link>
      <guid>https://dev.to/aellon/build-your-own-object-detection-pb6</guid>
      <description>&lt;p&gt;Computer vision caught my eye at the Whitney Biennial last year, where I watched &lt;a href="https://forensic-architecture.org/investigation/triple-chaser"&gt;Triple Chaser&lt;/a&gt;, Forensic Architecture's investigation of the Triple-Chaser tear gas grenades and how law enforcement officials use them to suppress civilians. Their team used computer vision to detect Triple-Chaser canisters in footage from around the world.&lt;/p&gt;

&lt;p&gt;Object detection requires thousands of images to be accurately trained, and Forensic Architecture couldn't get their hands on that many images of the actual Triple-Chaser. By zeroing in on footage where enforcement used these grenades, they were able to build a digital model of the Triple-Chaser grenade. Then they generated thousands of photorealistic 'synthetic' images, situating the Triple-Chaser in semblances of real-world environments. From the project page:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"In this way, ‘fake’ images help us to search for real ones, so that the next time Safariland munitions are used against civilians, we’ll know."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;US border agents fired Triple Chasers at civilians in November 2018, and Forensic Architecture proved the presence and use of other Safariland products by law enforcement officers during civil unrest in Puerto Rico in 2018.&lt;/p&gt;

&lt;p&gt;Once they had thousands of images to work with, they trained an object detector and then deployed it to find more images, exposing more instances of governments using Triple-Chasers to suppress civilians. &lt;/p&gt;

&lt;p&gt;The Safariland Group is owned by Warren B. Kanders, who was the vice chair of the board of trustees of the Whitney Museum of American Art before stepping down because of this exposure.&lt;/p&gt;

&lt;p&gt;That intersection of code, art, and activism really made an impact. I love the idea of building things with code for the greater good and I was inspired to learn more about it. At the Codeland conference last year, I attended a workshop on Real-Time Object Detection with TensorFlow.js led by Nicholas Bourdakos, a software developer at IBM. Within a couple of hours, I built my own app using custom-trained models to detect objects.&lt;/p&gt;

&lt;p&gt;Everyone needed a lot of photos of their object to thoroughly train the model, and since we were creating this at the workshop, we needed something handy, like our own two thumbs. Our mission was to train our models to detect a thumbs up and a thumbs down. It was quite a sight to see a room full of people snapping countless photos of their thumbs. The more photos we had, the better trained our models would be, but even with just a few hundred photos, it worked! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://vimeo.com/aellonk/thumbsup"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r0vwPkS1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/8f3GoLel.png" alt="Thumbs Up Object Detection Video" width="640" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was surprised that we could build this kind of app within such a short timeframe and I definitely want to explore it more in the future, ideally for something that could have a positive social impact like this &lt;a href="https://youtu.be/rVuki05vcHs"&gt;IBM Visual Insights and IBM Spectrum Discover: Automation with Computer Vision (Covid-19 Use Case)&lt;/a&gt; video, which shows how to detect Covid-19 from x-rays using object detection (skip to 7:50).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do it Yourself:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The entire tutorial of this &lt;a href="https://cloud.annotations.ai/workshops/object-detection/index.html"&gt;Object Detection Workshop is documented on IBM Cloud Annotations' website&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Other Resources:&lt;br&gt;
&lt;a href="https://github.com/cloud-annotations/training"&gt;Cloud Annotations Github&lt;/a&gt; &lt;/p&gt;

</description>
      <category>objectdetection</category>
      <category>tensorflow</category>
      <category>machinelearning</category>
      <category>computervision</category>
    </item>
    <item>
      <title>Get Started with a Headless Wordpress Site</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Fri, 24 Apr 2020 16:40:03 +0000</pubDate>
      <link>https://dev.to/aellon/get-started-with-a-headless-wordpress-site-1dp5</link>
      <guid>https://dev.to/aellon/get-started-with-a-headless-wordpress-site-1dp5</guid>
      <description>&lt;p&gt;When choosing to build a site with Wordpress, there are a couple of options. You can use Wordpress to handle the backend and the frontend with PHP (classic), or you can separate them and use Wordpress for the backend and a JavaScript framework of choice for the frontend, like React or &lt;a href="https://nextjs.org/"&gt;Next&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;There are some advantages and disadvantages to each option, which are discussed in this Smashing Magazine post, &lt;a href="https://www.smashingmagazine.com/2018/10/headless-wordpress-decoupled/"&gt;"Headless WordPress: The Ups And Downs Of Creating A Decoupled WordPress"&lt;/a&gt;. I am starting a project using the decoupled method and will probably post about it along the way. An easy way to get started is by using &lt;a href="https://localwp.com/"&gt;Local by Flywheel&lt;/a&gt;. Below is a guide to get up and running:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Local by Flywheel click "Add Local Site" to create a new Wordpress site, and then click "Start Site." This will start up the Wordpress backend server. &lt;/li&gt;
&lt;li&gt;Install plugins:

&lt;ul&gt;
&lt;li&gt;ACF to WP API&lt;/li&gt;
&lt;li&gt;Advanced Custom Fields&lt;/li&gt;
&lt;li&gt;JWT Authentication for WP-API&lt;/li&gt;
&lt;li&gt;WP-REST-API V2 Menus&lt;/li&gt;
&lt;li&gt;Custom Post Type UI (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Navigate to the Flywheel folder for the project and replace the app &amp;gt; public &amp;gt; wp-content folder with the copy the wordpress &amp;gt; wp-content folder from &lt;a href="https://github.com/aellonk/headless-wp-starter/tree/aellon-master/wordpress/wp-content"&gt;this Headless Wordpress Starter repo&lt;/a&gt;, which is adapted from &lt;a href="https://github.com/postlight/headless-wp-starter"&gt;Postlight's Headless Wordpress Starter Kit&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Add the frontend folder from the same repo in the root of the Flywheel project directory.&lt;/li&gt;
&lt;li&gt;In frontend &amp;gt; config.js, replace the following wpURL with the link to your backend Wordpress API endpoint. The Wordpress API is the Wordpress site followed by wp-json, for example: &lt;code&gt;let wpUrl = 'http://headlesswptestproject.local/wp-json/';&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open a terminal, &lt;code&gt;$ cd frontend &amp;amp;&amp;amp; yarn &amp;amp;&amp;amp; yarn start&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;That should open up localhost:3000. This will start up the frontend server. &lt;/li&gt;
&lt;li&gt;If there is an error shown on your localhost:3000 page, create a page in WP with the title/slug = “welcome”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://developer.wordpress.org/rest-api/"&gt;WordPress REST API&lt;/a&gt; allows us to work with JSON to send and receive data from our Wordpress site. That opens the door for developers who want to create beautiful, dynamic Wordpress sites using newer tools and frameworks like Next.js. I'm excited to try it out and see how it compares to building a site entirely with Wordpress. Check back soon for more updates on the process!&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>nextjs</category>
      <category>headless</category>
      <category>decoupled</category>
    </item>
    <item>
      <title>Multilingual Magic Part 2</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Fri, 17 Apr 2020 22:55:39 +0000</pubDate>
      <link>https://dev.to/aellon/multilingual-magic-part-2-of-2-3303</link>
      <guid>https://dev.to/aellon/multilingual-magic-part-2-of-2-3303</guid>
      <description>&lt;p&gt;The previous post went over the frontend basics of a Bootstrap tab structure to display some text in three tabs, one for each translation. Now we will take a look at the Wordpress side of adding those fields for the client to enter the text. &lt;/p&gt;

&lt;p&gt;Using the &lt;a href="https://www.advancedcustomfields.com"&gt;Advanced Custom Fields plugin&lt;/a&gt;, I added a field group for Languages, with a field for Russian and one for Spanish. The default tab will be English so we don't need to add a field for that one since it can be the regular content. This is what the ACF field group looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aJUqdJg5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/ONdSALw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aJUqdJg5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/ONdSALw.png" alt="Field Group of Languages" width="800" height="711"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I selected a Wysiwyg Editor as the field type since this will give the client control over the text, but you could just as easily choose any other field type. This is what it will look like for the client:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w5I8IvbW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/qNdbr33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w5I8IvbW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.imgur.com/qNdbr33.png" alt="ACF WYSIWYG Example" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the previous post I included the following HTML to get the tabs working.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"alertTabContent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade show active"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"english"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"english-tab"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;?php echo esc_url( get_permalink($id) ); ?&amp;gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-red alert-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?php  the_content(); ?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"russian"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"russian-tab"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;?php echo esc_url( get_permalink($id) ); ?&amp;gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-red alert-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?php the_field('russian'); ?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"spanish"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"spanish-tab"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;?php echo esc_url( get_permalink($id) ); ?&amp;gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-red alert-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?php the_field('spanish'); ?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two key pieces of code here are the lines pulling in the content from those custom fields: &lt;code&gt;&amp;lt;?php the_field('russian'); ?&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;?php the_field('spanish'); ?&amp;gt;&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;the_field()&lt;/code&gt; is a built in &lt;a href="https://www.advancedcustomfields.com/resources/the_field/"&gt;ACF function&lt;/a&gt;. The selectors are the field names. ACF made it so simple yet so powerful too!  &lt;/p&gt;

&lt;p&gt;With that, you have a fully customizable set up for displaying text in three discreet tabs using Bootstrap and pulling in the content from Wordpress. After the site is live I will add the frontend design here so be sure to check back!&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>bootstrap</category>
      <category>acf</category>
    </item>
    <item>
      <title>Multilingual Magic Part 1</title>
      <dc:creator>Aellon</dc:creator>
      <pubDate>Fri, 17 Apr 2020 19:16:27 +0000</pubDate>
      <link>https://dev.to/aellon/multilingual-magic-1p9b</link>
      <guid>https://dev.to/aellon/multilingual-magic-1p9b</guid>
      <description>&lt;p&gt;I'm currently building a site using Wordpress and Bootstrap that will have the option for users to see featured content in English, Spanish, and Russian. I needed to make this happen dynamically, and so it would be displayed seamlessly to the user. I also needed it to be easy for the client to update on the backend in Wordpress. &lt;/p&gt;

&lt;p&gt;I am already using Bootstrap in the project, so it is easy to implement Bootstrap tabs using the class &lt;code&gt;.nav-tabs&lt;/code&gt; on top of the base &lt;code&gt;.nav&lt;/code&gt; component. I could have used tabs or pills because they just have different styling. Since I am going to change the styling anyway, I went with tabs for fun.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav nav-tabs"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"alertTab"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tablist"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link active"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"english-tab"&lt;/span&gt; &lt;span class="na"&gt;data-toggle=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#english"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"english"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;EN&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"divider text-red"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;|&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"russian-tab"&lt;/span&gt; &lt;span class="na"&gt;data-toggle=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#russian"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"russian"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;RU&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"divider text-red"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;|&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"spanish-tab"&lt;/span&gt; &lt;span class="na"&gt;data-toggle=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#spanish"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"spanish"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;SP&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An important &lt;a href="https://getbootstrap.com/docs/4.4/components/navs/#javascript-behavior"&gt;note on accessibility from Bootstrap&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dynamic tabbed interfaces, as described in the WAI ARIA Authoring Practices, require role="tablist", role="tab", role="tabpanel", and additional aria- attributes in order to convey their structure, functionality and current state to users of assistive technologies (such as screen readers).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is a tab for English, Spanish, and Russian, and I'm using simple vertical line dividers to separate the three tabs. To make the tabs toggleable, we need to add the attribute &lt;code&gt;data-toggle="tab"&lt;/code&gt; to each tab link.  Now we need to add in the JavaScript behavior to make the tabs dynamic.  &lt;/p&gt;

&lt;p&gt;Make a new div with a class of &lt;code&gt;.tab-content&lt;/code&gt; and add three divs inside, each with a &lt;code&gt;.tab-pane&lt;/code&gt; class and a unique ID for every tab that will correspond to the href element in each of the tabs above.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"alertTabContent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade show active"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"english"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"english-tab"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;?php echo esc_url( get_permalink($id) ); ?&amp;gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-dark-red alert-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?php  the_content(); ?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"russian"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"russian-tab"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;?php echo esc_url( get_permalink($id) ); ?&amp;gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-dark-red alert-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?php the_field('russian'); ?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane fade"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"spanish"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tabpanel"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"spanish-tab"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;?php echo esc_url( get_permalink($id) ); ?&amp;gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-dark-red alert-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?php the_field('spanish'); ?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next time we will connect it to the Wordpress backend in order to pull in content dynamically. Stay tuned!&lt;/p&gt;

&lt;p&gt;Resources:&lt;br&gt;
&lt;a href="https://getbootstrap.com/docs/4.4/components/navs/#tabs"&gt;Bootstrap Tabs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bootstrap</category>
      <category>html</category>
      <category>wordpress</category>
      <category>a11y</category>
    </item>
  </channel>
</rss>
