Advertisement
arie_cristianD

show food calories in frontend

Aug 14th, 2024
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 15.21 KB | None | 0 0
  1. <?php
  2. /**
  3.  * @author Jegtheme
  4.  */
  5.  
  6. if ( ! defined( 'ABSPATH' ) ) {
  7.     exit;
  8. }
  9.  
  10. if ( ! class_exists( 'JNews_Food_Recipe' ) ) {
  11.     class JNews_Food_Recipe {
  12.  
  13.         /**
  14.          * @var JNews_Food_Recipe
  15.          */
  16.         private static $instance;
  17.  
  18.         /**
  19.          * @return JNews_Food_Recipe
  20.          */
  21.         public static function getInstance() {
  22.             if ( null === static::$instance ) {
  23.                 static::$instance = new static();
  24.             }
  25.             return static::$instance;
  26.         }
  27.  
  28.         /**
  29.          * JNews_Food_Recipe constructor
  30.          */
  31.         private function __construct() {
  32.             add_action( 'wp_print_styles', array( $this, 'load_assets' ) );
  33.             add_filter( 'the_content', array( $this, 'food_recipe_content' ) );
  34.             add_action( 'amp_post_template_css', array( $this, 'food_recipe_content_style' ) );
  35.             add_action( 'wp_footer', array( $this, 'food_recipe_json_ld' ) );
  36.         }
  37.  
  38.         /**
  39.          * Load plugin assest
  40.          */
  41.         public function load_assets() {
  42.  
  43.             if ( is_singular( 'post' ) && $this->food_recipe_enable() ) {
  44.                 wp_enqueue_style( 'jnews-food-recipe', JNEWS_FOOD_RECIPE_URL . '/assets/css/plugin.css', null, JNEWS_FOOD_RECIPE_VERSION );
  45.  
  46.                 wp_enqueue_script( 'jnews-print', JNEWS_FOOD_RECIPE_URL . '/assets/js/printthis.js', null, JNEWS_FOOD_RECIPE_VERSION, true );
  47.                 wp_enqueue_script( 'jnews-food-recipe', JNEWS_FOOD_RECIPE_URL . '/assets/js/plugin.js', null, JNEWS_FOOD_RECIPE_VERSION, true );
  48.             }
  49.         }
  50.  
  51.         /**
  52.          * Return food recipe content
  53.          *
  54.          * @param  string $content
  55.          *
  56.          * @return string
  57.          */
  58.         public function food_recipe_content( $content ) {
  59.             if ( $this->food_recipe_enable() ) {
  60.                 // if split post, we need to leave the post to it should be
  61.                 $split_post = jnews_get_metabox_value( 'jnews_post_split.enable_post_split', false );
  62.  
  63.                 if ( $split_post ) {
  64.                     return $content;
  65.                 }
  66.  
  67.                 return $this->render_food_recipe_content( $content );
  68.             }
  69.  
  70.             return $content;
  71.         }
  72.  
  73.         /**
  74.          * Integration with split content
  75.          *
  76.          * @param  string $content
  77.          * @param  int    $index
  78.          * @param  int    $max_page
  79.          *
  80.          * @return string
  81.          */
  82.         public function split_food_recipe( $content, $index, $max_page ) {
  83.             if ( $this->food_recipe_enable() ) {
  84.                 if ( $index == ( $max_page - 1 ) ) {
  85.                     return $this->render_food_recipe_content( $content );
  86.                 }
  87.             }
  88.  
  89.             return $content;
  90.         }
  91.  
  92.         /**
  93.          * Render food recipe content
  94.          *
  95.          * @param  string $content
  96.          *
  97.          * @return string
  98.          */
  99.         public function render_food_recipe_content( $content ) {
  100.             $data = jnews_get_metabox_value( 'jnews_food_recipe.enable_food_recipe', false );
  101.  
  102.             $output = '<div id="jeg_food_recipe" class="jeg_food_recipe_wrap">
  103.                            ' . $this->food_recipe_title() . '
  104.                            ' . $this->food_recipe_ingredient() . '
  105.                            ' . $this->food_recipe_instruction() . '
  106.                        </div>';
  107.  
  108.             $content = $content . $output;
  109.  
  110.             return $content;
  111.         }
  112.  
  113.         /**
  114.          * Food recipe title
  115.          *
  116.          * @return string
  117.          */
  118.         public function food_recipe_title() {
  119.             $title  = jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_title' );
  120.             $output = '';
  121.  
  122.             // Food Calories.
  123.             $food_calories      = jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_calories', false );
  124.             $food_calories_meta = '';
  125.             if ( ! empty( $food_calories ) ) {
  126.                 $food_calories_meta .=
  127.                     '<div class="meta_calories">
  128.                         <i class="fa fa-info-circle"></i>
  129.                         <span class="meta_text">' . jnews_return_translation( 'Food Calories:', 'jnews-food-recipe', 'calories' ) . '</span>
  130.                         <span>' . esc_html( $food_calories ) . '</span>
  131.                     </div>';
  132.             }
  133.  
  134.             if ( ! empty( $food_calories_meta ) ) {
  135.                 $food_calories_meta =
  136.                     "<div class=\"jeg_food_recipe_meta meta_calories\">
  137.                        {$food_calories_meta}
  138.                    </div>";
  139.             }
  140.  
  141.             if ( ! empty( $title ) ) {
  142.                 $output =
  143.                     '<div class="jeg_food_recipe_title">
  144.                        <h3>' . esc_html( $title ) . '</h3>
  145.                         ' . $food_calories_meta . '
  146.                        ' . $this->render_food_recipe_meta() . '
  147.                        ' . $this->render_food_recipe_print() . '
  148.                    </div>';
  149.             }
  150.  
  151.             return $output;
  152.         }
  153.  
  154.         /**
  155.          * Food recipe ingredient
  156.          *
  157.          * @return string
  158.          */
  159.         public function food_recipe_ingredient() {
  160.             $ingredients = jnews_get_metabox_value( 'jnews_food_recipe.ingredient' );
  161.             $output      = '';
  162.  
  163.             if ( ! empty( $ingredients ) ) {
  164.                 foreach ( $ingredients as $ingredient ) {
  165.                     if ( ! empty( $ingredient['item'] ) ) {
  166.                         $output .= '<li><i class="jeg_checkmark"></i> ' . $ingredient['item'] . '</li>';
  167.                     }
  168.                 }
  169.             }
  170.  
  171.             if ( ! empty( $output ) ) {
  172.                 $output =
  173.                     '<div class="jeg_food_recipe_ingredient">
  174.                        <h4>' . jnews_return_translation( 'Ingredients', 'jnews-food-recipe', 'ingredients' ) . "</h4>
  175.                        <ul>{$output}</ul>
  176.                    </div>";
  177.             }
  178.  
  179.             return $output;
  180.         }
  181.  
  182.         /**
  183.          * Food recipe instruction
  184.          *
  185.          * @return string
  186.          */
  187.         public function food_recipe_instruction() {
  188.             $instruction = jnews_get_metabox_value( 'jnews_food_recipe.instruction' );
  189.             $output      = '';
  190.  
  191.             if ( ! empty( $instruction ) ) {
  192.                 $content = $this->format_text( $instruction );
  193.                 $output  =
  194.                     '<div class="jeg_food_recipe_instruction">
  195.                        <h4>' . jnews_return_translation( 'Instructions', 'jnews-food-recipe', 'instructions' ) . '</h4>
  196.                        ' . $content . '
  197.                    </div>';
  198.             }
  199.  
  200.             return $output;
  201.         }
  202.  
  203.         /**
  204.          * Formating text
  205.          *
  206.          * @param  string $text
  207.          *
  208.          * @return string
  209.          */
  210.         public function format_text( $text ) {
  211.             $formats = array( 'wptexturize', 'convert_smilies', 'wpautop', 'shortcode_unautop', 'prepend_attachment', 'wp_filter_content_tags' );
  212.  
  213.             foreach ( $formats as $format ) {
  214.                 $text = $format( $text );
  215.             }
  216.  
  217.             return $text;
  218.         }
  219.  
  220.         /**
  221.          * Checking food recipe enable | disable
  222.          *
  223.          * @return boolean
  224.          */
  225.         public function food_recipe_enable() {
  226.             return jnews_get_metabox_value( 'jnews_food_recipe.enable_food_recipe', false );
  227.         }
  228.  
  229.         /**
  230.          * Render food recipe meta content
  231.          *
  232.          * @return string
  233.          */
  234.         public function render_food_recipe_meta() {
  235.             $output = '';
  236.  
  237.             // serving size
  238.             $serving_size = jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_serve', false );
  239.  
  240.             if ( ! empty( $serving_size ) ) {
  241.                 $output .=
  242.                     '<div class="meta_serve">
  243.                        <i class="fa fa-cutlery"></i>
  244.                        <span class="meta_text">' . jnews_return_translation( 'Serves:', 'jnews-food-recipe', 'serves' ) . '</span>
  245.                        <span>' . esc_html( $serving_size ) . '</span>
  246.                    </div>';
  247.             }
  248.  
  249.             // cooking time
  250.             $cooking_time = jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_time', false );
  251.  
  252.             if ( ! empty( $cooking_time ) ) {
  253.                 $output .=
  254.                     '<div class="meta_time">
  255.                        <i class="fa fa-clock-o"></i>
  256.                        <span class="meta_text">' . sprintf( jnews_return_translation( 'Cooking time: %s minutes', 'jnews-food-recipe', 'cook_time' ), esc_html( $cooking_time ) ) . '</span>
  257.                    </div>';
  258.             }
  259.  
  260.             // cooking level
  261.             $cooking_level = jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_level', false );
  262.  
  263.             if ( ! empty( $cooking_level ) ) {
  264.                 $output .=
  265.                     '<div class="meta_level">
  266.                        <i class="fa fa-star"></i>
  267.                        <span class="meta_text">' . jnews_return_translation( 'Level:', 'jnews-food-recipe', 'level' ) . '</span>
  268.                        <span>' . esc_html( $cooking_level ) . '</span>
  269.                    </div>';
  270.             }
  271.  
  272.             if ( ! empty( $output ) ) {
  273.                 $output =
  274.                     "<div class=\"jeg_food_recipe_meta\">
  275.                        {$output}
  276.                    </div>";
  277.             }
  278.  
  279.             return $output;
  280.         }
  281.  
  282.         /**
  283.          * Render food recipe print button
  284.          *
  285.          * @return string
  286.          */
  287.         public function render_food_recipe_print() {
  288.             $print  = jnews_get_metabox_value( 'jnews_food_recipe.enable_print_recipe' );
  289.             $output = '';
  290.  
  291.             if ( ! empty( $print ) ) {
  292.                 $output =
  293.                     '<a href="#" class="jeg_food_recipe_print">
  294.                        <i class="fa fa-print"></i>
  295.                        <span>' . jnews_return_translation( 'Print Recipe', 'jnews-food-recipe', 'print_recipe' ) . '</span>
  296.                    </a>';
  297.             }
  298.  
  299.             return $output;
  300.         }
  301.  
  302.         /**
  303.          * Render JSON LD for food recipe
  304.          */
  305.         public function food_recipe_json_ld() {
  306.  
  307.             if ( ! jnews_get_option( 'enable_schema', 1 ) ) {
  308.                 return false;
  309.             }
  310.  
  311.             $post_id = get_the_ID();
  312.  
  313.             if ( $this->food_recipe_enable() ) {
  314.                 $author_id       = get_post_field( 'post_author', $post_id );
  315.                 $recipe_cooktime = (int) jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_time', 0 );
  316.                 $recipe_preptime = (int) jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_prep', 0 );
  317.                 $ingredients     = jnews_get_metabox_value( 'jnews_food_recipe.ingredient' );
  318.                 $recipe          = array(
  319.                     '@context'           => 'http://schema.org',
  320.                     '@type'              => 'Recipe',
  321.                     'dateCreated'        => get_the_date( 'Y-m-d H:i:s', $post_id ),
  322.                     'datePublished'      => get_the_date( 'Y-m-d H:i:s', $post_id ),
  323.                     'dateModified'       => get_post_modified_time( 'Y-m-d H:i:s', $post_id ),
  324.                     'name'               => jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_title', '' ),
  325.                     'description'        => jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_description', '' ),
  326.                     'recipeInstructions' => jnews_get_metabox_value( 'jnews_food_recipe.instruction', '' ),
  327.                     'cookTime'           => 'PT' . $recipe_cooktime . 'M',
  328.                     'prepTime'           => 'PT' . $recipe_preptime . 'M',
  329.                     'totalTime'          => 'PT' . ( $recipe_cooktime + $recipe_preptime ) . 'M',
  330.                     'keywords'           => jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_keywords', '' ),
  331.                     'recipeCategory'     => jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_category', '' ),
  332.                     'recipeCuisine'      => jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_cuisine', '' ),
  333.                     'recipeYield'        => (int) jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_yield', 0 ),
  334.                     'author'             => array(
  335.                         '@type' => 'Person',
  336.                         'name'  => get_the_author_meta( 'display_name', $author_id ),
  337.                         'url'   => get_author_posts_url( get_the_author_meta( 'ID', $author_id ) ),
  338.                     ),
  339.                     'aggregateRating'    => array(
  340.                         '@type'       => 'AggregateRating',
  341.                         'ratingValue' => '5',
  342.                         'reviewCount' => rand( 1, 20 ),
  343.                     ),
  344.                     'nutrition'          => array(
  345.                         '@type'       => 'NutritionInformation',
  346.                         'servingSize' => jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_serve', '' ),
  347.                         'calories'    => jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_calories', '0' ),
  348.                     ),
  349.                 );
  350.  
  351.                 if ( 'video' === jnews_get_metabox_value( 'jnews_single_post.format', null, $post_id ) ) {
  352.                     $recipe['video'] = array(
  353.                         '@type'       => 'VideoObject',
  354.                         'name'        => jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_title', '' ),
  355.                         'description' => jnews_get_metabox_value( 'jnews_food_recipe.food_recipe_description', '' ),
  356.                         'uploadDate'  => get_the_date( 'Y-m-d H:i:s', $post_id ),
  357.                         'contentURL'  => jnews_get_metabox_value( 'jnews_single_post.video', null, $post_id ),
  358.                     );
  359.                 }
  360.  
  361.                 if ( has_post_thumbnail() ) {
  362.                     $post_thumbnail_id = get_post_thumbnail_id( $post_id );
  363.                     $image_size        = wp_get_attachment_image_src( $post_thumbnail_id, $post_id );
  364.  
  365.                     $recipe['image'] = $image_size[0];
  366.  
  367.                     if ( isset( $recipe['video'] ) ) {
  368.                         $recipe['video']['thumbnailUrl'] = $image_size[0];
  369.                     }
  370.                 }
  371.  
  372.                 if ( ! empty( $ingredients ) ) {
  373.                     foreach ( $ingredients as $item ) {
  374.                         if ( isset( $item['item'] ) ) {
  375.                             $recipe['recipeIngredient'][] = ltrim( $item['item'] );
  376.                         }
  377.                     }
  378.                 }
  379.  
  380.                 if ( defined( 'JNEWS_REVIEW' ) ) {
  381.                     $rating_value                             = get_post_meta( $post_id, 'jnew_rating_mean', true );
  382.                     $recipe['aggregateRating']['ratingValue'] = round( (int) $rating_value / 2, 1 );
  383.                 }
  384.  
  385.                 echo "<script type='application/ld+json'>" . wp_json_encode( $recipe ) . "</script>\n";
  386.             }
  387.         }
  388.  
  389.         /**
  390.          * AMP style
  391.          *
  392.          * @param  string $amp_template
  393.          */
  394.         public function food_recipe_content_style( $amp_template ) {
  395.             ?>
  396.             .jeg_food_recipe_wrap {
  397.                 border-top: 3px solid #eee;
  398.                 padding-top: 20px;
  399.                 margin: 40px 0;
  400.             }
  401.             .jeg_food_recipe_title {
  402.                 position: relative;
  403.                 margin-bottom: 30px;
  404.             }
  405.             .jeg_food_recipe_title::after {
  406.                 content: "";
  407.                 display: table;
  408.                 clear: both;
  409.             }
  410.             .jeg_food_recipe_title h3 {
  411.                 margin: 0 0 5px;
  412.             }
  413.             .jeg_food_recipe_meta {
  414.                 font-size: 13px;
  415.                 color: #a0a0a0;
  416.                 float: left;
  417.             }
  418.             .jeg_food_recipe_meta .fa {
  419.                 font-size: 14px;
  420.                 margin-right: 2px;
  421.             }
  422.             .jeg_food_recipe_meta > div {
  423.                 display: inline-block;
  424.                 margin-right: 15px;
  425.             }
  426.             .jeg_food_recipe_print {
  427.                 display: none;
  428.             }
  429.             .jeg_food_recipe_ingredient h4 {
  430.                 font-size: 18px;
  431.                 line-height: 1;
  432.                 font-weight: bolder;
  433.                 margin: 0 0 20px;
  434.                 text-transform: uppercase;
  435.             }
  436.  
  437.             /* Ingredient */
  438.             .jeg_food_recipe_ingredient {
  439.                 margin-bottom: 30px;
  440.                 padding: 20px;
  441.                 border: 1px solid #e0e0e0;
  442.                 -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
  443.                 box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
  444.             }
  445.             .jeg_food_recipe_ingredient ul {
  446.                 list-style: none;
  447.                 margin: 0 -20px;
  448.             }
  449.             .jeg_food_recipe_ingredient li {
  450.                 padding: 10px 20px;
  451.                 margin: 0;
  452.                 font-size: 15px;
  453.                 line-height: 1.4;
  454.                 cursor: pointer;
  455.                 font-weight: bold;
  456.             }
  457.             .jeg_food_recipe_ingredient li:nth-child(odd) {
  458.                 background: #f5f5f5;
  459.             }
  460.             .jeg_food_recipe_ingredient li.active {
  461.                 font-weight: normal;
  462.                 text-decoration: line-through;
  463.                 font-style: italic;
  464.                 color: #a0a0a0;
  465.             }
  466.             .jeg_food_recipe_ingredient li .jeg_checkmark {
  467.                 display: inline-block;
  468.                 font: normal normal normal 14px/1 FontAwesome;
  469.                 margin-right: 7px;
  470.                 color: #a0a0a0;
  471.             }
  472.             .jeg_food_recipe_ingredient li .jeg_checkmark:before {
  473.                 content: "\f096";
  474.             }
  475.             .jeg_food_recipe_ingredient li.active .jeg_checkmark:before {
  476.                 content: "\f046";
  477.             }
  478.             .jeg_food_recipe_ingredient li.active .jeg_checkmark {
  479.                 color: #00a652;
  480.             }
  481.  
  482.             /* Instruction */
  483.             .jeg_food_recipe_instruction h4 {
  484.                 font-weight: bold;
  485.                 text-transform: uppercase;
  486.             }
  487.             .jeg_food_recipe_instruction li {
  488.                 margin-bottom: 15px;
  489.             }
  490.  
  491.             /*** change color on dark mode **/
  492.             .jnews-dark-mode .jeg_food_recipe_ingredient li:nth-child(odd) {
  493.                 background: #000000;
  494.             }
  495.  
  496.  
  497.             /*** Responsive **/
  498.             @media only screen and (max-width : 568px) {
  499.                 .jeg_food_recipe_meta {float: none;}
  500.                 .jeg_food_recipe_print {float: none; top: 0; margin-top: 20px; padding: 10px 16px;}
  501.             }
  502.             @media only screen and (max-width : 480px) {
  503.                 .jeg_food_recipe_title h3 {font-size: 20px;}
  504.                 .jeg_food_recipe_ingredient h4,.jeg_food_recipe_instruction h4 {font-size: 16px;}
  505.             }
  506.             <?php
  507.         }
  508.     }
  509. }
  510.  
  511.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement