<?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: Shariar Islam</title>
    <description>The latest articles on DEV Community by Shariar Islam (@shariar_islam).</description>
    <link>https://dev.to/shariar_islam</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%2F1911554%2F0e60c04a-0095-4f6d-b5d8-2ad42695afd8.png</url>
      <title>DEV Community: Shariar Islam</title>
      <link>https://dev.to/shariar_islam</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shariar_islam"/>
    <language>en</language>
    <item>
      <title>How To Integrated WordPress Blog with a Custom Website</title>
      <dc:creator>Shariar Islam</dc:creator>
      <pubDate>Sat, 01 Mar 2025 06:43:23 +0000</pubDate>
      <link>https://dev.to/shariar_islam/how-to-integrated-wordpress-blog-with-a-custom-website-o89</link>
      <guid>https://dev.to/shariar_islam/how-to-integrated-wordpress-blog-with-a-custom-website-o89</guid>
      <description>&lt;p&gt;Time was running out. We had to build a fully functional project, but there was one challenge; too many features and not enough time. We needed a simple and efficient way to add a blog to our main website without spending weeks on development.&lt;/p&gt;

&lt;p&gt;After some brainstorming, we found the perfect solution. Instead of building a blog from scratch, we decided to use &lt;strong&gt;WordPress&lt;/strong&gt;. Our SEO and &lt;strong&gt;marketing team&lt;/strong&gt; was already familiar with it, so they could easily manage content without needing technical help. We set up the blog on &lt;strong&gt;blog.domain.com&lt;/strong&gt; and focused on &lt;strong&gt;integrating it with our main website (domain.com)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But how do we make sure new blog posts automatically appear on the main site? The answer: &lt;strong&gt;WordPress REST API&lt;/strong&gt;. By using API calls, we could fetch blog posts from WordPress and display them on our main website without any manual work.&lt;/p&gt;

&lt;p&gt;In this blog post, we’ll walk through:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;How to publish a blog post in WordPress&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How our blog is integrated with the main website using the API&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How everything works behind the scenes&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Creating a Blog Post in WordPress&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To publish a blog post, follow these steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Login to WordPress&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Go to &lt;strong&gt;&lt;code&gt;blog.domain.com/wp-admin&lt;/code&gt;&lt;/strong&gt;  and enter your username and password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpoiqg920i44l7z3qs235.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpoiqg920i44l7z3qs235.png" alt="Image description" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Navigate to Posts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;On the left menu, click &lt;strong&gt;Posts&lt;/strong&gt; → &lt;strong&gt;Add New&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F74n04tnci77i4jrb18ly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F74n04tnci77i4jrb18ly.png" alt="Image description" width="778" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Add a New Blog Post&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It will open the default block editor. This is where you write your blog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F4zejklth1zu3pkbwgyeu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F4zejklth1zu3pkbwgyeu.png" alt="Image description" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Choose a Category&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;On the right side, you will see the &lt;strong&gt;Categories&lt;/strong&gt; section. Select one or more categories that fit your post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9tyj4zxxw2el1ypushvg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9tyj4zxxw2el1ypushvg.png" alt="Image description" width="263" height="774"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fq6g66vaz0q3em9ccf4ju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fq6g66vaz0q3em9ccf4ju.png" alt="Image description" width="272" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Write Your Blog&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Now, write your blog post. Keep it clear and simple. Add headings, images, and links if needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fe7qzduo1yyl57tingsue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fe7qzduo1yyl57tingsue.png" alt="Image description" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;6. Make the URL SEO-Friendly&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before publishing, check the &lt;strong&gt;URL slug&lt;/strong&gt; (the link of the post). Edit it to make it short and clear.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F4g00qsmyv7tn0v5wzrs1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F4g00qsmyv7tn0v5wzrs1.png" alt="Image description" width="571" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;7. Publish the Blog Post&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Click the &lt;strong&gt;Publish&lt;/strong&gt; button. Now, your blog post is live on &lt;strong&gt;blog.domain.com&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;8. Check if It’s Visible on the Main Website&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Go to &lt;strong&gt;domain.com/blogs&lt;/strong&gt; and see if your new post appears.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Flewaz8yle4s0v2ldckjw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Flewaz8yle4s0v2ldckjw.png" alt="Image description" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9. Clear Cache (If Needed)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If the post doesn’t appear, clear the cache:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;LiteSpeed Cache&lt;/strong&gt; in WordPress&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Purge All Cache&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7mb53zh5c8ne8h564p44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7mb53zh5c8ne8h564p44.png" alt="Image description" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This refreshes the page and makes the new post visible on the main site.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: How the Blog is Integrated with the Main Website&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, let’s understand how the blog posts from &lt;strong&gt;blog.domain.com&lt;/strong&gt; appear on &lt;strong&gt;domain.com/blogs&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Using API to Fetch Blog Posts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Our main website (domain.com) does not store blog posts. Instead, it &lt;strong&gt;fetches&lt;/strong&gt; them from WordPress using an API. An &lt;strong&gt;API&lt;/strong&gt; (Application Programming Interface) is like a bridge that connects two systems.&lt;/p&gt;

&lt;p&gt;Whenever someone visits &lt;strong&gt;domain.com/blogs&lt;/strong&gt;, our website sends a request to the WordPress API. The API responds with a list of blog posts. Our main website then displays these posts in a beautiful format.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. How Often Does It Update?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The website updates the blog section automatically. But sometimes, if a new post is missing, clearing the cache helps.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Why Did We Do This?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster Development:&lt;/strong&gt; Using WordPress saved us time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy for Marketing Team:&lt;/strong&gt; They can write and manage blogs without help from developers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smooth Integration:&lt;/strong&gt; API makes sure the main website always shows the latest blogs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How the Blog is Integrated with the Main Website Using API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Our blog is built on WordPress and is hosted at &lt;strong&gt;blog.domain.com&lt;/strong&gt;. Our main website fetches blog posts using the &lt;strong&gt;WordPress REST API&lt;/strong&gt;. This API allows us to get blog posts, search for specific topics, filter by category, and more.&lt;/p&gt;

&lt;p&gt;Instead of storing blog posts on our main website, we use API calls to get the latest posts from WordPress. This ensures that whenever a new post is published, it automatically appears on the main website.&lt;/p&gt;

&lt;p&gt;Now, let’s explore how we use different API requests to get blog data.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fetching All Blog Posts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To get a list of all blog posts, we use this API endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Fetching a Single Blog Post&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To get details of a specific post, we need its &lt;strong&gt;post ID&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts/{post_id}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, if a blog post has an ID of 100, we call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts/100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Fetching a Blog Post Using Slug&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Each blog post has a &lt;strong&gt;slug&lt;/strong&gt; (a part of the URL that identifies the post). Instead of using an ID, we can fetch a post using its slug:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts?_embed&amp;amp;slug={slug}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, if the post URL is blog.domain.com/how-to-code, the slug is how-to-code. So, we call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts?_embed&amp;amp;slug=how-to-code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes it easier to get a blog post without knowing its ID.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fetching Blog Posts with Pagination&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If we have many blog posts, we don’t want to load them all at once. Instead, we can fetch them page by page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts?per_page=10&amp;amp;page=1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;per_page=10&lt;/code&gt; → Get &lt;strong&gt;10&lt;/strong&gt; posts per request&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;page=1&lt;/code&gt; → Get the &lt;strong&gt;first page&lt;/strong&gt; of posts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get the second page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts?per_page=10&amp;amp;page=2&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Searching for Blog Posts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We can search for blog posts by keyword. For example, to search for &lt;strong&gt;"technology"&lt;/strong&gt;, we use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts?search=technology&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will return posts that contain the word &lt;strong&gt;"technology"&lt;/strong&gt; in the title or content.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Filtering by Categories&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Each blog category has an &lt;strong&gt;ID&lt;/strong&gt;. We can filter posts by category ID.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts?categories=5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will return only blog posts that belong to category &lt;strong&gt;ID 5&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To find category IDs, we call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/categories&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will return a list of categories with their IDs.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Sorting and Ordering Posts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We can sort blog posts by &lt;strong&gt;date, title, relevance, and more&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts?order=desc&amp;amp;orderby=date&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;order=desc&lt;/code&gt; → Sort posts in &lt;strong&gt;descending order&lt;/strong&gt; (latest posts first)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;order=asc&lt;/code&gt; → Sort posts in &lt;strong&gt;ascending order&lt;/strong&gt; (oldest posts first)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;orderby=date&lt;/code&gt; → Sort by &lt;strong&gt;publish date&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;orderby=title&lt;/code&gt; → Sort by &lt;strong&gt;title&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fetching Featured Images and Categories&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Sometimes, we need more than just the title and content. We also want the &lt;strong&gt;featured image&lt;/strong&gt; and &lt;strong&gt;categories&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To get this extra data, we use &lt;code&gt;_embed&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts?_embed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we can show the &lt;strong&gt;featured image&lt;/strong&gt; and &lt;strong&gt;category names&lt;/strong&gt; on the main website.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Full Example Request&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Here’s an example API request that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gets 5 posts per page&lt;/li&gt;
&lt;li&gt;Searches for &lt;strong&gt;"WordPress"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Filters posts by category &lt;strong&gt;ID 5&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Sorts by date&lt;/li&gt;
&lt;li&gt;Includes featured images and categories
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//blog.domain.com/wp-json/wp/v2/posts?per_page=5&amp;amp;page=1&amp;amp;search=wordpress&amp;amp;categories=5&amp;amp;orderby=date&amp;amp;_embed&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;How the Main Website Uses This API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Our main website makes API calls to fetch blog posts and display them. We use &lt;strong&gt;JavaScript&lt;/strong&gt; to do this.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Integration Code Example (JavaScript)&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://blog.domain.com/wp-json/wp/v2/posts?_embed&amp;amp;per_page=5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Title:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rendered&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;URL:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We used WordPress to build our blog quickly. We connected it to our main website using an API. Now, whenever we publish a blog on &lt;strong&gt;blog.domain.com&lt;/strong&gt;, it appears on &lt;strong&gt;domain.com/blogs&lt;/strong&gt; automatically.&lt;/p&gt;

