Toute la documentation se trouve ici
1. Intégrer les fichiers indispensables .js et .css
Dans votre thème, retrouver le fichier functions.php
Editer-le, repérer la fonction:
/**
* Enqueue scripts and styles.
*/
function test_scripts() {
wp_enqueue_style( 'test-style', get_stylesheet_uri() );
wp_enqueue_script( 'test-navigation', get_template_directory_uri() . '/js/navigation.js', array(), array(), _S_VERSION, true );
wp_enqueue_script( 'test-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), _S_VERSION, true );
if ( is_singular() comments_open() ; get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
}
add_action( 'wp_enqueue_scripts', 'test_scripts' );
Ajouter la ligne suivante avant celle qui charge votre css personnalisée
wp_enqueue_style( 'swiper-css', 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css' );
Ajouter la ligne suivante avant celle qui charge vos scripts
wp_enqueue_script( 'swiper-js', 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js', array(), _S_VERSION, true );
2. Préparer l’html requis
La structure requise est:
<!-- Slider main container -->
<div class="swiper">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
...
</div>
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<!-- If we need navigation buttons -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- If we need scrollbar -->
<div class="swiper-scrollbar"></div>
</div>
Éditez le fichier archive.php
Ajouter la structure dansla boucle « while »
<?php
/**
* The template for displaying archive pages
*
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/
*
* @package The_Way_Ball_Go_Theme
*/
get_header();
?>
<main id="primary" class="site-main">
<?php if ( have_posts() ) : ?>
<header class="page-header">
<?php
the_archive_title( '<h1 class="page-title">', '</h1>' );
the_archive_description( '<div class="archive-description">', '</div>' );
?>
</header><!-- .page-header -->
<?php
/* Start the Loop */
while ( have_posts() ) :
the_post();
/*
* Include the Post-Type-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Type name) and that will be used instead.
*/
get_template_part( 'template-parts/content-archive', get_post_type() );
endwhile;
the_posts_navigation();
else :
get_template_part( 'template-parts/content', 'none' );
endif;
?>
</main><!-- #main -->
<?php
get_sidebar();
get_footer();
Fichier modifié
<?php
/**
* The template for displaying archive pages
*
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/
*
* @package The_Way_Ball_Go_Theme
*/
get_header();
?>
<main id="primary" class="site-main">
<?php if ( have_posts() ) : ?>
<header class="page-header">
<?php
the_archive_title( '<h1 class="page-title">', '</h1>' );
the_archive_description( '<div class="archive-description">', '</div>' );
?>
</header><!-- .page-header -->
<!-- Slider main container -->
<div class="swiper">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<?php
/* Start the Loop */
while ( have_posts() ) :?>
<div class="swiper-slide">
<a href="<?php the_permalink(); ?>"
<?php the_post_thumbnail('thumbnail');?>
<?php the_title();?>
</a>
</div>
<? endwhile;?>
</div>
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<!-- If we need navigation buttons -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- If we need scrollbar -->
<div class="swiper-scrollbar"></div>
</div>
<?php the_posts_navigation();
else :
get_template_part( 'template-parts/content', 'none' );
endif;
?>
</main><!-- #main -->
<?php
get_sidebar();
get_footer();
/**
* Autoriser l'upload de tous types de format dans les médias
*/
add_filter('upload_mimes', 'wpm_myme_types', 1, 1);
function wpm_myme_types($mime_types){
$mime_types['svg'] = 'application/postscript'; //On autorise les .svg
$mime_types['glb'] = 'application/postscript'; //On autorise les .glb
return $mime_types;
}
3. Copier le script dans le header.php
Éditez le fichier header.php et copier ce script juste après le début su div id= »page »:
<div id="page" class="site">
ICI
<script type="importmap">
{
"imports": {
"three": "<?php bloginfo('template_directory'); ?>/threejs/node_modules/three/build/three.module.js"
}
}
</script>
4. Intégrer le script dans le contenu de vos articles
Éditez le fichier content.php (l’affichage du contenu d’un article) et copier ce script JUSTE AVANT la fermeture de l’article </article><!-- #post-<?php the_ID(); ?> -->
<script type="module">
import * as THREE from 'three';
import { OrbitControls } from '<?php bloginfo('template_directory'); ?>/threejs/node_modules/three/examples/jsm/controls/OrbitControls.js';
import { GLTFLoader } from '<?php bloginfo('template_directory'); ?>/threejs/node_modules/three/examples/jsm/loaders/GLTFLoader.js';
import { DRACOLoader } from '<?php bloginfo('template_directory'); ?>/threejs/node_modules/three/examples/jsm/loaders/DRACOLoader.js';
let container, containerBox;
let cameraPersp, cameraOrtho, currentCamera;
let orbit, scene, raycaster, renderer, control;
const clock = new THREE.Clock();
init();
render();
animate();
function init() {
container = document.getElementById( 'capture-<?php the_ID(); ?>' );
containerBox = container.getBoundingClientRect();
console.log(containerBox.width, containerBox.height);
renderer = new THREE.WebGLRenderer( { alpha: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( containerBox.width, containerBox.height );
// setClearColor(Couleur de fond de la 3D, transparance de 0 à 1)
renderer.setClearColor( 0xffffff, 0 ); // the default
container.appendChild( renderer.domElement );
const aspect = containerBox.width / containerBox.height;
// THREE.PerspectiveCamera(Champ de Vision FOV, ratio, près, loin)
// currentCamera.position.set(x,y,z) // position de la caméra
cameraPersp = new THREE.PerspectiveCamera( 33, aspect, 0.1, 1500 );
currentCamera = cameraPersp;
currentCamera.position.set( 1, 1, 0);
currentCamera.lookAt( 0, 0, 0 );
scene = new THREE.Scene();
// THREE.Fog(Couleur du brouillard, transparance de 0 à 1, distance)
scene.fog = new THREE.Fog( 0xffffff, 1, 1500 );
// THREE.HemisphereLight(Couleur du la lumière, Couleur de l'ombre)
const hemiLight = new THREE.HemisphereLight( 0xffffff, 0xffffff );
// hemiLight.position.set(x,y,z) // Position de la lumière en x,y,z
hemiLight.position.set( 0, 50, 0 );
scene.add( hemiLight );
const dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath( '<?php bloginfo('template_directory'); ?>/threejs/node_modules/three/examples/js/libs/draco/gltf/' );
const loader = new GLTFLoader();
loader.setDRACOLoader( dracoLoader );
loader.load( '<?php echo $captureUrl; ?>', function ( gltf ) {
const model = gltf.scene;
model.name = 'capture-<?php echo $captureId; ?>'
//position initiale
model.position.set( 0, 0, 0 );
//taille initiale
model.scale.set( 1, 1, 1 );
scene.add( model );
});
orbit = new OrbitControls( currentCamera, renderer.domElement );
orbit.update();
orbit.addEventListener( 'change', render );
window.addEventListener( 'resize', onWindowResize );
}
function onWindowResize() {
const aspect = containerBox.width / containerBox.height;
cameraPersp.aspect = aspect;
cameraPersp.updateProjectionMatrix();
renderer.setSize( containerBox.width, containerBox.height );
render();
}
function animate() {
requestAnimationFrame( animate );
renderer.render( scene, currentCamera );
}
function onPointerMove( event ) {
pointer.x = ( event.clientX / containerBox.width ) * 2 - 1;
pointer.y = - ( event.clientY / containerBox.height ) * 2 + 1;
}
function render() {
renderer.render( scene, currentCamera );
}
</script>
5. Intégrer la zone d’affichage de l’objet 3D
Éditez toujours le fichier content.php (l’affichage du contenu d’un article) et copier ce code JUSTE APRÈS l’ouverture de l’article <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<div id="capture-<?php the_ID(); ?>" class="canvas-box"></div>
6. Définir la taille du canvas
Éditez le fichier style-custom.css et définissez la hauteur du canvas
/*
** 3D
*/
.canvas-box {
height: 500px;
}
7. Créer un champ personnalisé « url_3d »
Dans l’éditeur wordpress, dans un article, créez le champ personnalisé « url_3d ».

8. Récupérer la valeur du champ « url_3d » dans le script
Éditez le fichier content.php (l’affichage du contenu d’un article) et copier ce code DANS le php en haut de l’article de l’article <?php
/**
* Template part for displaying posts
*
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/
*
* @package Capture3d
*/
ICI
?>
<?php /** * Template part for displaying posts * * @link https://developer.wordpress.org/themes/basics/template-hierarchy/ * * @package The_Way_Ball_Go_Theme */ $captureUrl = get_post_meta($post->ID, 'url_3d', true); $captureId = 'capture3d-'.get_the_ID(); ?>;
8. Récupérer et renseigner le champ personnalisé pour chacun des articles
Dans la bibliothèque de média: uplaoder votre fichier 3D
Séléctionnez le et copier l’url du fichier

Copiez cet url dans le champ « url_3d »

Enregistrez et prévisualisez!
