Bind to WPSetAsThumbnail

时间:2011-12-05 作者:helgatheviking

有没有办法将一些额外的脚本绑定到wpsetashumbnail函数?该函数会自动将图像插入帖子的元框中,但如果我想对其执行其他操作,该怎么办?在通过ajax设置缩略图后,我是否可以将其设置为警报(“bacon”)?

我正在尝试从快速编辑屏幕中设置缩略图,虽然我可以启动媒体编辑器,“设置为缩略图”确实有效,但我无法在新图像b/c中淡出。我不知道如何锁定操作并获取传递回来的HTML。

作为旁白。ajaxComplete似乎在单击“删除特色图像”链接时启动,但在单击“设置为特色图像”链接时不会启动。后者是在不是原始DOM的一部分的thickbox中发生的吗?

///*编辑*///

我尝试更准确地复制html。这有一个问题,即有多个具有相同div ID的项。。。而且在新图像中也不会褪色。图像是通过ajax保存的,刷新时会显示新的缩略图。

“我的帖子”列中的html标记:

<div id="postimagediv"><div class="inside"><p class="hide-if-no-js"><a title="Set featured image" href="\'.admin_url( \'media-upload.php?post_id=\'.$post_id.\'&amp;type=image&amp;TB_iframe=1&amp;width=640&amp;height=397\')" id="set-post-thumbnail" class="thickbox">\'.get_the_post_thumbnail($post_id, array(35,35))
我仍然希望找到一些方法来锁定jquery事件,以便我可以编写自己的脚本,但我开始相信这是不可能的。我喜欢使用ajaxComplete的想法,但我无法根据media thickbox中发生的操作来运行它。

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

最后,我发现我无法绑定或触发此操作。我必须用javascript和ajax回调复制它,如下所示。

Javascript:

function PrismSetAsThumbnail(id, nonce){  
    var $link = jQuery(\'a#wp-post-thumbnail-\' + id);

    $link.text( setPostThumbnailL10n.saving );
    jQuery.post(ajaxurl, {
        action:"prism_set_thumbnail", post_id: post_id, thumbnail_id: id, _ajax_nonce: nonce, cookie: encodeURIComponent(document.cookie)
    }, function(str){
        var win = window.dialogArguments || opener || parent || top;  
        $link.text( setPostThumbnailL10n.setThumbnail );
        if ( str == \'0\' ) {
            alert( setPostThumbnailL10n.error );
        } else {
            jQuery(\'a.wp-post-thumbnail\').show();
            $link.text( setPostThumbnailL10n.done );
            $link.fadeOut( 2000 );

            //display new thumbnail in the columns w/o refresh
            jQuery(\'#post-\'+win.post_id + \' .postimagediv a\', win.parent.document).html(str).fadeIn();

            //if successful close thickbox
            win.parent.tb_remove();
        } 
    }
    );
}

Ajax Callback:

  //add callback for custom version of set thumbnail
  add_action(\'wp_ajax_prism_set_thumbnail\', \'kia_set_thumbnail_callback\');

  // the function name must match the above passed name
  function kia_set_thumbnail_callback(){

    $post_ID = intval( $_POST[\'post_id\'] );
    if ( !current_user_can( \'edit_post\', $post_ID ) )
        die( \'-1\' );
    $thumbnail_id = intval( $_POST[\'thumbnail_id\'] );

    check_ajax_referer( "set_post_thumbnail-$post_ID" );

    if ( $thumbnail_id == \'-1\' ) {
        if ( delete_post_thumbnail( $post_ID ) )
            die( _wp_post_thumbnail_html() );
        else
            die( \'0\' );
    }

    if ( set_post_thumbnail( $post_ID, $thumbnail_id ) )
        $msg = get_the_post_thumbnail( $post_ID, array(35,35));
        die($msg);
    die( \'0\' );
}

SO网友:onetrickpony

是的,关于你的第二个问题:)

从我看到的set-post-thumbnail.dev.js, 您似乎只需要添加一个链接/锚定wp-post-thumbnail 在快速编辑屏幕中对其进行分类。

当ajax请求完成时,该链接中的图像将褪色。

对于在ajax完成后发出“bacon”警报,这可能有用:

$(\'a.wp-post-thumbnail\').ajaxComplete(function() {
  alert(\'bacon\');
});

TheajaxComplete 方法:

jQuery(document).ready(function($){

  $(\'a.wp-post-thumbnail\').ajaxComplete(function(event, XMLHttpRequest, ajaxOptions) {

    // the image should be here
    // use something like $(XMLHttpRequest.responseText).find(\'img\')
    console.log(XMLHttpRequest.responseText);

  });

});
您可能需要检查这是哪个ajax请求,请执行控制台。记录所有参数并搜索包含ajax操作名称的属性,该名称应为“set\\u post\\u缩略图”或其他内容。。。

SO网友:brasofilo

回答这个问题:

[…]如果我想用它做些别的事情呢?在通过ajax设置缩略图后,我是否可以将其设置为警报(“bacon”)?

add_action( \'wp_ajax_set-post-thumbnail\', \'wpse_35588_ajax_set_post_thumbnail\' , 0 );

function wpse_35588_ajax_set_post_thumbnail() {
    $post_ID = intval( $_POST[\'post_id\'] );
    if ( !current_user_can( \'edit_post\', $post_ID ) )
        wp_die( -1 );
    $thumbnail_id = intval( $_POST[\'thumbnail_id\'] );
    check_ajax_referer( "set_post_thumbnail-$post_ID" );

    if ( $thumbnail_id == \'-1\' ) {
        if ( delete_post_thumbnail( $post_ID ) )
            wp_die( _wp_post_thumbnail_html( null, $post_ID ) );
        else
            wp_die( 0 );
    }

    ?>
        <script type="text/javascript">alert(\'bacon!\');</script>
    <?php

    if ( set_post_thumbnail( $post_ID, $thumbnail_id ) )
        wp_die( _wp_post_thumbnail_html( $thumbnail_id, $post_ID ) );

    wp_die( 0 );
}
如果我们这样做,而不是培根,我们会关闭ThickBox窗口:)

jQuery(\'#TB_closeWindowButton\').click();
检查此问题(&e);A有关详细信息:
How to Reload the Dashboard After Clicking Update in Quick-Edit?

结束

相关推荐

使用jQuery表单插件的前端提交表单

也许有人能帮我解决一个小问题。我正在尝试使用这个:http://jquery.malsup.com/form/ 为Wordpress创建提交表单。我已经在一个常规的网站(不是WP)上测试过了,它很有效。我不明白为什么它在wp中不起作用。这是我的表格。我已经创建了两个页面模板,一个是表单,另一个是wp\\u insert\\u post code。如果我将表单action更改为action=”http://mysite.com/page.php“它可以工作,如果我将它指向一个页面模板,它就不能工作。我需要它