&lt;p&gt;This setup is simple and effective. It saves time and makes it easy to manage blog posts.&lt;/p&gt;

&lt;p&gt;If you ever face issues with missing posts, just &lt;strong&gt;clear the cache&lt;/strong&gt;, and everything should work fine!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Transforming MongoDB Atlas and Fuzzy Search: Step-by-Step Guide</title>
      <dc:creator>Shariar Islam</dc:creator>
      <pubDate>Wed, 04 Sep 2024 15:47:01 +0000</pubDate>
      <link>https://dev.to/shariar_islam/transforming-mongodb-search-step-by-step-guide-to-using-atlas-and-fuzzy-search-1a09</link>
      <guid>https://dev.to/shariar_islam/transforming-mongodb-search-step-by-step-guide-to-using-atlas-and-fuzzy-search-1a09</guid>
      <description>&lt;p&gt;When working with search functionalities in your projects, you might often rely on MongoDB’s basic search operators like $text and $search. These tools are effective for simple search tasks but may not always deliver the best results, especially as your needs become more complex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges with Basic Search Operators
&lt;/h2&gt;

&lt;p&gt;Initially, when you start using MongoDB for searches, it might seem sufficient to use basic operators like $text and $search. These operators allow you to search within your database, but they can be limited.&lt;/p&gt;

&lt;p&gt;For example, they may not handle typos well or might not provide the most relevant results. You might find that your search bar works, but it doesn’t give users the best experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up MongoDB Atlas Search
&lt;/h2&gt;

