Conditional add_filter?

时间:2010-11-19 作者:Scott B

我需要从函数中应用add\\u筛选器。php,但前提是用户已打开媒体上载。php来自我的自定义函数。打开媒体上载时是否可以发送变量。在执行add\\u filter之前,我可以测试php是否存在?

示例:这是我的代码,我在其中从自定义图标打开媒体上载程序。。。

//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\');
在上面的代码中,是否可以设置一个全局变量或一些标记,以便执行add\\u过滤器代码?

 if(isset($myMarker)){
  add_filter("attachment_fields_to_save", "rt_image_attachment_fields_to_save", null , 2);
  }

2 个回复
最合适的回答,由SO网友:EAMann 整理而成

根据代码外观,单击#customAttachments 字段正在触发调用tb_show() 方法加载media-upload.php 已设置某些GET参数的文件(post_id, type, TB_iframe). 您可以做的是添加另一个GET参数,并检查是否设置了该参数以执行add_filter() 密码

因此:

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

tb_show(\'\', \'media-upload.php?post_id=\'+post_id+\'&amp;type=image&amp;TB_iframe=true&amp;myMarker=true\');
然后您可以使用:

if(isset($_GET[\'myMarker\'])){
    add_filter("attachment_fields_to_save", "rt_image_attachment_fields_to_save", null , 2);
}

SO网友:hakre

即使这个问题已经有了公认的答案,我也会尝试对这个问题给出更广泛的答案。

如果你想the name of the page the user has requested, 有一个全局变量存储它:$pagenow. 这在管理区域和网站(frontpage)都有效。始终设置此全局变量(当wp-includes/vars.php 包括get,由wp-settings.php, 因此,当您的wp配置。php文件被加载(精确地说是在文件末尾)。

所以如果文件media-upload.php 已请求,$pagenow 将设置为"media-upload.php".

因此,您可以简单地检查它:

if (\'media-upload.php\' === $pagenow ) { ... do your stuff ... }
要进一步改进这一点,请考虑仅在确实需要时注册过滤器。这有助于保持实际的过滤器功能“在主题上”。这样就减少了复杂性,这总是好的。您尚未发布您的wpe_customImages() 函数,但请考虑以下内容。我将其作为一个类编写,但它也只适用于全局函数:

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();
此存根在init挂钩上注册第二个函数。当wordpress“准备好使用”时调用init钩子,这意味着您可以使用wordpress API提供的大部分内容。

里面init() 功能,注册的先决条件customImages() 函数在实际注册之前进行检查。这样不仅可以避免从钩子回调中删除决策,还可以在其他地方重用回调函数。

结束

相关推荐