Ir para conteúdo

POWERED BY:

wellingtonmelo

Ajuda para exibir imagem dentro da janela de share do facebook

Recommended Posts

Olá pessoal, beleza?!! Espero que sim!

Vou tentar explicar bem meu problema para ver se aparece um anjo na minha vida e me ajuda com isso!

 

Tenho um projeto quiz para facebook. Todo o tráfego é gerado pelos próprios usuários que fazem o teste, aparece a foto do usuário e ele compartilha em seu facebook.

 

Porém a taxa de compartilhamento está muito baixa, percebi que não esta exibindo a  imagem certa dentro da janela de share do facebook.

 

Acredito que quem conhece php e/ou javascript consegue ler o código e ver qual código é responsável por puxar a imagem do resultado dentro da janela de share.

 

É exibida a imagem de "capa", mas não a imagem do resultado.

 

Por favor, veja o funcionamento, basta logar com facebook e para iniciar o teste: https://testesdivertidos.com/qual-seu-status-de-relacionamento-para-este-ano/

 

Após aparecer o resultado, clique em COMPARTILHAR, verá que a imagem da capa aparece no share, ao invés da imagem do resultado.

 

Bom, os arquivos responsáveis acredito serem 3.

 

wp-quiz-pro.php

inc/class-fb-quiz.php

inc/class-wp-quiz-pro.php

 

Obs: "class-fb-quiz.php" e "class-wp-quiz-pro.php" estão dentro da pasta inc

 

Segue código, wp-quiz-pro.php:

<?php
/**
 * Plugin Name: Testes Pop
 * Plugin URI:  https://testespop.com.br
 * Description: O TestesPop permite que você adicione facilmente testes para o facebook, ágeis e modernos ao seu site ou blog! Aumente o engajamento e os compartilhamentos enquanto fatura continuamente.
 * Version:     4122
 * Author:      TestesPop
 * Author URI:  http://testespop.com.br
 *
 * Text Domain: testes-pop
 * Domain Path: /languages/
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // disable direct access
}

if ( ! class_exists( 'WP_Quiz_Pro_Plugin' ) ) :

	/**
	 * Register the plugin.
	 *
	 * Display the administration panel, insert JavaScript etc.
	 */
	class WP_Quiz_Pro_Plugin {

		/**
		 * Hold plugin version
		 *
		 * @var string
		 */
		public $version = '4122';

		/**
		 * Hold an instance of WP_Quiz_Pro_Plugin class.
		 *
		 * @var WP_Quiz_Pro_Plugin
		 */
		protected static $instance = null;

		/**
		 * Hold the current quiz instance
		 *
		 * @var WP_Quiz_Pro
		 */
		public $quiz = null;

		/**
		 * Plugin url.
		 * @var string
		 */
		private $plugin_url = null;

		/**
		 * Plugin path.
		 * @var string
		 */
		private $plugin_dir = null;

		/**
		 * Main WP_Quiz_Pro_Plugin instance.
		 * @return WP_Quiz_Pro_Plugin - Main instance.
		 */
		public static function get_instance() {

			if ( is_null( self::$instance ) ) {
				self::$instance = new WP_Quiz_Pro_Plugin;
			}

			return self::$instance;
		}

		/**
		 * You cannot clone this class.
		 */
		public function __clone() {
			_doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'wp-quiz-pro' ), $this->version );
		}

		/**
		 * You cannot unserialize instances of this class.
		 */
		public function __wakeup() {
			_doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'wp-quiz-pro' ), $this->version );
		}

		/**
		 * The Constructor
		 */
		private function __construct() {
			$this->includes();
			$this->hooks();
			$this->setup_shortcode();
		}

		/**
		 * Load required classes
		 */
		private function includes() {

			// Auto loader
			spl_autoload_register( array( $this, 'autoloader' ) );

			new WP_Quiz_Pro_Admin;
		}

		/**
		 * Autoload classes
		 */
		public function autoloader( $class ) {

			$dir = $this->plugin_dir() . 'inc' . DIRECTORY_SEPARATOR;
			$class_file_name = 'class-' . str_replace( array( 'wp_quiz_pro_', '_' ), array( '', '-' ), strtolower( $class ) ) . '.php';
			if ( file_exists( $dir . $class_file_name ) ) {
				require $dir . $class_file_name;
			}
		}

		/**
		 * Register the [wp_quiz_pro] shortcode.
		 */
		private function setup_shortcode() {

			add_shortcode( 'wp_quiz_pro', array( $this, 'register_shortcode' ) );
			add_shortcode( 'wp_quiz_listing', array( $this, 'quiz_listing' ) );
		}

		/**
		 * Hook WP Quiz into WordPress
		 */
		private function hooks() {

			// Common
			add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
			add_action( 'init', array( $this, 'register_post_type' ) );
			add_action( 'init', array( $this, 'embeded_output' ) );

			// Frontend
			add_action( 'wp_head', array( $this, 'inline_script' ), 1 );
			add_filter( 'the_content', array( $this, 'create_quiz_page' ) );

			// Ajax
			add_action( 'wp_ajax_wq_quizResults', array( $this, 'save_quiz_results' ) );
			add_action( 'wp_ajax_nopriv_wq_quizResults', array( $this, 'save_quiz_results' ) );

			add_action( 'wp_ajax_wq_submitInfo', array( $this, 'save_quiz_user_info' ) );
			add_action( 'wp_ajax_nopriv_wq_submitInfo', array( $this, 'save_quiz_user_info' ) );

			add_action( 'wp_ajax_wq_submitFbInfo', array( $this, 'save_quiz_fb_user_info' ) );
			add_action( 'wp_ajax_nopriv_wq_submitFbInfo', array( $this, 'save_quiz_fb_user_info' ) );

			add_action( 'wp_ajax_check_image_file', array( $this, 'check_image_file' ) );
			add_action( 'wp_ajax_check_video_file', array( $this, 'check_video_file' ) );
			add_action( 'wp_ajax_dismiss_imagick_notice', array( $this, 'dismiss_imagick_notice' ) );
			add_action( 'wp_ajax_dismiss_gdlibrary_notice', array( $this, 'dismiss_gdlibrary_notice' ) );
			add_action( 'wp_ajax_wpquiz_get_debug_log', array( $this, 'wp_quiz_pro_get_debug_log' ) );

			add_action( 'wp_ajax_connect_aweber', array( $this, 'connect_aweber' ) );

			// FB SDK version 2.9 fix
			if ( isset( $_GET['fbs'] ) && ! empty( $_GET['fbs'] ) ) {
				add_action( 'template_redirect', array( $this, 'fb_share_fix' ) );
			}
		}

		/**
		 * Initialise translations
		 */
		public function load_plugin_textdomain() {

			load_plugin_textdomain( 'wp-quiz-pro', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
		}

		/**
		 * Register Quiz post type
		 */
		public function register_post_type() {

			$labels = array(
				'name'               => __( 'Testes Pop', 'wp-quiz-pro' ),
				'menu_name'          => __( 'Testes Pop', 'wp-quiz-pro' ),
				'singular_name'      => __( 'Testes Pop', 'wp-quiz-pro' ),
				'name_admin_bar'     => _x( 'Testes Pop', 'name admin bar', 'wp-quiz-pro' ),
				'all_items'          => __( 'Todos os testes', 'wp-quiz-pro' ),
				'search_items'       => __( 'Procurar teste', 'wp-quiz-pro' ),
				'add_new'            => _x( 'Adicionar novo', 'quiz', 'wp-quiz-pro' ),
				'add_new_item'       => __( 'Adicionar novo teste', 'wp-quiz-pro' ),
				'new_item'           => __( 'Adicionar novo', 'wp-quiz-pro' ),
				'view_item'          => __( 'Ver teste', 'wp-quiz-pro' ),
				'edit_item'          => __( 'Editar teste', 'wp-quiz-pro' ),
				'not_found'          => __( 'Nenhum teste encontrado.', 'wp-quiz-pro' ),
				'not_found_in_trash' => __( 'Nenhum teste na lixeira.', 'wp-quiz-pro' ),
				'parent_item_colon'  => __( 'Teste pai', 'wp-quiz-pro' ),
			);

			$args = array(
				'labels'             => $labels,
				'description'        => __( 'Mantém os testes e seus dados.', 'wp-quiz-pro' ),
				'menu_position'      => 5,
				'menu_icon'			 => 'dashicons-editor-help',
				'public'             => true,
				'publicly_queryable' => true,
				'show_ui'            => true,
				'show_in_menu'       => true,
				'query_var'          => true,
				'capability_type'    => 'post',
				'has_archive'        => true,
				'hierarchical'       => false,
				'supports'           => array( 'title', 'author', 'thumbnail', 'excerpt' ),
			);

			register_post_type( 'wp_quiz', $args );

			if ( false === get_option( 'wp_quiz_pro_version' ) ) {
				flush_rewrite_rules();
				update_option( 'wp_quiz_pro_version', $this->version );
			}
		}

		public function quiz_listing( $atts = array() ) {

			extract( shortcode_atts( array(
				'num' => 30
			), $atts ) );

			$args = array(
				'post_type' => 'wp_quiz',
				'post_status' => 'publish',
				'posts_per_page' => $num,

				'no_found_rows' => true,
				'update_post_term_cache' => false
			);

			$the_query = new WP_Query( $args );

			if ( ! $the_query->have_posts() ) {
				return '';
			}

			wp_enqueue_style( 'wp-quiz-listing', $this->plugin_url() . 'assets/css/listing.css', null, null );

			ob_start();
				include_once 'tmpl-quiz-listing.php';
			$out =  ob_get_clean();

			wp_reset_query();

			return $out;
		}

		/**
		 * Shortcode used to display quiz
		 *
		 * @return string HTML output of the shortcode
		 */
		public function register_shortcode( $atts ) {

			if ( ! isset( $atts['id'] ) ) {
				return false;
			}

			// we have an ID to work with
			$quiz = get_post( $atts['id'] );

			// check if ID is correct
			if ( ! $quiz || 'wp_quiz' !== $quiz->post_type ) {
				return "<!-- wp_quiz {$atts['id']} not found -->";
			}

			// lets go
			$this->set_quiz( $atts['id'] );
			$this->quiz->enqueue_scripts();

			return $this->quiz->render_public_quiz();
		}

		/**
		 * Set the current quiz
		 */
		public function set_quiz( $id ) {
			$quiz_type = get_post_meta( $id, 'quiz_type', true );
			$quiz_type = str_replace( '_quiz', '', $quiz_type );
			$quiz_type = 'WP_Quiz_Pro_' . ucwords( $quiz_type ) . '_Quiz';
			$this->quiz = new $quiz_type( $id );
		}

		/**
		 * [create_quiz_page description]
		 * @param  [type] $content [description]
		 * @return [type]          [description]
		 */
		public function create_quiz_page( $content ) {

			global $post;

			if ( 'wp_quiz' !== $post->post_type ) {
				return $content;
			}

			if ( ! is_single() ) {
				return $content;
			}

			$quiz_html = $this->register_shortcode( array( 'id' => $post->ID ) );

			return $quiz_html . $content;
		}

		/**
		 * [save_quiz_results description]
		 * @return [type] [description]
		 */
		public function save_quiz_results() {

			if ( ! wp_verify_nonce( $_POST['_nonce'], 'ajax-quiz-content' ) ) {
				return;
			}

			$correct   = isset( $_POST['correct'] ) ? absint( $_POST['correct'] ) : 0;
			$rid       = isset( $_POST['rid'] ) ? $_POST['rid'] : '';
			$pid       = absint( $_POST['pid'] );
			$type      = sanitize_text_field( $_POST['type'] );
			$user_ip   = $this->get_ip();
			$user_id   = get_current_user_id();
			$user_info = get_userdata( $user_id );
			$username  = is_user_logged_in() ? $user_info->user_login : 'Guest';
			$result    = '';

			$results = get_post_meta( $pid, 'results', true );

			if ( 'trivia' === $type ) {
				$rid = '';
				foreach ( $results as $result ) {
					if ( $result['min'] <= $correct && $result['max'] >= $correct ) {
						$result = $result['title'];
						break;
					}
				}
			} elseif ( 'personality' === $type ) {
				for ( $i = 0; $i < count( $results ); $i++ ) {
					if ( $i == $rid ) {
						$result = $results[ $i ]['title'];
						break;
					}
				}
			} elseif ( 'swiper' === $type ) {
				$results = $_POST['results'];
				$questions 	= get_post_meta( $pid, 'questions', true );
				foreach ( $questions as $q_key => $question ) {
					foreach ( $results as $key => $result ) {
						if ( $question['uid'] == $key ) {
							if ( '0' == $result ) {
								$questions[ $q_key ]['votesDown'] = $question['votesDown'] + 1;
							} else {
								$questions[ $q_key ]['votesUp'] = $question['votesUp'] + 1;
							}
						}
					}
				}
				update_post_meta( $pid, 'questions', $questions );
				$result = '';
			}

			// Save Result
			$settings = get_option( 'wp_quiz_pro_default_settings' );
			if ( isset( $settings['players_tracking'] ) && 1 === $settings['players_tracking'] ) {
				global $wpdb;
				$wpdb->insert(
					$wpdb->prefix . 'wp_quiz_players',
					array(
						'pid'               => $pid,
						'date'       		=> date( 'Y-m-d', time() ),
						'user_ip'           => $user_ip,
						'username'          => $username,
						'correct_answered'  => $correct,
						'result'            => $result,
						'quiz_type'         => $type,
					),
					array( '%d', '%s', '%s', '%s', '%d', '%s', '%s' )
				);
			}

			die( 'SUCCESS!' );
		}

		/**
		 * [save_quiz_user_info description]
		 * @return [type] [description]
		 */
		public function save_quiz_user_info() {

			if ( ! wp_verify_nonce( $_POST['_nonce'], 'ajax-quiz-content' ) ) {
				return;
			}

			$output = array( 'status' => 1 );

			if ( is_email( $_POST['email'] ) ) {

				global $wpdb;
				$username	= sanitize_text_field( $_POST['username'] );
				$email		= sanitize_email( $_POST['email'] );
				$pid		= absint( $_POST['pid'] );

				$this->subscribe_user( $pid, $username, $email );
				$result = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wp_quiz_emails WHERE email = '" . $email . "'" );

				if ( ! $result ) {
					//Save info
					$wpdb->insert(
						$wpdb->prefix . 'wp_quiz_emails',
						array(
							'pid'      => $pid,
							'username' => $username,
							'email'    => $email,
							'date'     => date( 'Y-m-d', time() ),
						),
						array( '%d', '%s', '%s', '%s' )
					);
				}

				$output['status'] = 2;
			}

			wp_send_json( $output );
		}

		/**
		 * [save_quiz_fb_user_info description]
		 * @return [type] [description]
		 */
		public function save_quiz_fb_user_info() {

			if ( ! wp_verify_nonce( $_POST['_nonce'], 'ajax-quiz-content' ) ) {
				return;
			}

			$output = array( 'status' => 1 );
			if ( ! empty( $_POST['user'] ) ) {
				global $wpdb;

				$user = $_POST['user'];
				$result = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wp_quiz_fb_users WHERE uid = '" . $user['id'] . "'" );

				if ( ! $result ) {
					$wpdb->insert(
						$wpdb->prefix . 'wp_quiz_fb_users',
						array(
							'uid'			=> absint( $user['id'] ),
							'email'			=> isset( $user['email'] ) ? $user['email'] : '',
							'first_name'	=> $user['first_name'],
							'last_name'		=> $user['last_name'],
							'gender'		=> isset( $user['gender'] ) ? $user['gender'] : '',
							'picture'		=> isset( $user['picture'] ) ? $user['picture'] : '',
							'friends'		=> isset( $user['friends'] ) ? serialize( $user['friends'] ) : '',
							'created_at'	=> date( 'Y-m-d', time() ),
							'updated_at'	=> date( 'Y-m-d', time() ),
						),
						array( '%d', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )
					);

					$user['insert_id'] = $wpdb->insert_id;
				} else {
					$user['insert_id'] = $result->id;
				}

				if ( 'user' === $_POST['profile'] ) {
					$return = $this->generate_result_user_image( $_POST['pid'], $user );
				} else {
					$return = $this->generate_result_friend_image( $_POST['pid'], $user );
				}

				if ( ! empty( $return['src'] ) ) {
					$output['src'] = $return['src'];
					$output['desc'] = $return['desc'];
					$output['key'] = $return['key'];
					$output['status'] = 2;
				} else {
					$output['error'] = $return['error'];
				}
			}

			wp_send_json( $output );
		}

		/**
		 * [generate_result_user_image description]
		 * @param  [type] $post_id [description]
		 * @param  [type] $user    [description]
		 * @return [type]          [description]
		 */
		public function generate_result_user_image( $post_id, $user ) {
			global $wpdb;

			$return		= array();
			$results	= get_post_meta( $post_id, 'results', true );

			if ( extension_loaded( 'imagick' ) && ! empty( $results ) ) {

				$index 	= array_rand( $results );
				$result	= $results[ $index ];
				$result['key'] = $index;

				$play = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wp_quiz_fb_plays WHERE user_id = '" . $user['insert_id'] . "' AND pid = '" . $post_id . "'" );

				if ( ! $play ) {
					$wpdb->insert(
						$wpdb->prefix . 'wp_quiz_fb_plays',
						array(
							'user_id'	=> absint( $user['insert_id'] ),
							'pid'		=> absint( $post_id ),
						),
						array( '%d', '%d' )
					);
				}

				$names = array(
					'user_first_name'	=> $user['first_name'],
					'user_last_name'	=> $user['last_name'],
					'friend_first_name'	=> '',
					'friend_last_name'	=> '',
				);

				$profile = 'https://graph.facebook.com/' . $user['id'] . '/picture?width=320&height=320';
				$profile = $this->get_redirect_url( $profile );

				$data 	= $this->generate_fb_result( $post_id, $result, $profile, $names );
				$return	= $data;
			}

			return $return;
		}

		public function generate_result_friend_image( $post_id, $user ) {
			global $wpdb;

			$return 	= array();
			$results 	= get_post_meta( $post_id, 'results', true );

			if ( extension_loaded( 'imagick' ) && ! empty( $results ) && ! empty( $user['friends'] ) ) {

				$index 	= array_rand( $results );
				$result	= $results[ $index ];
				$result['key'] = $index;

				$index_2	= array_rand( $user['friends'] );
				$friend		= $user['friends'][ $index_2 ];

				$play = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wp_quiz_fb_plays WHERE user_id = '" . $user['insert_id'] . "' AND pid = '" . $post_id . "'" );

				if ( ! $play ) {
					$wpdb->insert(
						$wpdb->prefix . 'wp_quiz_fb_plays',
						array(
							'user_id'	=> absint( $user['insert_id'] ),
							'pid'		=> absint( $post_id ),
						),
						array( '%d', '%d' )
					);
				}

				$profile = 'https://graph.facebook.com/' . $friend['id'] . '/picture?width=320&height=320';
				$profile = $this->get_redirect_url( $profile );

				$friend_name = explode( ' ', $friend['name'] );

				$names = array(
					'user_first_name'	=> $user['first_name'],
					'user_last_name'	=> $user['last_name'],
					'friend_first_name'	=> $friend_name[0],
					'friend_last_name'	=> $friend_name[1],
				);

				$data 	= $this->generate_fb_result( $post_id, $result, $profile, $names );
				$return	= $data;
			}

			return $return;
		}

		public function generate_fb_result( $post_id, $result, $profile, $names ) {

			$return = array(
				'src'   => '',
				'desc'  => '',
				'error' => '',
			);

			$profile_tmp = null;
			$output      = null;
			$draw        = null;

			try {

				$options    = get_option( 'wp_quiz_pro_default_settings' );
				$settings   = get_post_meta( $post_id, 'settings', true );
				$find       = array( '%%nomeusuario%%', '%%sobrenome%%', '%%nomeamigo%%', '%%sobrenomeamigo%%' );
				$replace    = array( $names['user_first_name'], $names['user_last_name'], $names['friend_first_name'], $names['friend_last_name'] );
				$title      = str_replace( $find, $replace, $result['title'] );
				$desc       = str_replace( $find, $replace, $result['desc'] );
				$upload_dir = wp_upload_dir();

				// Load images
				$profile_tmp = download_url( $profile );
				$profile     = new Imagick( $profile_tmp );
				$profile->resizeImage( $result['proImageWidth'], $result['proImageHeight'], imagick::FILTER_LANCZOS, 0.9 );
				$profile->roundCorners( $result['imageRadius'], $result['imageRadius'] );

				// Create new image from result
				$output = new Imagick( str_replace( $upload_dir['baseurl'], $upload_dir['basedir'], $result['image'] ) );
				$output->compositeImage( $profile, Imagick::COMPOSITE_DEFAULT, $result['pos_x'], $result['pos_y'] );

				// Annotate it
				if ( ! empty( $title ) ) {

					$draw = new ImagickDraw();
					$draw->setFillColor( $settings['title_color'] );
					$draw->setGravity( 1 );
					$draw->setFontSize( $settings['title_size'] );

					if ( isset( $options['defaults']['external_font'] ) && ! empty( $options['defaults']['external_font'] ) ) {
						$external_font = str_replace( home_url( '/' ), '', $options['defaults']['external_font'] );
						$draw->setFont( '../' . $external_font );
					} else {
						$draw->setFontFamily( $settings['title_font'] );
					}

					list( $lines, $line_height ) = $this->word_wrap_annotation( $output, $draw, $title, $result['titleImageWidth'] );

					for ( $i = 0; $i < count( $lines ); $i++ ) {
						$output->annotateImage( $draw, $result['pos_title_x'], $result['pos_title_y'] + $i * $line_height, 0, $lines[ $i ] );
					}
				}

				// Save to new image
				$upload_dir['basedir'] = $upload_dir['basedir'] . '/wp_quiz-result-images';
				$upload_dir['baseurl'] = $upload_dir['baseurl'] . '/wp_quiz-result-images';
				$output_name           = 'image-' . rand( 0, 100000 ) . '.png';
				$output->writeImage( $upload_dir['basedir'] . '/' . $output_name );

				$return['src']  = $upload_dir['baseurl'] . '/' . $output_name;
				$return['desc'] = $desc;
				$return['key']  = $result['key'];

			} catch ( Exception $ex ) {
				$return['error'] = $ex->getMessage();
			}

			// Clean up
			if ( ! is_null( $profile ) && is_a( $profile, 'Imagick' ) ) {
				$profile->clear();
			}
			if ( ! is_null( $output ) && is_a( $output, 'Imagick' ) ) {
				$output->clear();
			}
			if ( ! is_null( $draw ) && is_a( $draw, 'ImagickDraw' ) ) {
				$draw->clear();
			}
			if ( ! is_null( $profile_tmp ) ) {
				@unlink( $profile_tmp );
			}

			return $return;
		}

		public function get_redirect_url( $url ) {

			$response     = wp_remote_head( $url );
			$redirect_url = wp_remote_retrieve_header( $response, 'location' );

			return $redirect_url ? $redirect_url : $url;
		}

		public function word_wrap_annotation( $image, $draw, $text, $max_width ) {

			$words       = preg_split( '%\s%', $text, -1, PREG_SPLIT_NO_EMPTY );
			$lines       = array();
			$i           = 0;
			$line_height = 0;

			while ( count( $words ) > 0 ) {
				$metrics     = $image->queryFontMetrics( $draw, implode( ' ', array_slice( $words, 0, ++$i ) ) );
				$line_height = max( $metrics['textHeight'], $line_height );

				if ( $metrics['textWidth'] > $max_width || count( $words ) < $i ) {
					if ( 1 === $i ) {
						$i++;
					}

					$lines[] = implode( ' ', array_slice( $words, 0, --$i ) );
					$words   = array_slice( $words, $i );
					$i       = 0;
				}
			}

			return array( $lines, $line_height );
		}

		public function subscribe_user( $id, $name, $email ) {

			$settings = get_post_meta( $id, 'settings', true );
			$options  = get_option( 'wp_quiz_pro_default_settings' );

			if ( '1' === $settings['force_action'] ) {
				if ( '1' === $options['mail_service'] ) {
					$this->subscribe_mailchimp( $options, $name, $email );
				} elseif ( '2' === $options['mail_service'] ) {
					$this->subscribe_getresponse( $options, $name, $email );
				} elseif ( '3' === $options['mail_service'] ) {
					$this->subscribe_aweber( $options, $name, $email );
				}
			}
		}

		private function subscribe_aweber( $options, $name, $email ) {

			// check for valid data
			if ( empty( $email ) ) {
				wp_send_json( array(
					'success' => false,
					'error'   => esc_html__( 'No email address found.', 'wp-quiz-pro' ),
				) );
			}

			if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
				wp_send_json( array(
					'success' => false,
					'error'   => esc_html__( 'Not a valid email address.', 'wp-quiz-pro' ),
				) );
			}

			// Call service subscription method
			try {
				$service = new WP_Quiz_Pro_Subscription_Aweber();
				$list_id = $options['aweber']['listid'];
				$status  = $service->subscribe( $name, $email, $list_id );

				wp_send_json(array(
					'success' => true,
					'status'  => $status['status'],
				));
			} catch ( Exception $e ) {
				wp_send_json(array(
					'success' => false,
					'error'   => $e->getMessage(),
				));
			}
		}

		private function subscribe_mailchimp( $options, $name, $email ) {

			$mc_api_key   = $options['mailchimp']['api_key'];
			$mc_list_id   = $options['mailchimp']['list_id'];
			$double_optin = apply_filters( 'wp_quiz_mailchimp_double_notification', false );
			$vendor_path  = $this->get_vendor_path();

			if ( $email && null !== $mc_api_key && null !== $mc_list_id ) {

				try {
					if ( ! class_exists( 'Mailchimp' ) ) {
						require_once( $vendor_path . '/Mailchimp.php' );
					}

					$list       = new Mailchimp_Lists( new Mailchimp( $mc_api_key ) );
					$merge_vars = null;

					if ( $name ) {
						$fname = $name;
						$lname = '';
						if ( $space_pos = strpos( $name, ' ' ) ) {
							$fname = substr( $name, 0, $space_pos );
							$lname = substr( $name, $space_pos );
						}
						$merge_vars = array(
							'FNAME' => $fname,
							'LNAME' => $lname,
						);
					}
					$list->subscribe( $mc_list_id, array( 'email' => $email ), $merge_vars, 'html', (bool) $double_optin, true );

				} catch ( Exception $ex ) {

				}
			}
		}

		private function subscribe_getresponse( $options, $name, $email ) {

			$gr_api_key = $options['getresponse']['api_key'];
			$gr_list_id = $options['getresponse']['campaign_name'];

			$vendor_path = $this->get_vendor_path();

			if ( $email && null !== $gr_api_key && null !== $gr_list_id ) {
				try {
					if ( ! class_exists( 'GetResponse' ) ) {
						require_once( $vendor_path . '/getresponse.php' );
					}

					$api              = new GetResponse( $gr_api_key );
					$campaign_ame     = $gr_list_id;
					$subscriber_name  = $name;
					$subscriber_email = $email;

					$result      = $api->getCampaigns( 'EQUALS', $campaign_ame );
					$campaigns   = array_keys( (array) $result );
					$campaign_id = array_pop( $campaigns );

					$api->addContact( $campaign_id, $subscriber_name, $subscriber_email );
				} catch ( Exception $ex ) {

				}
			}
		}

		public function get_vendor_path() {

			return plugin_dir_path( __FILE__ ) . 'vendor';
		}

		public function check_image_file() {

			$output = array( 'status' => 1 );
			$check  = false;
			if ( @getimagesize( $_POST['url'] ) ) {
				$check = true;
			}

			$output['check'] = $check;
			wp_send_json( $output );
		}

		public function check_video_file() {

			$output  = array( 'status' => 1 );
			$check   = false;
			$id      = $_POST['video_id'];
			$url     = "//www.youtube.com/oembed?url=http://www.youtube.com/watch?v=$id&format=json";
			$headers = get_headers( $url );
			if ( '404' !== substr( $headers[0], 9, 3 ) ) {
				$check = true;
			}

			$output['check'] = $check;
			wp_send_json( $output );
		}

		public static function activate_plugin() {

			// Don't activate on anything less than PHP 5.4.0 or WordPress 3.4
			if ( version_compare( PHP_VERSION, '5.4.0', '<' ) || version_compare( get_bloginfo( 'version' ), '3.4', '<' ) || ! function_exists( 'spl_autoload_register' ) ) {
				require_once ABSPATH . 'wp-admin/includes/plugin.php';
				deactivate_plugins( basename( __FILE__ ) );
				wp_die( __( 'O Testes Pop requer o PHP na versão 5.4.0 com extensão spl ou superior e o WordPress 3.4 ou superior.', 'wp-quiz-pro' ) );
			}

			//Dont't activate if wp quiz is active
			if ( defined( 'WP_QUIZ_VERSION' ) ) {
				deactivate_plugins( basename( __FILE__ ) );
				wp_die( __( 'Por favor, desative o plugin Testes Pop primeiro para usar os recursos Premium!', 'wp-quiz-pro' ) );
			}

			include( 'inc/activate-plugin.php' );

		}

		public function get_ip() {

			//Just get the headers if we can or else use the SERVER global
			if ( function_exists( 'apache_request_headers' ) ) {
				$headers = apache_request_headers();
			} else {
				$headers = $_SERVER;
			}

			//Get the forwarded IP if it exists
			if ( array_key_exists( 'X-Forwarded-For', $headers ) && filter_var( $headers['X-Forwarded-For'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
				$the_ip = $headers['X-Forwarded-For'];
			} elseif ( array_key_exists( 'HTTP_X_FORWARDED_FOR', $headers ) && filter_var( $headers['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
				$the_ip = $headers['HTTP_X_FORWARDED_FOR'];
			} else {
				$the_ip = filter_var( $_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 );
			}
			return $the_ip;

		}

		public function dismiss_imagick_notice() {
			add_option( 'wp_dismiss_imagick_notice', 'true' );
		}

		public function dismiss_gdlibrary_notice() {
			add_option( 'wp_dismiss_gdlibrary_notice', 'true' );
		}

		public function wp_quiz_pro_get_debug_log() {
			$page = new WP_Quiz_Pro_Page_Support();
			$page->get_debug_log();
		}

		public function fb_share_fix() {

			$data   = array_map( 'urldecode', $_GET );
			$result = get_post_meta( $data['id'], 'results', true );
			$result = isset( $result[ $data['rid'] ] ) ? $result[ $data['rid'] ] : array();

			// Picture
			if(isset($data['img_url']) && $data['img_url'] !== '') {
				$data['source'] = $data['img_url'];
			} else if ( 'r' === $data['pic'] ) {
				$data['source'] = $result['image'];
			} elseif ( 'f' === $data['pic'] ) {
				$data['source'] = wp_get_attachment_url( get_post_thumbnail_id( $data['id'] ) );
			} elseif ( ( substr( $data['pic'], 0, 6 ) === 'image-' ) ) {
				$upload_dir            = wp_upload_dir();
				$upload_dir['baseurl'] = $upload_dir['baseurl'] . '/wp_quiz-result-images';
				$data['source']        = $upload_dir['baseurl'] . '/' . $data['pic'] . '.png';
			} else {
				$data['source'] = false;
			}

			// Description
			if(isset($data['desc_text']) && $data['desc_text'] !== '') {
				$data['description'] = $data['desc_text'];
			} elseif ( 'r' === $data['desc'] ) {
				$data['description'] = $result['desc'];
			} elseif ( 'e' === $data['desc'] ) {
				$data['description'] = get_post_field( 'post_excerpt', $data['id'] );
			} else {
				$data['description'] = false;
			}

			if ( $data['description'] ) {

				$first = array( '%%nomeusuario%%', '%%nomeamigo%%' );
				$last  = array( '%%sobrenome%%', '%%sobrenomeamigo%%' );

				$data['description'] = str_replace( $first, $data['nf'], $data['description'] );
				$data['description'] = str_replace( $last, $data['nl'], $data['description'] );
			}

			$settings = get_option( 'wp_quiz_pro_default_settings' );
			$url      = ( is_ssl() ? 'https' : 'http' ) . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

			global $post;
			$pid          = $post ? $post->ID : $data['id'];
			$original_url = get_permalink( $pid );
			?>
			<html>
				<head>
					<title><?php wp_title( '' ); ?></title>
					<meta property="fb:app_id" content="<?php echo $settings['defaults']['fb_app_id'] ?>">
					<meta property="og:type" content="website">
					<meta name="twitter:card" content="summary_large_image">
					<meta property="og:url" content="<?php echo esc_url( $url ); ?>">
					<?php if ( ! empty( $data['text'] ) ) :
						$title = get_the_title( $pid );
						$text = esc_attr( $data['text'] );

						$title = $title === $text ? $title : $title . ' - ' . $text;
					?>
					<meta property="og:title" content="<?php echo $title ?>">
					<meta property="twitter:title" content="<?php echo $title ?>">
					<?php endif; ?>
					<?php if ( ! empty( $data['source'] ) ) : ?>
					<meta property="og:image" content="<?php echo esc_url( $data['source'] ); ?>">
					<meta property="twitter:image" content="<?php echo esc_url( $data['source'] ); ?>">
						<?php list( $img_width, $img_height ) = getimagesize( $data['source'] ); ?>
						<?php if ( isset( $img_width ) && $img_width ) : ?>
							<meta property="og:image:width" content="<?php echo $img_width ?>">
						<?php else: ?>
							<meta property="og:image:width" content="600">
						<?php endif; ?>
						<?php if ( isset( $img_height ) && $img_height ) : ?>
							<meta property="og:image:height" content="<?php echo $img_height ?>">
						<?php else: ?>
							<meta property="og:image:height" content="400">
						<?php endif; ?>
					<?php endif; ?>
					<?php if ( ! empty( $data['description'] ) ) : ?>
					<meta property="og:description" content="<?php echo esc_attr( $data['description'] ); ?>">
					<meta property="twitter:description" content="<?php echo esc_attr( $data['description'] ); ?>">
					<?php endif; ?>
					<meta http-equiv="refresh" content="0;url=<?php echo esc_url( $original_url ); ?>">
				</head>
			<body>
				Redirecionando, por favor aguarde....
			</body>
			</html>
			<?php
			exit;
		}

/*
////////////////////////////////////// ALTEREI AQUI ////////////////////////////////////
*/
		protected static $url_facebook = null;
		public static function get_url_facebook() {
			return self::$url_facebook;
		}
		public function set_url_facebook($url) {
			self::$url_facebook = $url;
		}
/*
////////////////////////////////////// ALTEREI AQUI ////////////////////////////////////
*/


		/**
		 * [inline_script description]
		 * @return [type] [description]
		 */
		public function inline_script() {
			$settings = get_option( 'wp_quiz_pro_default_settings' );
		
/*
////////////////////////////////////// ALTEREI AQUI ////////////////////////////////////
*/
			$this->set_url_facebook($settings['defaults']['fb_app_id2']);
/*
////////////////////////////////////// ALTEREI AQUI ////////////////////////////////////
*/

			?>
			<script>
			var quizSiteUrl = '<?php echo home_url( '/' ) ?>';
			<?php if ( ! empty( $settings['analytics']['tracking_id'] ) ) { ?>
				(function(i,s,o,g,r,a,m) {i['GoogleAnalyticsObject']=r;i[r]=i[r]||function() {
				(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
				m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
				})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

				ga('create', '<?php echo $settings['analytics']['tracking_id'] ?>', 'auto');
				ga('send', 'pageview');
			<?php } ?>
			<?php if ( ! empty( $settings['defaults']['fb_app_id'] ) ) { ?>
				window.fbAsyncInit = function() {
					FB.init({
						appId    : '<?php echo $settings['defaults']['fb_app_id'] ?>',
						xfbml    : true,
						version  : 'v2.9'
					});

					FB.getLoginStatus(function( response ) {
						getLogin( response );
					});
				};

				(function(d, s, id) {
					var js, fjs = d.getElementsByTagName(s)[0];
					if (d.getElementById(id)) {return;}
					js = d.createElement(s); js.id = id;
					js.src = "//connect.facebook.net/pt_BR/sdk.js";
					fjs.parentNode.insertBefore(js, fjs);
				}(document, 'script', 'facebook-jssdk'));
			<?php } ?>
			</script>

			<?php
			if ( is_singular( array( 'wp_quiz' ) ) && isset( $settings['defaults']['share_meta'] ) && 1 === $settings['defaults']['share_meta'] ) {
				global $post, $wpseo_og;
				$twitter_desc = $og_desc = str_replace( array( "\r", "\n" ), '', strip_tags( $post->post_excerpt ) );
				if ( defined( 'WPSEO_VERSION' ) ) {
					remove_action( 'wpseo_head', array( $wpseo_og, 'opengraph' ), 30 );
					remove_action( 'wpseo_head', array( 'WPSEO_Twitter', 'get_instance' ), 40 );
					//use description from yoast
					$twitter_desc 	= get_post_meta( $post->ID, '_yoast_wpseo_twitter-description', true );
					$og_desc		= get_post_meta( $post->ID, '_yoast_wpseo_opengraph-description', true );
				}
				?>
				<meta name="twitter:title" content="<?php echo get_the_title(); ?>">
				<meta name="twitter:description" content="<?php echo $twitter_desc; ?>">
				<meta name="twitter:domain" content="<?php echo esc_url( site_url() ); ?>">
				<meta property="og:url" content="<?php the_permalink(); ?>" />
				<meta property="og:title" content="<?php echo get_the_title(); ?>" />
				<meta property="og:description" content="<?php echo $og_desc; ?>" />
				<?php
				if ( has_post_thumbnail() ) {
					$thumb_id = get_post_thumbnail_id();
					$thumb_url_array = wp_get_attachment_image_src( $thumb_id, 'full', true );
					$thumb_url = $thumb_url_array[0];
					?>
					<meta name="twitter:card" content="summary_large_image">
					<meta name="twitter:image:src" content="<?php echo $thumb_url; ?>">
					<meta property="og:image" content="<?php echo $thumb_url; ?>" />
					<meta itemprop="image" content="<?php echo $thumb_url; ?>">
				<?php
				}
			}
		}

		public function embeded_output() {

			if ( ! isset( $_GET['wp_quiz_id'] ) ) {
				return;
			}

			$qid		= absint( $_GET['wp_quiz_id'] );
			$quiz_html	= $this->register_shortcode( array( 'id' => $qid ) );
			$settings	= get_post_meta( $qid, 'settings', true );
			if ( empty( $quiz_html ) ) {
				return;
			}
			?>
				<link rel='stylesheet' href='<?php echo $this->plugin_url() . 'assets/css/main.css'; ?>' type='text/css' media='all' />
				<link rel='stylesheet' href='<?php echo $this->plugin_url() . 'assets/css/transition.min.css'; ?>' type='text/css' media='all' />
				<link rel='stylesheet' href='<?php echo $this->plugin_url() . 'assets/css/embed.min.css'; ?>' type='text/css' media='all' />
				<style>
					.wq_embedToggleQuizCtr{ display: none; }
				</style>
			<?php
			if ( 'traditional' === $settings['skin'] ) {
				?>
					<link rel='stylesheet' href='<?php echo $this->plugin_url() . 'assets/css/traditional-skin.css'; ?>' type='text/css' media='all' />
				<?php
			} elseif ( 'flat' === $settings['skin'] ) {
				?>
					<link rel='stylesheet' href='<?php echo $this->plugin_url() . 'assets/css/flat-skin.css'; ?>' type='text/css' media='all' />
				<?php
			}
			$this->inline_script();
			?>
				<script>
					var wq_l10n = {"correct": "Correct !", "wrong": "Wrong !","captionTrivia":"You got %%score%% out of %%total%%","captionTriviaFB":"I got %%score%% out of %%total%%, and you?","youVoted":"You voted","nonce": "<?php echo wp_create_nonce( 'ajax-quiz-content' ) ?>"};
				</script>
			<?php

			echo '<div class="wq_embed">' . $quiz_html . '</div>';
			?>
				<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
				<script src="<?php echo $this->plugin_url() . 'assets/js/embed.min.js'; ?>"></script>
				<script src="<?php echo $this->plugin_url() . 'assets/js/transition.min.js'; ?>"></script>
				<script src="<?php echo $this->plugin_url() . 'assets/js/jquery.flip.min.js'; ?>"></script>
				<script src="<?php echo $this->plugin_url() . 'assets/js/hammer.min.js'; ?>"></script>
				<script src="<?php echo $this->plugin_url() . 'assets/js/dynamics.min.js'; ?>"></script>
				<script src="<?php echo $this->plugin_url() . 'assets/js/jquery.jTinder.min.js'; ?>"></script>
				<script src="<?php echo $this->plugin_url() . 'assets/js/main.min.js'; ?>"></script>
			<?php
			die();
		}

		/**
		 * [connect_aweber description]
		 * @return [type] [description]
		 */
		public function connect_aweber() {

			// check for data
			$aweber_code = isset( $_REQUEST['aweber_code'] ) ? $_REQUEST['aweber_code'] : array();
			if ( empty( $aweber_code ) ) {
				wp_send_json( array(
					'success' => false,
					'error' => esc_html__( 'No aweber authorization code found.', 'wp-quiz-pro' ),
				) );
			}

			try {
				$service = new WP_Quiz_Pro_Subscription_Aweber();
				$data = $service->connect( $aweber_code );

				wp_send_json(array(
					'success' => true,
					'data' => $data,
				));
			} catch ( Exception $e ) {
				wp_send_json(array(
					'success' => false,
					'error' => $e->getMessage(),
				));
			}
		}

		/**
		 * Get plugin directory.
		 * @return string
		 */
		public function plugin_dir() {
			if ( is_null( $this->plugin_dir ) ) {
				$this->plugin_dir = untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/';
			}
			return $this->plugin_dir;
		}

		/**
		 * Get plugin uri.
		 * @return string
		 */
		public function plugin_url() {
			if ( is_null( $this->plugin_url ) ) {
				$this->plugin_url = untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/';
			}
			return $this->plugin_url;
		}
	}

	/**
	 * Main instance of WP_Quiz_Pro_Plugin.
	 *
	 * Returns the main instance of WP_Quiz_Pro_Plugin to prevent the need to use globals.
	 *
	 * @return WP_Quiz_Pro_Plugin
	 */

	function wp_quiz_pro() {
		return WP_Quiz_Pro_Plugin::get_instance();
	}
/*
////////////////////////////////////// ALTEREI AQUI ////////////////////////////////////
*/
	function prepare_url_facebook() {
		return WP_Quiz_Pro_Plugin::get_url_facebook();
	}
/*
////////////////////////////////////// ALTEREI AQUI ////////////////////////////////////
*/
endif;

add_action( 'plugins_loaded', 'wp_quiz_pro', 10 );
register_activation_hook( __FILE__, array( 'WP_Quiz_Pro_Plugin', 'activate_plugin' ) );

 

 

Segue código, class-fb-quiz.php:

<?php
/**
 * Override parent 'WP_Quiz_Pro' class with facebook quiz specific markup,
 */
class WP_Quiz_Pro_Fb_Quiz extends WP_Quiz_Pro {

	/**
	 * Constructor
	 */
	public function __construct( $id  ) {

		parent::__construct( $id );
		add_filter( 'wp_quiz_data_attrs', array( $this, 'add_fb_data_attrs' ) );
	}

	public function get_html_questions() {

		$questions_html = '';

		if ( ! empty( $this->questions ) ) {
			foreach ( $this->questions as $key => $question ) {

				$desc = ! empty( $question['desc'] ) ? '<p class="desc">' . $question['desc'] . '</p>' : '';
				$questions_html .= '
					<div class="wq_singleQuestionWrapper wq_IsFb" style="">
						<div class="wq_loader-container" style="display:none;">
							<div class="wq_loader_text">
								<img src="' . wp_quiz_pro()->plugin_url() . 'assets/image/image_spinner.gif" />

								<h3 id="wq_text_loader">' . esc_html__( 'Calculando seu resultado...', 'wp-quiz-pro' ) . '</h3>

								<h4 id="wq_text_loader">' . esc_html__( 'Curta nossa página!', 'wp-quiz-pro' ) . '</h4>

								<div class="curtir-load" style="margin:auto; width:100px; margin-top:15px;">
									<iframe class="facebook-like-button" style="cursor: default;" src="https://www.facebook.com/plugins/like.php?locale=pt_BR&href=https://www.facebook.com/plugins/like.php?locale=pt_BR&href=' . WP_Quiz_Pro_Plugin::get_url_facebook() . '&layout=button_count&action=like&size=small&show_faces=false&share=false&width=50&height=21" width="97" height="20" style="border:none;overflow:hidden;" scrolling="no" frameborder="0" allowTransparency="true">
									</iframe>
								</div><br><br>

								<center><img src="' . wp_quiz_pro()->plugin_url() . 'assets/image/seta-like.png" style="width:31px; height:71px;"></center>
							</div>
						</div>
						
						<div class="wq_questionMediaCtr" >
							<div class="wq_questionImage"><img src="' . $question['image'] . '" /><span>' . $question['imageCredit'] . '</span></div>
						</div>

						<div class="wq_questionTextDescCtr">
							<h1 class="teste-titulo">' . $question['title'] . '</h1>
							<div class="titulo-descricao">Por favor, entre com o seu Facebook para ver o seu resultado</div>
						</div>

						<style type="text/css">
						.mao-e-like{ margin:auto; width:140px; height: 20px; padding-top:5px;}
						.curta-aqui{ float:left;}
						.facebook-like-button{ float:right; }
						</style>

						<div class="mao-e-like">
							<div class="curta-aqui"><img src="' . wp_quiz_pro()->plugin_url() . 'assets/image/gif-mao.gif"></div>
							<iframe class="facebook-like-button" style="cursor: default;" src="https://www.facebook.com/plugins/like.php?locale=pt_BR&href=https://www.facebook.com/plugins/like.php?locale=pt_BR&href=' . WP_Quiz_Pro_Plugin::get_url_facebook() . '&layout=button_count&action=like&size=small&show_faces=false&share=false&width=50&height=21" width="97" height="20" style="border:none;overflow:hidden;" scrolling="no" frameborder="0" allowTransparency="true"></iframe>
						</div>

						<div class="wq_questionLogin">
							<button class="wq_loginFB">
								<i class="fa fa-facebook-official" aria-hidden="true" style="font-size:28px; float:left; margin-left:6px; line-height:33px;"></i>&nbsp;Entrar com o Facebook
							</button>
						</div>
					</div>';
			}
		}7

		return $questions_html;
	}	

	public function get_html_results() {
		

		$results_html = '';
		$share_html = $this->get_html_share();
		if ( ! empty( $this->results ) ) {
			$results_html .= '
			<div style="display:none;" class="wq_singleResultWrapper wq_IsFb" data-id="">
			<img class="wq_resultImg" src=""/>

			<center><div class="wq_resultDesc" style="line-height:20px; padding-top:10px;padding-bottom:10px;"></div></center>

			<div class="mao-e-like">
			<div class="curta-aqui"><img src="' . wp_quiz_pro()->plugin_url() . 'assets/image/gif-mao.gif"></div>
				<iframe class="facebook-like-button" style="cursor: default; margin-top:2px;" src="https://www.facebook.com/plugins/like.php?locale=pt_BR&href=' . WP_Quiz_Pro_Plugin::get_url_facebook() . '&layout=button_count&action=like&size=small&show_faces=false&share=false&width=50&height=21" width="97" height="20" style="border:none;overflow:hidden;" scrolling="no" frameborder="0" allowTransparency="true"></iframe>
			</div>

			' . $share_html . '
		</div>
			';
		}

		return $results_html;
	}

	public function add_fb_data_attrs( $data ) {

		$data .= 'data-quiz-profile="' . $this->settings['profile'] . '" ';
		return $data;
	}
}

 

 

 

Segue código, class-wp-quiz-pro.php:

<?php
/**
 * Generic WP_Quiz_Pro class. Extended by library specific classes.
 */
class WP_Quiz_Pro {

	/**
	 * quiz ID
	 */
	public $id = 0;

	/**
	 * quiz settings
	 */
	public $settings = array();

	/**
	 * quiz questions
	 */
	public $questions = array();

	/**
	 * quiz results
	 */
	public $results = array();

	/**
	 * quiz type
	 */
	public $type = '';

	/**
	 * quiz ad codes
	 */
	public $ad_codes = array();

	/**
	 * unique identifier
	 */
	public $identifier = 0;

	/**
	 * default options
	 */
	public $options = array();

	/**
	 * Constructor
	 */
	public function __construct( $id ) {

		$this->options 		= get_option( 'wp_quiz_pro_default_settings' );

		$this->id 			= $id;
		$this->settings 	= get_post_meta( $id, 'settings', true );
		$this->questions 	= get_post_meta( $id, 'questions', true );
		$this->results 		= get_post_meta( $id, 'results', true );
		$this->type			= get_post_meta( $id, 'quiz_type', true );
		$this->ad_codes 	= $this->options['ad_code'];
		$this->identifier 	= 'wp_quiz_' . $this->id;
	}

	/**
	 * @return string unique identifier for quiz
	 */
	protected function get_identifier() {
		return $this->identifier;
	}

	/**
	 * Output the HTML
	 *
	 * @return string HTML
	 */
	public function render_public_quiz() {

		$html[] = '<!-- wp quiz -->';
		$html[] = '<div class="wq_quizCtr ' . $this->settings['question_layout'] . ' ' . $this->type . '_quiz" ' . $this->get_data_attrs() . '>';
		$html[] = '   	<div class="wq_quizProgressBarCtr">';
		$html[] = '        ' . $this->get_html_progress_bar();
		$html[] = '   	</div>';
		$html[] = '   	<div class="wq_questionsCtr" >';
		$html[] = '        ' . $this->get_html_questions();
		$html[] = '   	</div>';
		$html[] = '   	<div class="wq_resultsCtr">';
		$html[] = '        ' . $this->get_html_results();
		$html[] = '   	</div>';
		$html[] = '   	<!-- force action -->';
		$html[] = '        ' . $this->get_html_force_action();
		$html[] = '   	<!--// force action-->';
		$html[] = '   	<!-- quiz timer -->';
		$html[] = '        <div class="timerPlaceholder"></div>';
		$html[] = '   	<!--// quiz timer-->';
		$html[] = '   	<!-- embed code -->';
		$html[] = '        ' . $this->get_embed_toggle();
		$html[] = '   	<!--// embed code -->';
		$html[] = '   	<!-- promote link -->';
		$html[] = '        ' . $this->get_html_promote_link();
		$html[] = '   	<!--// promote link-->';
		$html[] = '   	<!-- retake button -->';
		$html[] = '        ' . $this->get_html_retake_button();
		$html[] = '   	<!--// retake button-->';
		$html[] = '</div>';
		$html[] = '<!--// wp quiz-->';

		$wp_quiz = implode( "\n", $html );
		$wp_quiz = apply_filters( 'wp_quiz_output', $wp_quiz, $this->id, $this->settings );

		return $wp_quiz;
	}

	public function get_data_attrs() {

		global $post;
		$id  = $post ? $post->ID : $this->id;
		$url = $post ? get_permalink( $post->ID ) : '';

		$data = '';
		$data .= 'data-current-question="0" ';
		$data .= 'data-questions-answered="0" ';
		$data .= 'data-questions="' . count( $this->questions ) . '" ';
		$data .= 'data-transition_in="' . ( $this->settings['animation_in'] ? $this->settings['animation_in'] : 'fade' ) . '" ';
		$data .= 'data-transition_out="' . ( $this->settings['animation_out'] ? $this->settings['animation_out'] : 'fade' ) . '" ';
		$data .= 'data-correct-answered="0" ';
		$data .= 'data-force-action="' . ( isset( $this->settings['force_action'] ) ? $this->settings['force_action'] : '' ) . '" ';
		$data .= 'data-quiz-pid="' . $this->id . '" ';
		$data .= 'data-share-url="' . $url . '" ';
		$data .= 'data-post-title="' . get_the_title( $id ) . '" ';
		$data .= 'data-retake-quiz="' . $this->settings['restart_questions'] . '" ';
		$data .= 'data-question-layout="' . $this->settings['question_layout'] . '" ';
		$data .= 'data-featured-image="' . wp_get_attachment_url( get_post_thumbnail_id( $id ) ) . '" ';
		$data .= 'data-excerpt="' . get_post_field( 'post_excerpt', $this->id ) . '"';
		$data .= 'data-ajax-url="' . admin_url( 'admin-ajax.php' ) . '"';
		$data .= 'data-auto-scroll="' . $this->settings['auto_scroll'] . '" ';

		$data = apply_filters( 'wp_quiz_data_attrs', $data, $this->id, $this->settings );

		return $data;
	}

	public function get_html_progress_bar() {

		$display = 'single' === $this->settings['question_layout'] ? 'none' : 'block';
		$display = 'swiper' === $this->type ? 'none' : $display;
		$html[] = '<!-- progress bar -->';
		$html[] = '<div class="wq_quizProgressBarCtr" style="display:' . $display . '">';
		$html[] = '<div class="wq_quizProgressBar">';
		$html[] = '<span style="background-color:' . $this->settings['bar_color'] . '" class="wq_quizProgressValue"></span>';
		$html[] = '</div>';
		$html[] = '</div>';
		$html[] = '<!--// progress bar-->';

		$progress_bar = implode( "\n", $html );

		return $progress_bar;
	}

	public function get_html_share() {

		$html[] = '<!-- social share -->';
		$html[] = '<div class="wq_shareCtr">';
		if ( isset( $this->settings['share_buttons'] ) ) {
			$share_buttons = $this->settings['share_buttons'];
			$html[] = '<p style="font-size:14px;">' . esc_html__( '', 'wp-quiz-pro' ) . '</p>';
			if ( in_array( 'fb', $share_buttons ) ) {
				$html[] = '<button class="wq_shareFB"><i class="fa fa-facebook-square fa-lg" aria-hidden="true"></i>&nbsp;COMPARTILHAR</button>';
			}
			if ( in_array( 'tw', $share_buttons ) ) {
				$html[] = '<button class="replay-test" value="Refresh" onClick="window.location.reload()"><i class="fa fa-refresh" aria-hidden="true"></i>&nbsp;FAZER NOVAMENTE</button>';
			}
		}
		$html[] = '</div>';
		$html[] = '<!--// social share-->';

		$social_shares = implode( "\n", $html );
		$social_shares = apply_filters( 'wp_quiz_shares', $social_shares, $this->id, $this->settings );

		return $social_shares;
	}

	public function get_html_force_action() {

		$title = ( isset( $this->options['defaults']['subscribe_box_title'] ) && ! empty( $this->options['defaults']['subscribe_box_title'] ) ) ? $this->options['defaults']['subscribe_box_title'] : __( 'Just tell us who you are to view your results !', 'wp-quiz-pro' );

		$html[] = '<div class="wq_quizForceActionCtr" style="display:none;">';
		$html[] = '<div class="wq_quizEmailCtr" style="display:none;">';
		$html[] = '<form id="wq_infoForm" action="" method="post">';
		$html[] = '<p>' . esc_html( $title ) . '</p>';
		$html[] = '<div><label>' . esc_html__( 'Your first name :', 'wp-quiz-pro' ) . '</label><input type="text" id="wq_inputName"/></div>';
		$html[] = '<div><label>' . esc_html__( 'Your email address :', 'wp-quiz-pro' ) . '</label><input type="email" id="wq_inputEmail"/></div>';
		$html[] = '<p><button type="submit" id="" style="background:' . $this->settings['bar_color'] . '">' . __( 'Show my results &gt;&gt;', 'wp-quiz-pro' ) . '</button></p>';
		$html[] = '</form>';
		$html[] = '</div>';
		$html[] = '<div class="wq_quizForceShareCtr" style="display:none;">';
		$html[] = '<p>' . esc_html__( 'Please share this quiz to view your results . ', 'wp-quiz-pro' ) . '</p>';
		$html[] = '<button class="wq_forceShareFB"><i class="fa fa-facebook icon"></i><span>' . esc_html__( 'Facebook', 'wp-quiz-pro' ) . '</span></button>';
		$html[] = '</div>';
		$html[] = '</div>';

		$force_action = implode( "\n", $html );

		$force_action = apply_filters( 'wp_quiz_capture_email', $force_action, $this->id, $this->settings );

		return $force_action;
	}

	public function get_html_promote_link() {

		$promote_plugin = $this->settings['promote_plugin'];
		$html = array();
		if ( $promote_plugin ) {
			$html[] = '';
			$html[] = '';
			$html[] = '';
		}

		$promote_link = implode( "\n", $html );
		$promote_link = apply_filters( 'wp_quiz_promote_plugin', $promote_link, $this->id, $this->settings );

		return $promote_link;
	}

	public function get_html_retake_button() {

		$html[] = '<div class="wq_retakeQuizCtr" >';
		$html[] = '<button style="display:none;" class="wq_retakeQuizBtn"><i class="fa fa-undo"></i>&nbsp; ' . esc_html__( 'PLAY AGAIN !', 'wp-quiz-pro' ) . '</button>';
		$html[] = '</div>';

		$retake_button = implode( "\n", $html );

		$retake_button = apply_filters( 'wp_quiz_capture_email', $retake_button, $this->id, $this->settings );

		return $retake_button;
	}

	public function get_embed_toggle() {

		$html = '';
		$embed_toggle = isset( $this->settings['embed_toggle'] ) ? $this->settings['embed_toggle'] : false;

		if ( $embed_toggle ) {
			$html .= '';
			$html .= '';
			$html .= '';
			$site_url = get_site_url() . '/?wp_quiz_id=' . $this->id;
			$iframe = '';
			$html .= '';
		}

		return apply_filters( 'wp_quiz_embed_toggle', $html, $this->id, $this->settings );
	}

	/**
	 * Include quiz assets
	 */
	public function enqueue_scripts() {

		wp_enqueue_script( 'wp_quiz-front-js', wp_quiz_pro()->plugin_url() . 'assets/js/main.min.js', array( 'jquery', 'semantic-transition-js', 'semantic-embed-js' ), wp_quiz_pro()->version, true );
		wp_enqueue_script( 'semantic-transition-js', wp_quiz_pro()->plugin_url() . 'assets/js/transition.min.js', array( 'jquery' ), wp_quiz_pro()->version, true );
		wp_enqueue_script( 'semantic-embed-js', wp_quiz_pro()->plugin_url() . 'assets/js/embed.min.js', array( 'jquery' ), wp_quiz_pro()->version, true );

		wp_localize_script( 'wp_quiz-front-js', 'wq_l10n', array(
				'correct'         => esc_html__( 'Correct !', 'wp-quiz-pro' ),
				'wrong'           => esc_html__( 'Wrong !', 'wp-quiz-pro' ),
				'captionTrivia'   => esc_html__( 'You got %%score%% out of %%total%%', 'wp-quiz-pro' ),
				'captionTriviaFB' => esc_html__( 'I got %%score%% out of %%total%%, and you?', 'wp-quiz-pro' ),
				'youVoted'        => esc_html__( 'You voted', 'wp-quiz-pro' ),
				'nonce'           => wp_create_nonce( 'ajax-quiz-content' ),
			)
		);

		// This will be added to the bottom of the page as <head> has already been processed by WordPress sorry.
		wp_enqueue_style( 'semantic-transition-css', wp_quiz_pro()->plugin_url() . 'assets/css/transition.min.css', array(), wp_quiz_pro()->version );
		wp_enqueue_style( 'semantic-embed-css', wp_quiz_pro()->plugin_url() . 'assets/css/embed.min.css', array(), wp_quiz_pro()->version );
		wp_enqueue_style( 'wp_quiz-front-css', wp_quiz_pro()->plugin_url() . 'assets/css/main.css', false, wp_quiz_pro()->version );
		if ( 'flat' === $this->settings['skin'] ) {
			wp_enqueue_style( 'flat-skin-css', wp_quiz_pro()->plugin_url() . 'assets/css/flat-skin.css', array(), wp_quiz_pro()->version );
		} else {
			wp_enqueue_style( 'traditional-skin-css', wp_quiz_pro()->plugin_url() . 'assets/css/traditional-skin.css', array(), wp_quiz_pro()->version );
		}
		if ( is_rtl() ) {
			wp_enqueue_style( 'wp_quiz-rtl-css', wp_quiz_pro()->plugin_url() . 'assets/css/quiz-rtl.css', array(), wp_quiz_pro()->version );
		}

		do_action( 'wp_quiz_register_public_styles' );
	}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Estou com uma dúvida, referente cálculo de valores em tempo real.

      Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado.

      Quero mostrar o RESULTADO assim: 0,00  ou  0.00

      Abaixo posto o código.
      jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando })  
       
      Grato,
       
      Cesar
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.