&lt;p&gt;To improve your search capabilities, you can use MongoDB Atlas Search. Setting it up is straightforward. First, go to the MongoDB collection where your data is stored. You’ll find an option called “Atlas Search” in your MongoDB Atlas dashboard.&lt;/p&gt;

&lt;p&gt;Here, you can create a search index, which is crucial for advanced search features. You’ll have the option to use either the Visual Editor or the JSON Editor. The Visual Editor is user-friendly and easy to navigate if you prefer a simpler approach. However, if you want more control over your search settings, using the JSON Editor is recommended.&lt;/p&gt;

&lt;p&gt;To create a basic search index, you can use a simple JSON configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "mappings": {
    "dynamic": true
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Once you create the index, it will take a few minutes to become active.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Integrating Atlas Search into Backend Code
&lt;/h2&gt;

&lt;p&gt;After setting up your search index, the next step is to integrate it into your backend code. Imagine you have a MongoDB collection named Products, which contains all your product data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftn50fxlvqrnfgwhnp9jq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftn50fxlvqrnfgwhnp9jq.jpg" alt="MongoDB Collection Image" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make this data searchable, you can run an aggregation on the collection using the &lt;code&gt;$search&lt;/code&gt; operator.&lt;/p&gt;

&lt;p&gt;Here’s an example of how you might write this in TypeScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const atlasSearchQueryIntoDb = async (searchTerm: string): Promise&amp;lt;IProduct[]&amp;gt; =&amp;gt; {
  try {
    const searchResult = await Products.aggregate();
    return searchResult;
  } catch (error) {
    throw new API_Error(StatusCodes.INTERNAL_SERVER_ERROR, "Search failed. Please try again later.");
  }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this code, you’ll need to specify the name of the search index you created earlier, which in this case is &lt;code&gt;"searchBar"&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Products.aggregate([
  {
    $search: {
      index: "searchBar"
    }
  }
]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Enhancing Search with Compound Operators
&lt;/h2&gt;

&lt;p&gt;To make your search even more powerful, you can use the compound operator. This operator allows you to combine multiple search conditions to improve accuracy and performance.&lt;/p&gt;

&lt;p&gt;For example, you can add autocomplete functionality to your search bar, which helps users find what they’re looking for more quickly.&lt;/p&gt;

&lt;p&gt;Here’s how you can add autocomplete to your search:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Products.aggregate([
  {
    $search: {
      index: "searchBar",
      compound: {
        should: [
          {
            autocomplete: {
              query: searchTerm,
              path: "title"
            }
          }
        ]
      }
    }
  }
]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Implementing Fuzzy Search for Error Tolerance
&lt;/h2&gt;

&lt;p&gt;One of the most useful features of MongoDB Atlas Search is the fuzzy search option. Fuzzy search allows your search functionality to tolerate small mistakes, such as typos.&lt;/p&gt;

&lt;p&gt;By setting the maxEdits property, you can control how many errors are allowed in the search term. Typically, a value of 2 is a good balance between flexibility and accuracy.&lt;/p&gt;

&lt;p&gt;Here’s how you can implement fuzzy search:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Products.aggregate([
  {
    $search: {
      index: "searchBar",
      compound: {
        should: [
          {
            autocomplete: {
              query: searchTerm,
              path: "title",
              fuzzy: {
                maxEdits: 2
              },
              score: { boost: { value: 20 } }
            }
          }
        ]
      }
    }
  }
]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using fuzzy search makes your search bar smarter and more user-friendly, ensuring that users can find what they need even if they make small mistakes in their search queries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Improving User Experience with Smarter Search
&lt;/h2&gt;

&lt;p&gt;By leveraging MongoDB Atlas Search with features like compound operators, autocomplete, and fuzzy search, you can significantly enhance the search functionality in your projects.&lt;/p&gt;

&lt;p&gt;This approach not only improves the performance and accuracy of your searches but also provides a better overall experience for your users.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>mongodb</category>
      <category>backenddevelopment</category>
    </item>
  </channel>
</rss>
