Felipe Elia

ENPT

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

2 min de leitura

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!

Gostou deste post? Receba o próximo por e-mail.

Novos artigos e ferramentas úteis, sempre que houver algo que valha compartilhar.

Sem frequência fixa. Sem spam. Cancele quando quiser.

3 respostas a “Endereços personalizados no WordPress: um URL para o seu plugin”

  1. Avatar de Dante
    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. Avatar de Felipe Elia
      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. Avatar de Dante
        Dante

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