Bonjour,
Je vais supposer que tu crées un "custom_post_type" minimal ayant pour nom "my_post".
Je vais également supposer que c'est sous forme d'un plugin.
Il faut donc créer un fichier qu'on va appeler par exemple my_post.php vide et qu'on met dans le dossier wp-content/plugins de wordpress.
Je vais ensuite supposer que tu actives le plugin via l'interface d'administration de wordpress.
Dans my_post.php, on peut mettre le code suivant :
// On cree un custom post type minimal
function create_my_post_type() {
$args = array(
'label' => 'My post',
'public' => true
);
register_post_type( 'my_post', $args );
}
add_action( 'init', 'create_my_post_type' );
// On lui ajoute une metabox
function youtube_video_metabox_callback($post)
{
wp_nonce_field( 'my_post_nonce', 'my_post_nonce' );
$value = get_post_meta( $post->ID, '_my_post_video_ref', true );
echo '<label>Url de la video: <input type="text" id="my_post_video_ref" name="my_post_video_ref" value="'.esc_attr( $value ).'"></label>';
}
function youtube_video_meta_box() {
add_meta_box('youtube_video_metabox', "youtube video metabox", "youtube_video_metabox_callback","my_post");
}
add_action( 'add_meta_boxes', 'youtube_video_meta_box' );
// Sauvegarde des donnees de la metabox dans la base a la fin de l'edition d'un my_post
function save_my_post_meta_box_data( $post_id ) {
// On effectue quelques verifications avant de sauvegarder les donnees de la metabox
if ( ! isset( $_POST['my_post_nonce'] ) ) return;
if ( ! wp_verify_nonce( $_POST['my_post_nonce'], 'my_post_nonce' ) ) return;
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) {
if ( ! current_user_can( 'edit_page', $post_id ) ) return;
}
else {
if ( ! current_user_can( 'edit_post', $post_id ) ) return;
}
if ( ! isset( $_POST['my_post_video_ref'] ) ) return;
// On est pret pour sauvegarder les donnees de la metabox
$my_data = sanitize_text_field( $_POST['my_post_video_ref'] );
update_post_meta( $post_id, '_my_post_video_ref', $my_data );
}
add_action( 'save_post', 'save_my_post_meta_box_data' );
// Affichage de my_post pour un internaute lambda
function my_post_before_post( $content ) {
global $post;
// On recherche l'url de la video du post dans la base
$url = esc_attr( get_post_meta( $post->ID, '_my_post_video_ref', true ) );
if(!$url) return;
// On parse l'url pour extraire l'id youtude de la video
parse_str( parse_url( $url, PHP_URL_QUERY ), $vs );
$ref = $vs['v'];
if(!$ref) return;
// On construit l'iframe contenant la video
$youtube_insert='<iframe width="560" height="315" src="https://www.youtube.com/embed/'.$ref.'" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>';
// On l'insère en haut du contenu du post juste après le titre
return $youtube_insert . $content;
}
add_filter( 'the_content', 'my_post_before_post' );
Ce code crée le custom post type 'my_post', y ajoute une metabox qui est un input et dans lequel on devra mettre l'url d'une video youtube (comme par exemple
https://www.youtube.com/watch?v=xyz ), fournit la fonction de sauvegarde du contenu de la metabox dans la base, et fournit la fonction d'affichage de la vidéo dans le post.
La liste des opérations à effectuer est la suivante :
- Un admin crée my_post.php avec le code ci-dessus et le met dans wp-content/plugins
- Cet admin se connecte à l'interface d'administration de wordpress et active le plugin "my_post"
- À ce stade, "my_post" doit apparaitre dans le menu d'administration de wordpress à gauche de l'écran
- Un rédacteur de post se connecte à l'interface d'édition des posts de wordpress
- Ce rédacteur édite un post de type 'my_post'
- Il entre l'url d'une video youtube du genre
https://www.youtube.com/watch?v=xyz dans le champ prévu à cet effet qui doit se trouver en bas de page
- Il sauvegarde le post
- À ce stade, le site est prêt pour recevoir des visiteurs
- Un internaute visite le site
- Il surfe afin de visualiser le post précédemment édité par le rédacteur
- Il devrait voir la vidéo juste en dessous du titre du post.
Amicalement,
Modifié par parsimonhi (28 Feb 2023 - 20:27)