如何列出媒体集中所有音频文件的URL?

时间:2012-02-26 作者:marctain

我的主题中有一个音乐播放器,它从一个javascript文件生成播放列表,如下所示

var myPlaylist = [
     {
        mp3:\'track url goes here\',
        title:\'title here\',
        artist:\'artist\',
    }
    {
        mp3:\'track url goes here\',
        title:\'title here\',
        artist:\'artist\',
    } 
etc...

];
我如何查询媒体库,以便它能够回显曲目url、标题文本以及可能存在的音频参数,如艺术家值的“描述”?

我对php有足够的了解,可以在查询它们时将它们放在正确的位置,我只需要知道如何从wp数据库中提取它们!

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

欢迎来到WPSE marctain!

Edit对于使用guid有一些批评,但没有一位评论员能够将这个答案编辑成更好的答案,所以我会这样做。

是的,从长远来看,使用guid是一个坏主意,我知道这一点,我应该指出,我没有,这是一个错误。对不起,这是一个又快又脏的回答。

在我最初的回答中,我会在任何情况下使用wp\\u get\\u attachment\\u url来获得正确的url。这会添加一个额外的查询,但使用起来很安全。

$args = array
    (
        \'post_type\' => \'attachment\',
        \'post_mime_type\' => \'audio\',
        \'numberposts\' => -1
    );
 $audiofiles = get_posts($args);

 foreach ($audiofiles as $file)
 {
      $url = wp_get_attachment_url($file->ID);
      echo $url; // url
      echo file->post_title; //title
      echo file->post_content; // description
 }

SO网友:kaiser

更进一步:使用localize从php和js中访问进行处理access & modify 您的跟踪列表直接从php文件中获取。这个additional benefit 从这个解决方案中,您现在可以使用jQuery.ajax functions 1)

 function load_init_tracks()
 {
      $args = array
      (
        \'post_type\' => \'attachment\',
        \'post_mime_type\' => \'audio\',
        \'numberposts\' => -1
      );
      $audiofiles = get_posts($args);

      $result = array();
       foreach ( $audiofiles as $file )
      {
           $result[\'mp3\'] = wp_get_attachment_url( $file->ID ); // url
           $result[\'title\'] = $file->post_title //title
           $result[\'artist\'] = $file->post_content // description
      }
      // $result now contains all tracks as multi dimensional array
      return $result;
 }

 function load_track_scripts()
 {
     // register your script, enqueue it and then add localize the result to access it inside your js file:
     wp_register_script( \'mp3tracks\', get_stylesheet_directory().\'js/your_js_filename.js\', array( \'jquery\' ), 0, true );
     wp_enqueue_script( \'mp3tracks\' );
     wp_localize_script( 
         \'mp3tracks\',
     \'track_list_object\',
     array( 
         \'ajaxurl\'  => admin_url( \'admin-ajax.php\' )
        ,\'nonce\'    => wp_create_nonce( \'mp3_nonce_value\' ) 
        ,\'action\'   => "mp3tracks"
             ,\'tracks\'  => load_init_tracks()
  );
     // Hook it to some ajax callback (for public and logged in users):
     add_action( \'wp_ajax_nopriv_mp3tracks\', \'mp3tracks_cb\' );
    add_action( \'wp_ajax_nopriv_mp3tracks\', \'mp3tracks_cb\' );
 }
 add_action( \'init\', \'load_track_scripts\' );

 // Now call the function that processes the 
 function mp3tracks_cb()
 {
      check_ajax_referer( \'mp3_nonce_value\', \'nonce\' );

      // This is what the data you can process with the ajax response
      $data = $_POST;
      # @todo validate your input: esc_attr(), strip_tags(), etc.

    $response = json_encode( array(
         \'tracks\' => $data
    ) );

    header( "Content-Type: application/json" );
    echo $response;
    exit;
 }
然后,您可以从访问javascript文件中的结果track_list_object.data. 这↑ 还允许您在函数中通过ajax处理内容。

只需在以下过程中处理您的东西:

// Inside theme_root/js/your_js_filename.js
jQuery( document ).on(
    "pageinit"
    ,function( e, data )
    {
        // do stuff... take a look at your "console"-tab in the chrome/IE dev bar or with FF Firebug
        console.log( track_list_object );
    }
);
您不必这样做,但它很简单,允许您在需要动态修改播放列表时使用ajax

结束

相关推荐

Error Using Audio plugin

我已经安装了音频插件,以创建Xbrowser播放列表,但出现以下错误jPlayer 2.0.0 : id=\'jquery_jplayer_1\' : Error!到目前为止,我所做的只是创建一个新帖子,使用wordpress音频上传器将音频上传到帖子,使用以下短代码将播放列表添加到帖子,然后发布。[audio layout=\"list\"] 也尝试过[audio]但产生了同样的错误这些文件是。mp3格式,可以在其他播放器中播放。如果相关,该站点存储在本地。