Git Product home page Git Product logo

wp-graphql-redirection's Introduction

WPGraphql Redirection

A plugin that adds WPGraphQL to Redirection

Install

  • Requires PHP 7.1+
  • Requires WordPress 5.0+
  • Requires WPGraphQL
  • Requires Redirection (by John Godley)

Example Usage

An example using Apollo Client and Express in NodeJS

const REDIRECTION_QUERY = gql`
  query Redirection($matchUrl: String!) {
    redirections(
      where: { orderby: "position", matchUrl: $matchUrl, status: ENABLED }
      first: 10
    ) {
      nodes {
        url
        matchUrl
        regex
        status
        id
        databaseId
        position
        actionCode
        actionData
        actionType
      }
    }
  }
`;

export default async (req, res) => {
  const client = new ApolloClient({
    ssrMode: true,
    link: new HttpLink({
      uri: Config.gqlUrl,
      fetch: fetch,
      credentials: "include",
      headers: {
        cookie: req.header("Cookie"),
        origin: FRONTEND_URL,
      },
    }),
    cache: new InMemoryCache(),
  });


  // Start Redirection lookup.
  const {
    data: {
      redirections: { nodes: redirections },
    },
  } = await client.query({
    query: REDIRECTION_QUERY,
    variables: { matchUrl: req.baseUrl + req.path },
  });

  if (redirections?.length > 0) {
    let newUrl = "";
    let code = 301;

    redirections.reverse().forEach((r) => {
      if (
        "url" === r.actionType &&
        r.actionData.replace(/^[\s\uFEFF\xA0\/]+|[\s\uFEFF\xA0\/]+$/g, "") !==
          r.matchUrl.replace(/^[\s\uFEFF\xA0\/]+|[\s\uFEFF\xA0\/]+$/g, "")
      ) {
        newUrl = r.actionData;
        code = r.actionCode;
      }
    });

    if (newUrl) {
      return res.redirect(code, newUrl);
    }
  }
  // End Redirection lookup.

  .. the rest of your page code
}

wp-graphql-redirection's People

Contributors

jonshipman avatar

Stargazers

Dano avatar Jonathan Lovera avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.