{"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":"membermouse-filtros-wordpress","status":"publish","type":"ht_kb","link":"https:\/\/membermouse.com\/es\/docs\/membermouse-filtros-wordpress\/","title":{"rendered":"MemberMouse Filtros WordPress"},"content":{"rendered":"<p>Los filtros son funciones a trav\u00e9s de las cuales WordPress pasa los datos, en ciertos puntos de la ejecuci\u00f3n, justo antes de tomar alguna acci\u00f3n con los datos. MemberMouse define su propio conjunto de filtros que puede utilizar para controlar el flujo de ejecuci\u00f3n en MemberMouse antes de realizar determinadas acciones.<\/p>\n\n\n\n<p>He aqu\u00ed un ejemplo 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     devuelve 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>En este ejemplo, utilizamos la funci\u00f3n&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 el&nbsp; <em>customContentProtection()<\/em>&nbsp;cuando MemberMouse aplique el m\u00e9todo&nbsp; <em>mm_bypass_content_protection<\/em>&nbsp;filtro. <\/p>\n\n\n\n<p>Para obtener m\u00e1s informaci\u00f3n sobre c\u00f3mo trabajar con la Action API de WordPress&nbsp;<a href=\"http:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noreferrer noopener\">leer este art\u00edculo<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Referencia del filtro MemberMouse<\/h2>\n\n\n\n<p>A continuaci\u00f3n se muestra una lista de todos los filtros MemberMouse, una descripci\u00f3n de cu\u00e1ndo se ejecutan e informaci\u00f3n sobre los datos que se pasar\u00e1n a cualquier funci\u00f3n enganchada al 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 exploraci\u00f3n de facturaci\u00f3n<\/h3>\n\n\n\n<p><strong>mm_billing_scan_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>MemberMouse ejecuta peri\u00f3dicamente un <a href=\"https:\/\/developer.wordpress.org\/plugins\/cron\/\" target=\"_blank\" rel=\"noopener\" title=\"WP-Cron\">WP-Cron<\/a> tarea que busca suscripciones pendientes de refacturaci\u00f3n y las pone en cola para que las procese el sistema de facturaci\u00f3n local. Por defecto, los escaneos se realizan cada quince minutos. Este filtro le permite modificar el intervalo entre exploraciones, lo que puede ser \u00fatil para optimizar el rendimiento de su sitio. <\/p>\n\n\n\n<p>El plugin pasa un \u00fanico argumento <code>$scanInterval<\/code> a su funci\u00f3n, un n\u00famero entero que representa el n\u00famero predeterminado de minutos entre exploraciones. Su funci\u00f3n debe devolver un n\u00famero entero que represente los minutos deseados entre exploraciones. Por ejemplo, lo siguiente buscar\u00e1 suscripciones que est\u00e9n listas para facturar una vez 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\">Suscripci\u00f3n Intervalo de reclamaci\u00f3n<\/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>Si una suscripci\u00f3n no se factura en la fecha prevista, MemberMouse realiza tres intentos adicionales para cobrar el pago. Este filtro permite controlar el intervalo entre los intentos.<\/p>\n\n\n\n<p>MemberMouse pasa dos argumentos a su funci\u00f3n. El primero es un entero <code>$failureInterval<\/code>&nbsp;que representa el n\u00famero predeterminado de d\u00edas antes de que se realice el siguiente intento. El segundo es un n\u00famero entero <code>$failureState<\/code>&nbsp;que representa el estado concreto de facturaci\u00f3n fallida. Actualmente existen tres estados de fallo: 2, 3, 4 que representan el segundo, tercer y \u00faltimo intento de cobro, respectivamente.<\/p>\n\n\n\n<p>Su funci\u00f3n debe devolver un n\u00famero entero que represente el n\u00famero de d\u00edas que deben transcurrir antes del siguiente intento. He aqu\u00ed un ejemplo que reproduce los intervalos de reclamaci\u00f3n por defecto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function customDunningInterval($failureInterval, $failureState)\n{\n   switch ($failureState)\n   {\n      caso 2:\n         return 2; \/\/ Primer reintento, dos d\u00edas despu\u00e9s del fallo de facturaci\u00f3n inicial\n      \n      caso 3: return 3\n         return 3; \/\/ Segundo reintento, tres d\u00edas despu\u00e9s del primer reintento\n      \n      caso 4: return 2\n         return 2; \/\/ Tercer reintento, dos d\u00edas despu\u00e9s del segundo reintento\n      \n      por defecto:\n         return $failureInterval;\n   }\n}\nadd_filter(\"mm_billing_subscription_dunning_interval\", \"customDunningInterval\", 10, 2);<\/code><\/pre>\n\n\n\n<p>Para personalizar los intervalos de reclamaci\u00f3n, s\u00f3lo tiene que cambiar los valores devueltos en las tres sentencias case a la duraci\u00f3n deseada en d\u00edas.<\/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\">Acceso en bloque<\/h3>\n\n\n\n<p><strong>mm_block_access<\/strong><\/p>\n\n\n\n<p>Este filtro se aplica despu\u00e9s de que MemberMouse haya determinado que el visitante actual tiene acceso al contenido, y le permite bloquear selectivamente el acceso al contenido protegido.<\/p>\n\n\n\n<p>MemberMouse pasa un valor booleano <code>$blockAccess<\/code> a su funci\u00f3n, indicando si bloquear\u00e1 el acceso al contenido por defecto. Tu funci\u00f3n debe devolver un booleano indicando si MemberMouse debe bloquear el acceso al contenido.<\/p>\n\n\n\n<p>Por ejemplo, para bloquear el acceso de todos los miembros a contenidos protegidos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function blockMemberAccess($blockAccess)\n{\n   devuelve 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\">Eludir la protecci\u00f3n de contenidos<\/h3>\n\n\n\n<p><strong>mm_bypass_content_protection<\/strong><\/p>\n\n\n\n<p>Este filtro se aplica despu\u00e9s de que MemberMouse haya determinado que el visitante actual no tiene acceso al contenido, y le permite eludir selectivamente la protecci\u00f3n de contenidos. <\/p>\n\n\n\n<p>MemberMouse pasa un valor booleano <code>$allowAccess<\/code> a su funci\u00f3n, indicando si proporcionar\u00e1 acceso al contenido por defecto. Su funci\u00f3n debe devolver un booleano que indique si MemberMouse debe permitir el acceso al contenido.<\/p>\n\n\n\n<p>Por ejemplo, lo siguiente permitir\u00e1 que cualquier miembro al que se le haya asignado el <em>Colaborador<\/em> acceso a todas las p\u00e1ginas y entradas protegidas: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function 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>Tenga en cuenta que, aunque este filtro le permitir\u00e1 acceder a p\u00e1ginas y entradas que de otro modo ser\u00edan inaccesibles, no afecta al an\u00e1lisis sint\u00e1ctico de las SmartTags de decisi\u00f3n.<\/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\">Redirecci\u00f3n de inicio de sesi\u00f3n<\/h3>\n\n\n\n<p><strong>mm_login_redirect<\/strong><\/p>\n\n\n\n<p>Este filtro se aplica antes de que MemberMouse ejecute su comportamiento predeterminado de redirecci\u00f3n de inicio de sesi\u00f3n, que es&nbsp;<a href=\"https:\/\/membermouse.com\/es\/docs\/configuracion-de-la-pagina-de-inicio-del-miembro\/\" target=\"_blank\" rel=\"noreferrer noopener\">configurado en los ajustes de la p\u00e1gina de inicio de los miembros<\/a>. Devuelve una URL para indicar que MemberMouse debe redirigir al usuario a esa URL. Devuelve una cadena vac\u00eda para indicar que MemberMouse debe utilizar sus propias reglas internas para determinar a d\u00f3nde se debe enviar al usuario.<\/p>\n\n\n\n<p>El objeto pasado a su funci\u00f3n contiene la URL a la que MemberMouse redirigir\u00e1 al usuario si no devuelve una URL de anulaci\u00f3n y un objeto de usuario que contiene datos sobre el usuario conectado.<br>Si el nombre del objeto en su funci\u00f3n es&nbsp;<code>$infoObj<\/code>&nbsp;entonces acceder\u00e1s a los dos elementos de datos de la siguiente manera:<\/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\">Descriptor de declaraci\u00f3n de raya<\/h3>\n\n\n\n<p><strong>mm_stripe_billing_statement_descriptor<\/strong><\/p>\n\n\n\n<p>Cuando MemberMouse inicia una refacturaci\u00f3n, env\u00eda varios datos descriptivos sobre el cargo. El descriptor del extracto es lo que se mostrar\u00e1 al cliente en la factura de su tarjeta de cr\u00e9dito y tambi\u00e9n es visible en Stripe. Este filtro le permite personalizar el descriptor del extracto para las transacciones de refacturaci\u00f3n.<\/p>\n\n\n\n<p>Tenga en cuenta que la longitud total m\u00e1xima del descriptor de extracto es de 22 caracteres, y que el env\u00edo de una cadena m\u00e1s larga har\u00e1 que no se procese el pago. Adem\u00e1s, los datos que env\u00ede pueden estar truncados. Stripe crea en \u00faltima instancia un \"descriptor de extracto calculado\" a\u00f1adiendo el descriptor que usted env\u00eda al descriptor abreviado especificado en <a href=\"https:\/\/dashboard.stripe.com\/settings\/public\" title=\"\">Configuraci\u00f3n p\u00fablica del panel de Stripe<\/a>pero la longitud m\u00e1xima de esta cadena calculada tambi\u00e9n es de 22 caracteres, y todo lo que supere esta longitud ser\u00e1 descartado. <\/p>\n\n\n\n<p>Para calcular la longitud m\u00e1xima del contenido que se mostrar\u00e1, utilice la siguiente f\u00f3rmula:<\/p>\n\n\n\n<p><em>longitud m\u00e1xima mostrada = 22 - (longitud del descriptor acortado + 2)<\/em><\/p>\n\n\n\n<p>MemberMouse pasar\u00e1 dos par\u00e1metros a su funci\u00f3n. El primero es <code>Descriptor $<\/code> que es una cadena que contiene la informaci\u00f3n que MemberMouse enviar\u00e1 a menos que se modifique. El segundo es <code>1TP4Pedido<\/code> que es un objeto de clase est\u00e1ndar que contiene datos de orden MemberMouse, que puede utilizar en la construcci\u00f3n del descriptor de sentencia.&nbsp;<\/p>\n\n\n\n<p>He aqu\u00ed un ejemplo:&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 = \"Pedido #: \" . $order-&gt;orderNumber;\n   $maxLengthDescriptor = substr($descriptor,0,22);\n   return $maxLengthDescriptor;\n}, 1, 2);<\/code><\/pre>\n\n\n\n<p>Si su Descriptor abreviado es <em>ABC<\/em> sus clientes deber\u00edan ver algo parecido en los extractos de sus tarjetas de cr\u00e9dito:<\/p>\n\n\n\n<p><em>ABC* Pedido #: 10043<\/em><\/p>\n\n\n\n<p>Este filtro s\u00f3lo puede actuar sobre las refacturaciones, no sobre los pagos iniciales. <\/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\">Descripci\u00f3n de Stripe PaymentIntent<\/h3>\n\n\n\n<p><strong>mm_stripe_paymentintent_description<\/strong><\/p>\n\n\n\n<p>Otro dato que se env\u00eda a Stripe con las refacturaciones es la Descripci\u00f3n, que este filtro le permite personalizar. La Descripci\u00f3n es una de las columnas que se muestran al seleccionar <em>Pagos<\/em> en el Panel de Stripe. La longitud m\u00e1xima de este campo es de 350 caracteres.<\/p>\n\n\n\n<p>MemberMouse pasar\u00e1 dos par\u00e1metros a su funci\u00f3n. El primero es <code>$descripci\u00f3n<\/code> que es una cadena que contiene la informaci\u00f3n que MemberMouse enviar\u00e1 a menos que se modifique. El segundo es <code>1TP4Pedido<\/code> que es un objeto de clase est\u00e1ndar que contiene datos de la orden MemberMouse, que puede utilizar en la construcci\u00f3n de la Descripci\u00f3n.&nbsp;<\/p>\n\n\n\n<p>Por ejemplo, para establecer este campo en&nbsp;<em>Pedido# 1234, Art\u00edculo: Miembro Digital&nbsp;<\/em>puede utilizar la siguiente funci\u00f3n en su plugin:<\/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;n\u00fameroDePedido;\n   if (isset($order-&gt;orderProducts) &amp;&amp; is_array($order-&gt;orderProducts))\n   {\n      $description .= \", Art\u00edculo: \" . array_pop($order-&gt;orderProducts)-&gt;description;\n   }\n   return $description;\n}, 1, 2);<\/code><\/pre>\n\n\n\n<p>Este filtro s\u00f3lo puede actuar sobre las refacturaciones, no sobre los pagos iniciales. Para ver todos los datos a los que es posible acceder en el filtro <code>1TP4Pedido<\/code> ver este objeto\u00a0<a href=\"https:\/\/storage.googleapis.com\/wpgcbucket\/wp\/2025\/01\/8bb79f95-oder-object-example-membermouse.txt\" target=\"_blank\" rel=\"noopener\" title=\"\">ejemplo de objeto de pedido<\/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 por defecto de MemberMouse<\/h2>\n\n\n\n<p>Se trata de filtros incluidos en el plugin que pueden anularse en el c\u00f3digo personalizado utilizando&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_filter\" target=\"_blank\">eliminar_filtro<\/a>&nbsp;para implementar sus propios 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 contrase\u00f1as<\/h3>\n\n\n\n<p><strong>mm_password_strength_validator<\/strong><\/p>\n\n\n\n<p>A partir de la versi\u00f3n 2.2.9, MemberMouse permite a\u00f1adir un filtro de validaci\u00f3n de contrase\u00f1as personalizado. Esto permite evaluar la contrase\u00f1a en funci\u00f3n de requisitos personalizados. De forma predeterminada, MemberMouse adjunta un filtro b\u00e1sico que comprueba que la contrase\u00f1a tenga al menos 8 caracteres. Los desarrolladores tienen la opci\u00f3n de a\u00f1adir un filtro adicional que se aplicar\u00e1 junto con el predeterminado, o eliminar el predeterminado y sustituirlo por un filtro personalizado.<\/p>\n\n\n\n<p>El siguiente ejemplo muestra los pasos para eliminar el filtro predeterminado y sustituirlo por un filtro personalizado. Esto se puede a\u00f1adir en el archivo function.php del tema, pero le recomendamos que si usted toma esta ruta, utilice un archivo&nbsp;<a href=\"https:\/\/codex.wordpress.org\/Child_Themes\" target=\"_blank\" rel=\"noreferrer noopener\">Tema infantil<\/a>&nbsp;para evitar que su c\u00f3digo se pierda en caso de actualizaci\u00f3n del tema.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/eliminar el filtro por defecto\nremove_filter('mm_password_strength_validator',array('MM_UserHooks', \"passwordStrengthValidator\"));\n\n\/\/a\u00f1ade un filtro que obligue a que las contrase\u00f1as tengan al menos 8 caracteres y contengan una letra may\u00fascula, un n\u00famero y un car\u00e1cter 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[] = \"La contrase\u00f1a debe contener un car\u00e1cter en may\u00fascula, un car\u00e1cter especial y un n\u00famero\";\n   }\n   return $passwordData;\n}, 10, 1);<\/code><\/pre>","protected":false},"excerpt":{"rendered":"<p>Los filtros son funciones a trav\u00e9s de las cuales WordPress pasa los datos, en ciertos puntos de la ejecuci\u00f3n, justo antes de tomar alguna acci\u00f3n con los datos. MemberMouse define su propio conjunto de filtros que...<\/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\/es\/wp-json\/wp\/v2\/ht-kb\/8073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/membermouse.com\/es\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/membermouse.com\/es\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/membermouse.com\/es\/wp-json\/wp\/v2\/users\/21411"}],"replies":[{"embeddable":true,"href":"https:\/\/membermouse.com\/es\/wp-json\/wp\/v2\/comments?post=8073"}],"version-history":[{"count":1,"href":"https:\/\/membermouse.com\/es\/wp-json\/wp\/v2\/ht-kb\/8073\/revisions"}],"predecessor-version":[{"id":20432,"href":"https:\/\/membermouse.com\/es\/wp-json\/wp\/v2\/ht-kb\/8073\/revisions\/20432"}],"wp:attachment":[{"href":"https:\/\/membermouse.com\/es\/wp-json\/wp\/v2\/media?parent=8073"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/membermouse.com\/es\/wp-json\/wp\/v2\/ht-kb-category?post=8073"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/membermouse.com\/es\/wp-json\/wp\/v2\/ht-kb-tag?post=8073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}