Add_filter condicional?

2

Necesito aplicar un add_filter desde mi functions.php pero solo si el usuario ha abierto media-upload.php desde mi función personalizada. ¿Es posible enviar una variable al abrir media-upload.php que luego podría probar la existencia antes de ejecutar add_filter?

Ejemplo: Aquí está mi código en el que estoy abriendo el cargador de medios desde mi icono personalizado ...

//Custom upload launcher for custom attachments
function wpe_customImages($initcontext)
{
    global $post;
    ?>
<script type="text/javascript">
jQuery(document).ready(function() {
    var fileInput = '';

    jQuery('#customAttachments').click(function() {
        fileInput = jQuery(this).prev('input');
        formfield = jQuery('#upload_image').attr('name');
        post_id = jQuery('#post_ID').val();
        tb_show('', 'media-upload.php?post_id='+post_id+'&amp;type=image&amp;TB_iframe=true');
        return false;
    });

});
</script>
    <?php
    return $initcontext. 
    '<input type="hidden" id="post_ID" value="'. $post->ID .'" />
    Product Images:<a id="customAttachments" href="javascript:;" 
    class="mceButton mceButtonEnabled" onmousedown="return false;" 
    onclick="return false;">
    <img src="'.get_bloginfo('template_directory') .'/img/upload-icon.gif"" /></a>';
}
add_filter('media_buttons_context', 'wpe_customImages');

Dentro del código anterior, ¿sería posible establecer una variable global o algún marcador que pueda probar para ejecutar mi código add_filter?

 if(isset($myMarker)){
  add_filter("attachment_fields_to_save", "rt_image_attachment_fields_to_save", null , 2);
  }
    
pregunta Scott B 19.11.2010 - 18:42

2 respuestas

3

Desde el aspecto de su código, al hacer clic en el campo #customAttachments está activando un evento jQuery que llama a un método tb_show() para cargar el archivo media-upload.php con ciertos parámetros GET ya establecidos ( post_id , type , TB_iframe ). Lo que podría hacer es agregar otro parámetro GET y verificar si está configurado para ejecutar su código add_filter() .

Entonces:

tb_show('', 'media-upload.php?post_id='+post_id+'&amp;type=image&amp;TB_iframe=true');

Se convierte en:

tb_show('', 'media-upload.php?post_id='+post_id+'&amp;type=image&amp;TB_iframe=true&amp;myMarker=true');

Entonces puedes usar:

if(isset($_GET['myMarker'])){
    add_filter("attachment_fields_to_save", "rt_image_attachment_fields_to_save", null , 2);
}
    
respondido por el EAMann 19.11.2010 - 18:59
3

Incluso esta pregunta ya tiene una respuesta aceptada, intentaré dar una respuesta más amplia al problema.

Si desea obtener el nombre de la página que el usuario ha solicitado , hay una variable global que la almacena: $pagenow . Esto funciona tanto en el área de administración como en el sitio web (página principal). Esta variable global siempre se establece (se inicializa cuando se incluye wp-includes/vars.php get, lo cual se realiza mediante wp-settings.php , por lo que directamente cuando se carga el archivo wp-config.php (al final de, para ser precisos)).

Entonces, si se solicita el archivo media-upload.php , $pagenow se establecería en "media-upload.php" .

Así que ya puedes verificarlo:

if ('media-upload.php' === $pagenow ) { ... do your stuff ... }

Para mejorar esto aún más, piense en solo registrar su filtro cuando realmente lo necesite. Esto ayuda a mantener la función de filtro real "sobre el tema". Y por eso se reduce la complejidad que siempre es buena. No ha publicado el código de su función wpe_customImages() , pero considere lo siguiente. Escribí esto como una clase, pero también funciona con funciones globales:

class ConditionalFilterPlugin {
    public function __construct() {
        add_filter('init', array($this, 'init'));
    }
    public function init() {
        if ('media-upload.php' === $GLOBALS['pagenow'])
            add_filter('media_buttons_context', array($this, 'customImages'))
            ;
    }
    public function customImages() {
        // your hook function's code that does not need a conditional any longer.
    }
}
$ConditionalFilterPlugin = new ConditionalFilterPlugin();

Este apéndice registra una segunda función en el gancho de inicio. El gancho de inicio se llama cuando wordpress está "listo para usar", lo que significa que puede usar la mayoría de lo que ofrece la API de wordpress.

Dentro de la función init() , los requisitos previos para registrar la función customImages() se verifican antes de registrarlo realmente. Esto le ahorra no solo eliminar la decisión de su devolución de llamada de enlace, sino que también le permite reutilizar la función de devolución de llamada en otros lugares.

    
respondido por el hakre 19.11.2010 - 20:09

Lea otras preguntas en las etiquetas