从音频文件中获取WordPress播放列表中的播放次数时遇到问题

时间:2015-05-19 作者:webtesa

我已经在这里看到过类似的帖子:How to get the number of times an audio file has been played

但是@bonger提供的代码对我不起作用。我上传了新功能。php中包含以下代码,它不会在媒体编辑页面的比特率下显示播放计数。

在播放列表中计算音频文件的播放次数会很好。任何帮助都将不胜感激。

在Dreamweaver的新PHP文档中添加以下代码,第2、24、59和62行出现语法错误。

    <?php
add_action( \'wp_footer\', function () {
    ?>
    <script>
    jQuery(document).ready(function() {
        (function ($) {
            var srcs = []; // Array of sources already sent to cut down on posts to server.
            $(\'audio.wp-audio-shortcode, .wp-audio-playlist audio\').on(\'play\', function (event) {
                // this.src should be the url (guid) of the audio file
                if (this.src && $.inArray(this.src, srcs) === -1) {
                    srcs.push(this.src);
                    $.post( \'<?php echo admin_url( \'admin-ajax.php\' ); ?>\', {
                            action: \'wpse168584_audio_stats\',
                            guid: this.src.replace(/\\?.+$/, \'\'), // Remove any query vars.
                            nonce: \'<?php echo wp_create_nonce( \'wpse168584_audio_stats_\' ); ?>\'
                        }, null, \'json\'
                    );
                }
            });
        })(jQuery);
    });
    </script>
    <?php
} );
function wpse168584_audio_stats() {
    $ret = array( \'error\' => false );

    if ( ! check_ajax_referer( \'wpse168584_audio_stats_\', \'nonce\', false /*die*/ ) ) {
        $ret[\'error\'] = __( \'Permission error\', \'wpfm\' );
    } else {
        if ( ! isset( $_REQUEST[\'guid\'] ) || ! ( $guid = $_REQUEST[\'guid\'] ) ) {
            $ret[\'error\'] = __( \'Params error\', \'wpfm\' );
        } else {
            global $wpdb;
            $sql = $wpdb->prepare( \'SELECT ID FROM \' . $wpdb->posts . \' WHERE guid = %s LIMIT 1\', $guid );
            if ( $post_id = $wpdb->get_var( $sql ) ) {
                // Use hex format to save space, 8 bytes for IPv4, 32 for IPv6.
                $ip = bin2hex( inet_pton( preg_replace( \'/[^0-9a-fA-F:., ]/\', \'\', $_SERVER[\'REMOTE_ADDR\'] ) ) );
                if ( ! ( $meta = get_post_meta( $post_id, \'_wp_attachment_metadata\', true ) )
                || ! isset( $meta[\'plays_ips\'] )
                || ! in_array( $ip, $plays_ips = explode( \';\', $meta[\'plays_ips\'] ) ) ) {
                    $plays_ips[] = $ip;
                    // If data getting too big, drop off oldest ip (FIFO).
                    if ( strlen( $meta[\'play_ids\'] ) > 1000 ) array_shift( $plays_ips );
                    // Save as string to save space.
                    $meta[\'plays_ips\'] = implode( \';\', $plays_ips );
                    $meta[\'plays\'] = isset( $meta[\'plays\'] ) ? $meta[\'plays\'] + 1 : 1;
                    update_post_meta( $post_id, \'_wp_attachment_metadata\', $meta );
                }
            }
        }
    }

    wp_send_json( $ret );
}
add_action( \'wp_ajax_nopriv_wpse168584_audio_stats\', \'wpse168584_audio_stats\' );
add_action( \'wp_ajax_wpse168584_audio_stats\', \'wpse168584_audio_stats\' );

add_filter( \'media_submitbox_misc_sections\', function ( $arr ) {
    $arr[\'plays\'] = __( \'Play Count:\' );
    return $arr;
} );
?>

2 个回复
SO网友:fuxia

代码至少需要PHP 5.3。Dreamweaver公司does not support that PHP version, 因此,它将未知、更新的语法报告为错误。

WordPressrequires just version 5.2.4, but it recommends at least 5.4. 我的建议是在服务器上始终使用最新的稳定版本,目前是PHP 5.6。您的开发设置应该使用与服务器完全相同的版本,以避免可移植性问题
上载文件时只需<?php echo PHP_VERSION; ?> 并在浏览器中查看以查看版本。

然后你必须找到一个更好的编辑器。您有多种选择:

切换到新的基于订阅的Dreamweaver版本

  • PHPStorm. 如今,大多数专业开发人员都在使用它。它不是免费的,但它具有许多功能,包括WordPress支持和选择特定于项目的PHP版本的选项Eclipse 或Netbeans.Sublime 或Notepad++. 两者都需要一系列插件来让您的工作更舒适
  • 如果服务器出现问题,请启用debug mode, 和安装Query Monitor. 这将告诉您错误的含义以及来源。

    SO网友:webtesa

    感谢@Czersplace和@toshco帮助我进行故障排除,找出问题所在。

    上载新功能后。包含播放计数代码的php文件,您不会立即在比特率下的保存框中看到播放计数,如果播放计数为0,则根本不会显示。代码可以工作,但仅在文件播放至少1次后才会显示,如果在上载代码之前播放过1次,但在代码进入您的函数后播放了至少1次,则不会显示。php文件。

    结束

    相关推荐

    Extending the Audio Shortcode

    目前,音频快捷码只允许四个属性,src, loop, autoplay 和preload. 然而,当你上传一个音频文件时,它附带了非常有用的元数据,如专辑的艺术、艺术家、年份等,如果它也能显示出来,那就太好了。我一直在寻找一种扩展音频短代码的方法,以便元数据也可以包含在短代码中。到目前为止,我偶然发现shortcode_atts_{$shortcode} 它可以用来过滤现有的短代码,但显然只能过滤现有属性,不能添加新属性。顺便说一句,我并不想创建一个新的短代码,而是要添加或扩展现有的短代码,这样用户就不必