J'ai un lecteur de musique dans mon thème qui génère sa liste de lecture à partir d'un fichier javascript ressemblant à ceci
var myPlaylist = [
{
mp3:'track url goes here',
title:'title here',
artist:'artist',
}
{
mp3:'track url goes here',
title:'title here',
artist:'artist',
}
etc...
];
Comment puis-je interroger la médiathèque pour qu’elle renvoie l’URL de la piste, le texte du titre et peut-être un paramètre audio existant tel que "description" pour la valeur artiste?
J'en connais assez sur php pour les mettre aux bons endroits une fois qu'ils ont été interrogés, j'ai juste besoin de savoir comment les extraire de la base de données wp!
Bienvenue sur WPSE marctain!
Edit Il y a quelques critiques sur l'utilisation du guid, mais aucun des commentateurs n'a réussi à modifier cette réponse en une meilleure, alors je vais le faire.
Oui, utiliser guid est une mauvaise idée à long terme, je le savais et j'aurais dû le préciser, je ne l'ai pas fait, c'était une erreur. Je suis désolé, c'était une réponse rapide et sale.
Dans ma réponse initiale, j'aurais utilisé wp_get_attachment_url pour obtenir l'URL correcte dans tous les cas. Cela ajoute une requête supplémentaire, mais son utilisation est sûre.
$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
}
Voici un exemple qui vous permet de accéder et modifier votre liste de pistes directement à partir de vos fichiers php. Le avantage supplémentaire de cette solution est que vous pouvez maintenant modifier des éléments à l’aide de fonctions jQuery.ajax 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;
}
Vous pouvez ensuite accéder à votre résultat dans votre fichier javascript à partir de track_list_object.data
. Cette ↑ vous permet également de traiter des commandes via ajax dans la fonction.
Traitez simplement vos fichiers lors de quelque chose comme:
// 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 );
}
);
1) Vous n’avez pas à le faire, mais c’est facile et vous permet d’utiliser ajax si vous souhaitez modifier vos listes de lecture à la volée.