mbcreation

WooCommerce Video Tab on product page

Aug 22nd, 2017
1,394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.16 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  *
  5.  *   Plugin Name: My WooCommerce Video Tab
  6.  *
  7.  */
  8.  
  9.  
  10. if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
  11.  
  12.  
  13. /**
  14.  * My_WooCommerce_Video_Tab
  15.  *
  16.  * @since 1.0
  17.  */
  18.  
  19. if ( ! class_exists( 'My_WooCommerce_Video_Tab' ) ) {
  20.  
  21. class My_WooCommerce_Video_Tab {
  22.  
  23.         function __construct(){
  24.  
  25.             add_action('plugins_loaded', array(&$this, 'hooks') );
  26.             register_activation_hook( __FILE__ , array(&$this , 'install' ) );
  27.  
  28.         }
  29.  
  30.         public function hooks(){
  31.  
  32.             // Arrêter l'execution du plugin si WooCommerce n'exite plus.
  33.            
  34.             if( !class_exists( 'Woocommerce' ) )
  35.             return;
  36.  
  37.  
  38.             // WooCommerce étant disponible il est temps de hooker !
  39.  
  40.             add_filter( 'woocommerce_product_tabs' , array(&$this ,'video_tabs') );
  41.             add_filter( 'woocommerce_product_data_tabs' , array(&$this, 'video_data_tabs') );
  42.  
  43.             add_action( 'woocommerce_product_data_panels', array(&$this, 'video_data_panels') );
  44.             add_action( 'woocommerce_process_product_meta', array(&$this, 'process_video_meta') );
  45.  
  46.         }
  47.  
  48.         public function install(){
  49.  
  50.             // Ne pas installer le plugin si WooCommerce n'est pas installé.
  51.  
  52.             if( !class_exists( 'Woocommerce' ) )
  53.             wp_die('WooCommerce extension not found !');
  54.  
  55.         }
  56.  
  57.  
  58.          /**
  59.          * video_tabs
  60.          *
  61.          * Modifie le tableau des onglets par défaut de la fiche produit.
  62.          * L'ajout d'un onglet se fait par l'ajout d'un tableau comprenant son nom (label), sa position (priority)
  63.          * Et son callback (la fonction à appeler)
  64.          * @version 1.0
  65.          * @since 1.0
  66.          *
  67.          * @access public
  68.          * @return array $tabs
  69.          */
  70.  
  71.         public function video_tabs($tabs){
  72.  
  73.             global $post;
  74.            
  75.             $youtube_url = get_post_meta( $post->ID, '_product_youtube_url' , true );
  76.  
  77.             // Ajout d'un onglet "vidéo" à notre fiche produit seulement si nécessaire.
  78.  
  79.             if(!empty($youtube_url) && false !==  $GLOBALS['youtube_embed'] = wp_oembed_get( $youtube_url )  ) :
  80.  
  81.                 $tabs['video'] = array(
  82.  
  83.                     'title' => "Vidéo Produit",
  84.                     'priority' => 30,
  85.                     'callback' => array( __CLASS__ , 'display_video' )
  86.  
  87.                 );
  88.  
  89.             endif;
  90.  
  91.             return $tabs;
  92.         }
  93.  
  94.          /**
  95.          * display_video
  96.          *
  97.          * Affiche la vidéo du produit.
  98.          * @version 1.0
  99.          * @since 1.0
  100.          *
  101.          * @access static
  102.          * @return Youtube Embed
  103.          */
  104.  
  105.         static public function display_video(){
  106.  
  107.             echo $GLOBALS['youtube_embed'];
  108.        
  109.         }
  110.  
  111.          /**
  112.          * video_data_tabs
  113.          *
  114.          * Affiche un nouvel onglet dans le back-office de la fiche produit
  115.          *
  116.          * @version 1.0
  117.          * @since 1.0
  118.          *
  119.          * @access public
  120.          * @return $datatabs (la liste de tous les onglets disponibles)
  121.          */
  122.  
  123.         public function video_data_tabs($datatabs){
  124.  
  125.  
  126.             $datatabs['video_data_tabs'] = array(
  127.                
  128.                 'label'  => 'Vidéo produit',
  129.                 'target' => 'video_data_tabs',
  130.                 'class'  => array(),
  131.  
  132.             );
  133.  
  134.             return $datatabs;
  135.  
  136.  
  137.         }
  138.  
  139.          /**
  140.          * video_data_panels
  141.          *
  142.          * Affiche le contenu de notre nouvel onglet. l'ID html correspond à la valeur target décrite plus haut
  143.          * On a recourt à l'API WooCommerce pour générer le champ texte nécessaire.
  144.          * @version 1.0
  145.          * @since 1.0
  146.          *
  147.          * @access public
  148.          * @return html
  149.          */
  150.  
  151.         public function video_data_panels(){   
  152.  
  153.             ?>
  154.  
  155.             <div id="video_data_tabs" class="panel woocommerce_options_panel">
  156.  
  157.                 <?php
  158.  
  159.                 echo '<div class="options_group">';
  160.  
  161.                     // Youtube URL
  162.                     woocommerce_wp_text_input( array( 'id' => '_product_youtube_url', 'label' => 'Vidéo Produit', 'placeholder' => 'http://', 'description' => 'Saisir ici l\'URL de la vidéo' ) );
  163.  
  164.                
  165.                 echo '</div>';
  166.  
  167.                 ?>
  168.  
  169.             </div>
  170.            
  171.             <?php
  172.         }
  173.  
  174.         /**
  175.          * process_video_meta
  176.          *
  177.          * Sauvegarde en base de données de la valeur de notre vidéo.
  178.          * @version 1.0
  179.          * @since 1.0
  180.          *
  181.          * @access public
  182.          * @return void
  183.          */
  184.  
  185.         public function process_video_meta( $post_id ){
  186.  
  187.  
  188.                  update_post_meta( $post_id, '_product_youtube_url', sanitize_text_field( $_POST['_product_youtube_url'] ) );
  189.                
  190.  
  191.         }
  192.  
  193.     }
  194.    
  195.     $load = new My_WooCommerce_Video_Tab();
  196.  
  197. }
Advertisement
Add Comment
Please, Sign In to add comment