发布帖子时添加Java脚本

时间:2012-05-01 作者:Matoma16

我正在尝试在发布帖子时添加javascript,以便我的用户更容易注意到它,但我不知道该使用什么。我尝试了publish\\u post和save\\u post,但除非我将其置死,否则它不会起作用;在代码末尾。我一直在努力摆脱wordpress的核心代码,我真的不想因为这个问题不得不这么做。。。这是我的代码:

function run_when_post_published($post_ID){
    echo \'<script type="text/javascript">
        alert("essai");
    </script>\';
}
add_action(\'publish_slider\', \'run_when_post_published\');
谢谢你的帮助!

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

要在管理端将脚本排队,应使用admin_enqueue_scripts 钩在此回调中,我使用传递的$hook 论点

(可选)您可以检查帖子是否属于特定类型(如果仅针对帖子、页面或cpt)。

最后,我们将借用WordPress的内置通知系统。这将产生?message=1. 值1-10确定通知消息。(参见@Azizur\'s 回答此关系)。

在本例中,我们仅在message 变量已设置。

然后将脚本排队(我假设它位于:[theme-folder]/js/notice.js (或者将其指向插件文件夹)。然后我们用wp_localise_script. 这意味着message 将在javascript文件中作为全局对象的属性提供wpsePost (尤其是wpsePost.message). 然后你可以根据它的价值做任何事情。

add_action( \'admin_enqueue_scripts\', \'wpse50770_add_admin_scripts\', 10, 1 );
function wpse50770_add_admin_scripts( $hook ) {
    global $post;

    //Only need to enque script on the post.php page
    //Optional: restirct by post type
    if ( \'post.php\' == $hook  && \'post\' == $post->post_type && isset($_GET[\'message\']) ) {     
        $message_id = absint( $_GET[\'message\'] );
        wp_enqueue_script(
            \'wpse-notice\',
            get_template_directory_uri() . \'/js/notice.js\',
            array(\'jquery\')
        );
        $data = array( \'Message\' => $message_id);
        wp_localize_script( \'wpse-notice\', \'wpsePost\', $data );
    }
}
然后创建notice.js:

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

    if( wpsePost.Message == 6 ){
        alert(\'Post published\');

    }else if( wpsePost.Message == 1 ){
        alert(\'Post updated\');
    }

});

SO网友:Azizur Rahman

下面是一个示例,说明如何为自定义post\\u类型“book”创建自定义消息。请注意数组索引6“Book Published”。

//add filter to ensure the text Book, or book, is displayed when user updates a book 

function codex_book_updated_messages( $messages ) {
  global $post, $post_ID;

  $messages[\'book\'] = array(
    0 => \'\', // Unused. Messages start at index 1.
    1 => sprintf( __(\'Book updated. <a href="%s">View book</a>\'), esc_url( get_permalink($post_ID) ) ),
    2 => __(\'Custom field updated.\'),
    3 => __(\'Custom field deleted.\'),
    4 => __(\'Book updated.\'),
    /* translators: %s: date and time of the revision */
    5 => isset($_GET[\'revision\']) ? sprintf( __(\'Book restored to revision from %s\'), wp_post_revision_title( (int) $_GET[\'revision\'], false ) ) : false,
    6 => sprintf( __(\'Book published. <a href="%s">View book</a>\'), esc_url( get_permalink($post_ID) ) ),
    7 => __(\'Book saved.\'),
    8 => sprintf( __(\'Book submitted. <a target="_blank" href="%s">Preview book</a>\'), esc_url( add_query_arg( \'preview\', \'true\', get_permalink($post_ID) ) ) ),
    9 => sprintf( __(\'Book scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview book</a>\'),
      // translators: Publish box date format, see http://php.net/date
      date_i18n( __( \'M j, Y @ G:i\' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    10 => sprintf( __(\'Book draft updated. <a target="_blank" href="%s">Preview book</a>\'), esc_url( add_query_arg( \'preview\', \'true\', get_permalink($post_ID) ) ) ),
  );

  return $messages;
}
add_filter( \'post_updated_messages\', \'codex_book_updated_messages\' );
您可能可以使用相同的钩子来回显JavaScript消息,但我不建议这样做。

SO网友:Mazatec

添加过滤器,将javascript添加到您的管理头部

add_filter(\'admin_head\', \'my_custom_alert\')

然后,通过获取查询变量来添加自定义警报,wordpress会在保存页面时将该变量添加到查询字符串中

function my_custom_alert(){

echo "<script type=\'text/javascript\'>

jQuery(function($){

var $_GET = {};

document.location.search.replace(/\\??(?:([^=]+)=([^&]*)&?)/g, function () {
    function decode(s) {
        return decodeURIComponent(s.split(\\"+\\").join(\\" \\"));
    }

    $_GET[decode(arguments[1])] = decode(arguments[2]);
});

if($_GET[\'message\'] == \'1\'){

alert(\'this page has been updated\');

}


});

</script>";

}

结束