{"id":8073,"date":"2023-08-14T14:22:17","date_gmt":"2023-08-14T21:22:17","guid":{"rendered":"https:\/\/membermouse.com\/?post_type=ht_kb&#038;p=8073"},"modified":"2025-01-07T09:55:29","modified_gmt":"2025-01-07T14:55:29","slug":"filtros-do-membermouse-wordpress","status":"publish","type":"ht_kb","link":"https:\/\/membermouse.com\/pt\/documentos-3-2\/filtros-do-membermouse-wordpress\/","title":{"rendered":"Filtros do MemberMouse para WordPress"},"content":{"rendered":"<p>Os filtros s\u00e3o fun\u00e7\u00f5es pelas quais o WordPress passa os dados, em determinados pontos da execu\u00e7\u00e3o, pouco antes de realizar alguma a\u00e7\u00e3o com os dados. O MemberMouse define seu pr\u00f3prio conjunto de filtros que voc\u00ea pode utilizar para controlar o fluxo de execu\u00e7\u00e3o no MemberMouse antes de determinadas a\u00e7\u00f5es serem tomadas.<\/p>\n\n\n\n<p>Aqui est\u00e1 um exemplo b\u00e1sico:<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>function customContentProtection($data)\n{\n     return true;\n}\nadd_filter('mm_bypass_content_protection', 'customContentProtection');\n<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Neste exemplo, estamos usando o&nbsp;<a href=\"http:\/\/codex.wordpress.org\/Function_Reference\/add_filter\" target=\"_blank\" rel=\"noreferrer noopener\"><em>add_filter()<\/em><\/a>&nbsp;para indicar que o m\u00e9todo&nbsp; <em>customContentProtection()<\/em>&nbsp;deve ser chamado quando o MemberMouse aplicar o m\u00e9todo&nbsp; <em>mm_bypass_content_protection<\/em>&nbsp;filtro. <\/p>\n\n\n\n<p>Para saber mais sobre como trabalhar com a API de a\u00e7\u00e3o do WordPress&nbsp;<a href=\"http:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noreferrer noopener\">leia este artigo<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refer\u00eancia do filtro MemberMouse<\/h2>\n\n\n\n<p>A seguir, h\u00e1 uma lista de todos os filtros do MemberMouse, uma descri\u00e7\u00e3o de quando eles s\u00e3o executados e informa\u00e7\u00f5es sobre os dados que ser\u00e3o passados para qualquer fun\u00e7\u00e3o conectada ao filtro.<\/p>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Intervalo de varredura de faturamento<\/h3>\n\n\n\n<p><strong>mm_billing_scan_intervalo<\/strong><\/p>\n\n\n\n<p><em><mark style=\"background-color:#fcb900\" class=\"has-inline-color has-black-color\">MemberMouse 3.0+<\/mark><\/em><\/p>\n\n\n\n<p>O MemberMouse executa periodicamente um <a href=\"https:\/\/developer.wordpress.org\/plugins\/cron\/\" target=\"_blank\" rel=\"noopener\" title=\"WP-Cron\">WP-Cron<\/a> que verifica as assinaturas que devem ser cobradas novamente e as coloca na fila para processamento pelo sistema de faturamento local. Por padr\u00e3o, as varreduras s\u00e3o realizadas a cada 15 minutos. Esse filtro permite modificar o intervalo entre as varreduras, o que pode ser \u00fatil para otimizar o desempenho do seu site. <\/p>\n\n\n\n<p>O plug-in passa um \u00fanico argumento <code>$scanIntervalo<\/code> para sua fun\u00e7\u00e3o, um n\u00famero inteiro que representa o n\u00famero padr\u00e3o de minutos entre as varreduras. Sua fun\u00e7\u00e3o deve retornar um n\u00famero inteiro que represente os minutos desejados entre as varreduras. Por exemplo, o seguinte far\u00e1 a varredura de assinaturas que est\u00e3o prontas para cobran\u00e7a uma vez a cada cinco minutos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function customBillingScanInterval($scanInterval)\n{\n   return 5;\n}\nadd_filter(\"mm_billing_scan_interval\", \"customBillingScanInterval\", 10, 2);\n<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Intervalo de cobran\u00e7a da assinatura<\/h3>\n\n\n\n<p><strong>mm_billing_subscription_dunning_interval<\/strong><\/p>\n\n\n\n<p><em><mark style=\"background-color:#fcb900\" class=\"has-inline-color has-black-color\">MemberMouse 3.0+<\/mark><\/em><\/p>\n\n\n\n<p>Se uma assinatura n\u00e3o for cobrada na data programada, o MemberMouse far\u00e1 tr\u00eas tentativas adicionais para cobrar o pagamento. Esse filtro permite que voc\u00ea controle o intervalo entre as tentativas.<\/p>\n\n\n\n<p>O MemberMouse passa dois argumentos para sua fun\u00e7\u00e3o. O primeiro \u00e9 um n\u00famero inteiro <code>$failureInterval<\/code>&nbsp;que representa o n\u00famero padr\u00e3o de dias antes da pr\u00f3xima tentativa. O segundo \u00e9 um n\u00famero inteiro <code>$failureState<\/code>&nbsp;que representa o estado de falha de faturamento espec\u00edfico. Atualmente, existem tr\u00eas estados de falha: 2, 3 e 4, que representam a segunda, a terceira e a \u00faltima tentativa de cobrar o pagamento, respectivamente.<\/p>\n\n\n\n<p>Sua fun\u00e7\u00e3o deve retornar um n\u00famero inteiro que represente o n\u00famero de dias que deve ser permitido passar antes da pr\u00f3xima tentativa. Aqui est\u00e1 um exemplo que replica os intervalos de cobran\u00e7a padr\u00e3o:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function customDunningInterval($failureInterval, $failureState)\n{\n   switch ($failureState)\n   {\n      case 2:\n         return 2; \/\/ Primeira tentativa, dois dias ap\u00f3s a falha inicial de cobran\u00e7a\n      \n      case 3:\n         return 3; \/\/ Segunda tentativa, tr\u00eas dias ap\u00f3s a primeira tentativa\n      \n      Caso 4:\n         return 2; \/\/ Terceira tentativa, dois dias ap\u00f3s a segunda tentativa\n      \n      padr\u00e3o:\n         return $failureInterval;\n   }\n}\nadd_filter(\"mm_billing_subscription_dunning_interval\", \"customDunningInterval\", 10, 2);<\/code><\/pre>\n\n\n\n<p>Para personalizar os intervalos de cobran\u00e7a, basta alterar os valores retornados nas tr\u00eas instru\u00e7\u00f5es de caso para a dura\u00e7\u00e3o desejada em dias.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Acesso a blocos<\/h3>\n\n\n\n<p><strong>mm_block_access<\/strong><\/p>\n\n\n\n<p>Esse filtro \u00e9 aplicado depois que o MemberMouse determina que o visitante atual tem acesso ao conte\u00fado e permite que voc\u00ea bloqueie seletivamente o acesso ao conte\u00fado protegido.<\/p>\n\n\n\n<p>O MemberMouse passa um valor booleano <code>$blockAccess<\/code> para sua fun\u00e7\u00e3o, indicando se ela bloquear\u00e1 o acesso ao conte\u00fado por padr\u00e3o. Sua fun\u00e7\u00e3o deve retornar um booleano indicando se o MemberMouse deve bloquear o acesso ao conte\u00fado.<\/p>\n\n\n\n<p>Por exemplo, para bloquear o acesso de todos os membros ao conte\u00fado protegido:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun\u00e7\u00e3o blockMemberAccess($blockAccess)\n{\n   return true;\n}\nadd_filter(\"mm_block_access\", \"blockMemberAccess\", 10, 2);\n<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Contornar a prote\u00e7\u00e3o de conte\u00fado<\/h3>\n\n\n\n<p><strong>mm_bypass_content_protection<\/strong><\/p>\n\n\n\n<p>Esse filtro \u00e9 aplicado depois que o MemberMouse determina que o visitante atual n\u00e3o tem acesso ao conte\u00fado e permite que voc\u00ea ignore seletivamente a prote\u00e7\u00e3o do conte\u00fado. <\/p>\n\n\n\n<p>O MemberMouse passa um valor booleano <code>$allowAccess<\/code> para sua fun\u00e7\u00e3o, indicando se ela fornecer\u00e1 acesso ao conte\u00fado por padr\u00e3o. Sua fun\u00e7\u00e3o deve retornar um booleano indicando se o MemberMouse deve permitir o acesso ao conte\u00fado.<\/p>\n\n\n\n<p>Por exemplo, o seguinte permitir\u00e1 que qualquer membro que tenha recebido a atribui\u00e7\u00e3o de <em>Colaborador<\/em> acesso de fun\u00e7\u00e3o a todas as p\u00e1ginas e postagens protegidas: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun\u00e7\u00e3o allowAccessForContributors($allowAccess)\n{\n    if (current_user_can(\"contributor\"))\n    {\n        return true;\n    }\n    else\n    {\n        return $allowAccess;\n    }\n}\nadd_filter(\"mm_bypass_content_protection\", \"allowAccessForContributors\", 10, 2);\n<\/code><\/pre>\n\n\n\n<p>Observe que, embora esse filtro forne\u00e7a acesso a p\u00e1ginas e postagens que, de outra forma, seriam inacess\u00edveis, ele n\u00e3o afeta a an\u00e1lise das SmartTags de decis\u00e3o.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Redirecionamento de login<\/h3>\n\n\n\n<p><strong>mm_login_redirect<\/strong><\/p>\n\n\n\n<p>Esse filtro \u00e9 aplicado antes de o MemberMouse executar seu comportamento padr\u00e3o de redirecionamento de login, que \u00e9&nbsp;<a href=\"https:\/\/membermouse.com\/pt\/documentos-3-2\/configuracoes-da-pagina-inicial-do-membro\/\" target=\"_blank\" rel=\"noreferrer noopener\">configurado em Configura\u00e7\u00f5es da p\u00e1gina inicial do membro<\/a>. Retorna um URL para indicar que o MemberMouse deve redirecionar o usu\u00e1rio para esse URL. Retorne uma string vazia para indicar que o MemberMouse deve usar suas pr\u00f3prias regras internas para determinar para onde o usu\u00e1rio deve ser enviado.<\/p>\n\n\n\n<p>O objeto passado para a sua fun\u00e7\u00e3o cont\u00e9m o URL para o qual o MemberMouse redirecionar\u00e1 o usu\u00e1rio se voc\u00ea n\u00e3o retornar um URL de substitui\u00e7\u00e3o e um objeto de usu\u00e1rio que cont\u00e9m dados sobre o usu\u00e1rio conectado.<br>Se o nome do objeto em sua fun\u00e7\u00e3o for&nbsp;<code>$infoObj<\/code>&nbsp;ent\u00e3o voc\u00ea acessar\u00e1 os dois elementos de dados da seguinte forma:<\/p>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>$infoObj-&gt;currentUrl\n$infoObj-&gt;user<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Descritor de declara\u00e7\u00e3o de listras<\/h3>\n\n\n\n<p><strong>mm_stripe_billing_statement_descriptor<\/strong><\/p>\n\n\n\n<p>Quando o MemberMouse inicia uma cobran\u00e7a, ele envia v\u00e1rios dados descritivos sobre a cobran\u00e7a. O descritor do extrato \u00e9 o que ser\u00e1 exibido para o cliente na fatura do cart\u00e3o de cr\u00e9dito e tamb\u00e9m \u00e9 vis\u00edvel no Stripe. Esse filtro permite que voc\u00ea personalize o descritor do extrato para transa\u00e7\u00f5es de cobran\u00e7a.<\/p>\n\n\n\n<p>Observe que o comprimento total m\u00e1ximo do descritor de extrato \u00e9 de 22 caracteres, e o envio de uma cadeia maior resultar\u00e1 em falha no processamento do pagamento. Al\u00e9m disso, os dados que voc\u00ea enviar poder\u00e3o ser truncados. Em \u00faltima an\u00e1lise, o Stripe cria um \"descritor de extrato calculado\" anexando o descritor que voc\u00ea envia ao descritor abreviado especificado em <a href=\"https:\/\/dashboard.stripe.com\/settings\/public\" title=\"\">Configura\u00e7\u00f5es p\u00fablicas do painel do Stripe<\/a>mas o comprimento m\u00e1ximo dessa cadeia calculada tamb\u00e9m \u00e9 de 22 caracteres, e qualquer coisa al\u00e9m disso ser\u00e1 descartada. <\/p>\n\n\n\n<p>Para calcular o comprimento m\u00e1ximo do conte\u00fado que ser\u00e1 exibido, use a seguinte f\u00f3rmula:<\/p>\n\n\n\n<p><em>comprimento m\u00e1ximo exibido = 22 - (comprimento do descritor reduzido + 2)<\/em><\/p>\n\n\n\n<p>O MemberMouse passar\u00e1 dois par\u00e2metros para sua fun\u00e7\u00e3o. O primeiro \u00e9 <code>$descriptor<\/code> que \u00e9 uma cadeia de caracteres que cont\u00e9m as informa\u00e7\u00f5es que o MemberMouse enviar\u00e1, a menos que seja modificado. A segunda \u00e9 <code>1TP4Pedido<\/code> que \u00e9 um objeto de classe padr\u00e3o que cont\u00e9m dados de ordem do MemberMouse, que voc\u00ea pode usar na constru\u00e7\u00e3o do descritor de instru\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p>Veja um exemplo:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>add_filter(\"mm_stripe_billing_statement_descriptor\", function($descriptor, $order)\n{\n\n   $descriptor = \"Order #: \" . $order-&gt;orderNumber;\n   $maxLengthDescriptor = substr($descriptor,0,22);\n   return $maxLengthDescriptor;\n}, 1, 2);<\/code><\/pre>\n\n\n\n<p>Se seu descritor abreviado for <em>ABC<\/em> seus clientes devem ver algo parecido em seus extratos de cart\u00e3o de cr\u00e9dito:<\/p>\n\n\n\n<p><em>ABC* Pedido #: 10043<\/em><\/p>\n\n\n\n<p>Esse filtro s\u00f3 pode atuar em reembolsos, n\u00e3o em pagamentos iniciais. <\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Descri\u00e7\u00e3o do Stripe PaymentIntent<\/h3>\n\n\n\n<p><strong>mm_stripe_paymentintent_description<\/strong><\/p>\n\n\n\n<p>Outra parte dos dados enviados ao Stripe com as cobran\u00e7as \u00e9 a Description (Descri\u00e7\u00e3o), que esse filtro permite personalizar. A Description \u00e9 uma das colunas exibidas quando voc\u00ea seleciona <em>Pagamentos<\/em> no Painel de Controle do Stripe. O comprimento m\u00e1ximo desse campo \u00e9 de 350 caracteres.<\/p>\n\n\n\n<p>O MemberMouse passar\u00e1 dois par\u00e2metros para sua fun\u00e7\u00e3o. O primeiro \u00e9 <code>$descri\u00e7\u00e3o<\/code> que \u00e9 uma cadeia de caracteres que cont\u00e9m as informa\u00e7\u00f5es que o MemberMouse enviar\u00e1, a menos que seja modificado. A segunda \u00e9 <code>1TP4Pedido<\/code> que \u00e9 um objeto de classe padr\u00e3o que cont\u00e9m dados de pedido do MemberMouse, que voc\u00ea pode usar na constru\u00e7\u00e3o da Descri\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<p>Por exemplo, para definir esse campo como&nbsp;<em>Order# 1234, Item: Membro digital&nbsp;<\/em>voc\u00ea poderia usar a seguinte fun\u00e7\u00e3o em seu plug-in:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>add_filter('mm_stripe_paymentintent_description', function($description, $order)\n{\n   $description = \"Pedido # \" . $order-&gt;orderNumber;\n   Se (isset($order-&gt;orderProducts) &amp;&amp; is_array($order-&gt;orderProducts))\n   {\n      $description .= \", Item: \" . array_pop($order-&gt;orderProducts)-&gt;description;\n   }\n   return $description;\n}, 1, 2);<\/code><\/pre>\n\n\n\n<p>Esse filtro s\u00f3 pode atuar em reembolsos, n\u00e3o em pagamentos iniciais. Para ver todos os dados que podem ser acessados no filtro <code>1TP4Pedido<\/code> objeto, visualize este\u00a0<a href=\"https:\/\/storage.googleapis.com\/wpgcbucket\/wp\/2025\/01\/8bb79f95-oder-object-example-membermouse.txt\" target=\"_blank\" rel=\"noopener\" title=\"\">objeto de ordem de amostra<\/a>.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Filtros padr\u00e3o do MemberMouse<\/h2>\n\n\n\n<p>Esses s\u00e3o filtros inclu\u00eddos no plug-in que podem ser substitu\u00eddos em seu c\u00f3digo personalizado usando&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_filter\" target=\"_blank\">remove_filter<\/a>&nbsp;para implementar seus pr\u00f3prios filtros relacionados.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Validador de for\u00e7a da senha<\/h3>\n\n\n\n<p><strong>mm_password_strength_validator<\/strong><\/p>\n\n\n\n<p>A partir da vers\u00e3o 2.2.9, o MemberMouse suporta a adi\u00e7\u00e3o de um filtro de valida\u00e7\u00e3o de senha personalizado. Isso permite que a senha seja avaliada com base em requisitos personalizados. Por padr\u00e3o, o MemberMouse anexa um filtro b\u00e1sico que verifica se a senha tem pelo menos 8 caracteres. Os desenvolvedores t\u00eam a op\u00e7\u00e3o de adicionar um filtro adicional que ser\u00e1 aplicado em conjunto com o padr\u00e3o, ou remover o padr\u00e3o e substitu\u00ed-lo por um filtro personalizado.<\/p>\n\n\n\n<p>O exemplo abaixo mostra as etapas para remover o filtro padr\u00e3o e substitu\u00ed-lo por um filtro personalizado. Isso pode ser adicionado ao arquivo function.php do tema, mas recomendamos que, se voc\u00ea seguir esse caminho, use um&nbsp;<a href=\"https:\/\/codex.wordpress.org\/Child_Themes\" target=\"_blank\" rel=\"noreferrer noopener\">Tema infantil<\/a>&nbsp;para evitar que seu c\u00f3digo seja perdido no caso de uma atualiza\u00e7\u00e3o de tema.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/remover o filtro padr\u00e3o\nremove_filter('mm_password_strength_validator',array('MM_UserHooks', \"passwordStrengthValidator\"));\n\n\/\/adicionar um filtro que imponha que as senhas tenham pelo menos 8 caracteres e contenham uma letra mai\u00fascula, um n\u00famero e um caractere especial\nadd_filter('mm_password_strength_validator', function($passwordData)\n{\n   if (is_object($passwordData) &amp;&amp; isset($passwordData-&gt;data) &amp;&amp; !preg_match('\/^(?=.*[!@#$%^&amp;*-])(?=.*[0-9])(?=.*[A-Z]).{8,20}$\/', $passwordData-&gt;data))\n   {\n      $passwordData-&gt;type = \"error\";\n      $passwordData-&gt;errors[] = \"A senha deve conter um caractere mai\u00fasculo, um caractere especial e um n\u00famero\";\n   }\n   return $passwordData;\n}, 10, 1);<\/code><\/pre>","protected":false},"excerpt":{"rendered":"<p>Os filtros s\u00e3o fun\u00e7\u00f5es pelas quais o WordPress passa os dados, em determinados pontos da execu\u00e7\u00e3o, pouco antes de realizar alguma a\u00e7\u00e3o com os dados. O MemberMouse define seu pr\u00f3prio conjunto de filtros que voc\u00ea...<\/p>","protected":false},"author":21411,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"om_disable_all_campaigns":false,"_strive_editorial_status":"not-started","_strive_copy_of":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"ht-kb-category":[188],"ht-kb-tag":[],"class_list":["post-8073","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-mm-wp-hooks-filters"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/ht-kb\/8073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/users\/21411"}],"replies":[{"embeddable":true,"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/comments?post=8073"}],"version-history":[{"count":1,"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/ht-kb\/8073\/revisions"}],"predecessor-version":[{"id":20432,"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/ht-kb\/8073\/revisions\/20432"}],"wp:attachment":[{"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/media?parent=8073"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/ht-kb-category?post=8073"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/membermouse.com\/pt\/wp-json\/wp\/v2\/ht-kb-tag?post=8073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}