Endereços personalizados no WordPress: um URL para o seu plugin

  • Última modificação: 03/08/2019
  • Tempo de leitura: 2 min.

Já precisou criar um endereço personalizado para exibir alguma informação gerada pelo seu plugin WordPress? Algo como dominio.com/meu-plugin? Neste vídeo explico sobre a API Rewrite. Com ela você pode criar novas regras de endereços no WP, com parâmetros adicionais e tudo o mais.

Ele também tem uma explicação sobre como criar um novo arquivo no seu tema e associar com este endereço usando o filtro template_include e como sempre redirecionar os usuários para a URL amigável com a action template_redirect.

O código final e completo do plugin é esse aqui:

<?php
/**
 * Plugin Name: Plugin com URL
 */

defined( 'ABSPATH' ) || exit;

function url_plugin_template_include( $template ) {
	if ( get_query_var( 'meu_plugin' ) ) {
		$template_name = 'template-meu-plugin.php';

		$template = locate_template( $template_name );
		if ( '' === $template ) {
			$template = __DIR__ . '/' . $template_name;
		}
	}
	return $template;
}
add_filter( 'template_include', 'url_plugin_template_include' );

function url_plugin_init() {
	add_rewrite_rule(
		'meu-plugin/([^/]*)/([^/]*)/?',
		'index.php?meu_plugin=1&meu_plugin_info_1=$matches[1]&meu_plugin_info_2=$matches[2]',
		'top'
	);
}
add_action( 'init', 'url_plugin_init' );

function url_plugin_query_vars( $query_vars ) {
	$query_vars[] = 'meu_plugin';
	$query_vars[] = 'meu_plugin_info_1';
	$query_vars[] = 'meu_plugin_info_2';
	return $query_vars;
}
add_filter( 'query_vars', 'url_plugin_query_vars' );

function url_plugin_template_redirect() {
	if ( ! empty( $_GET['meu_plugin'] ) ) {
		wp_redirect( "meu-plugin/{$_GET['meu_plugin_info_1']}/{$_GET['meu_plugin_info_2']}/" );
		exit;
	}
}
add_action( 'template_redirect', 'url_plugin_template_redirect' );

Não se esqueça de curtir o vídeo e de assinar o canal!

Felipe Elia

Associate Director of Platform Engineering na 10up, WordPress Core Contributor, Global Polyglots Mentor na comunidade internacional do WordPress e Locale Manager na comunidade WordPress Brasil.

Este post tem 3 comentários

  1. Dante

    Gostei muito desse tutorial, gostaria de saber se é possível pegar dados de um metabox url, metabox tipo e a imagem relacionada ao post de um CPT, se possível como seria feito isso.

    1. Felipe Elia

      Olá! O endpoint dos posts retorna featured_media, que é o ID da imagem destacada. Com esse ID você pode usar o endpoint de mídia para obter os dados da imagem. Sobre metabox url/tipo, não sei se tenho certeza de que entendi o que você disse. O endpoint de posts retorna um atributo “meta”, que pode ajudar. Na definição do CPT você também pode configurar quais campos serão expostos.
      Dê uma olhada na referência de endpoints da documentação oficial, lá tem tudo certinho: https://developer.wordpress.org/rest-api/reference/
      Abraços!

      1. Dante

        Boa noite, obrigado pela resposta. Eu consegui fazer o que queria.

Comentários encerrados.