SHARE
TWEET

Thrive functions

a guest Oct 19th, 2018 217 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. add_filter( 'auto_update_theme', '__return_true' );
  3. add_filter( 'previous_comments_link_attributes', 'thrive_get_previous_comments_link_attributes' );
  4. add_filter( 'next_comments_link_attributes', 'thrive_get_next_comments_link_attributes' );
  5. /*
  6.  * Set up a global variable in order to know that this is a thrive theme
  7.  */
  8. global $is_thrive_theme;
  9. $is_thrive_theme = true;
  10. /*
  11.  * Include the init file that handles the main configurations and the backend
  12.  * methods
  13.  */
  14. include( get_template_directory() . '/inc/configs/init.php' );
  15.  
  16. include( get_template_directory() . "/inc/configs/theme-options.php" );
  17.  
  18. include( get_template_directory() . '/inc/tha-theme-hooks.php' );
  19.  
  20. include( get_template_directory() . '/inc/thrive-image-optimization.php' );
  21.  
  22. include( get_template_directory() . '/inc/templates/custom-menu-walker.php' );
  23.  
  24. include( get_template_directory() . '/inc/helpers/views.php' );
  25.  
  26. include( get_template_directory() . '/inc/dashboard/init.php' );
  27.  
  28. require( get_template_directory() . "/inc/theme-options.php" );
  29.  
  30. /*
  31.  * Render the breadcrumbs
  32.  */
  33. if ( ! function_exists( 'thrive_breadcrumbs' ) ) :
  34.     function thrive_breadcrumbs() {
  35.  
  36.         global $post;
  37.  
  38.         if ( is_404() ) {
  39.             return;
  40.         }
  41.  
  42.         $arrowImg = "&nbsp;ยป";
  43.  
  44.  
  45.         if ( get_option( 'show_on_front' ) == 'page' ) {
  46.             $posts_page_id  = get_option( 'page_for_posts' );
  47.             $posts_page_url = get_page_link( $posts_page_id );
  48.             $homepage_id    = get_option( 'page_on_front' );
  49.             $homepage_url   = empty( $homepage_id ) ? get_option( 'home' ) : get_page_link( $homepage_id );
  50.             echo "<li typeof='v:Breadcrumb'><a rel='v:url' property='v:title' class='home' href='" . $homepage_url . "'> " . __( "Home", 'thrive' ) . $arrowImg . "</a></li>";
  51.             if ( ! is_page() && ! empty( $posts_page_id ) ) {
  52.                 if ( ! is_home() ) {
  53.                     echo "<li typeof='v:Breadcrumb'><a rel='v:url' property='v:title' class='home' href='" . $posts_page_url . "'> " . __( "Blog", 'thrive' ) . $arrowImg . "</a></li>";
  54.                 } else {
  55.                     echo "<li typeof='v:Breadcrumb'><a class='no-link' rel='v:url' property='v:title' href='" . $posts_page_url . "'>" . __( "Blog", 'thrive' ) . "</a></li>";
  56.                 }
  57.             }
  58.         } else {
  59.             echo "<li typeof='v:Breadcrumb'><a rel='v:url' property='v:title' class='home' href='" . get_option( 'home' ) . "'> " . __( "Home", 'thrive' ) . $arrowImg . "</a></li>";
  60.         }
  61.  
  62.  
  63.         if ( is_category() || is_single() ) {
  64.             $cats = get_the_category( $post->ID );
  65.             @usort( $cats, '_usort_terms_by_ID' );
  66.             if ( ! empty( $cats ) ) {
  67.                 if ( isset( $cats[0] ) ) {
  68.                     echo "<li typeof='v:Breadcrumb'><a rel='v:url' property='v:title' href='" . get_category_link( $cats[0]->term_id ) . "'>" . $cats[0]->cat_name . "</a></li>";
  69.                 }
  70.             }
  71.             if ( is_single() ) {
  72.                 if ( ! isset( $cats[0] ) ) {
  73.                     $arrowImg = "";
  74.                 }
  75.                 echo "<li typeof='v:Breadcrumb'><a class='no-link' rel='v:url' property='v:title' href='" . get_permalink( $post->id ) . "'>" . $arrowImg . " ";
  76.                 echo get_the_title();
  77.                 echo "</a></li>";
  78.             }
  79.         } elseif ( is_page() ) {
  80.             if ( $post->post_parent ) {
  81.                 $anc    = array_reverse( get_post_ancestors( $post->ID ) );
  82.                 $output = "";
  83.                 foreach ( $anc as $ancestor ) {
  84.                     $anc_link = get_page_link( $ancestor );
  85.                     $output   .= "<li typeof='v:Breadcrumb'><a rel='v:url' property='v:title' href='" . $anc_link . "'>" . get_the_title( $ancestor ) . " " . $arrowImg . "</a></li>";
  86.                 }
  87.                 echo $output . "<li typeof='v:Breadcrumb'><a class='no-link' rel='v:url' property='v:title' href='" . get_permalink() . "'>";
  88.                 the_title();
  89.                 echo "</a></li>";
  90.             } else {
  91.                 echo "<li typeof='v:Breadcrumb'><a class='no-link' rel='v:url' property='v:title' href='" . get_permalink() . "'>";
  92.                 echo the_title();
  93.                 echo "</a></li>";
  94.             }
  95.         } elseif ( is_tag() ) {
  96.             echo "<li typeof='v:Breadcrumb'>" . single_tag_title( '', false ) . '</li>';
  97.         } elseif ( is_day() ) {
  98.             echo "<li typeof='v:Breadcrumb'>" . __( "Archive", 'thrive' ) . ": ";
  99.             the_time( 'F jS, Y' );
  100.             echo '</li>';
  101.         } elseif ( is_month() ) {
  102.             echo "<li typeof='v:Breadcrumb'>" . __( "Archive", 'thrive' ) . ": ";
  103.             the_time( 'F, Y' );
  104.             echo '</li>';
  105.         } elseif ( is_year() ) {
  106.             echo "<li typeof='v:Breadcrumb'>" . __( "Archive", 'thrive' ) . ": ";
  107.             the_time( 'Y' );
  108.             echo '</li>';
  109.         } elseif ( is_author() ) {
  110.             echo "<li typeof='v:Breadcrumb'>" . __( "Author's archive", 'thrive' ) . ": ";
  111.             echo '</li>';
  112.         } elseif ( isset( $_GET['paged'] ) && ! empty( $_GET['paged'] ) ) {
  113.             echo "<li typeof='v:Breadcrumb'>" . __( "Archive", 'thrive' ) . ": ";
  114.             echo '</li>';
  115.         } elseif ( is_search() ) {
  116.             echo "<li typeof='v:Breadcrumb'>" . __( "Search results", 'thrive' ) . ": ";
  117.         } elseif ( is_archive() ) {
  118.             echo "<li typeof='v:Breadcrumb'>" . __( "Archive", 'thrive' ) . ": ";
  119.             echo '</li>';
  120.         }
  121.  
  122.         return;
  123.     }
  124. endif; //thrive_breadcrumbs
  125.  
  126. /*
  127.  * Render the pagination links
  128.  */
  129.  
  130. function thrive_pagination() {
  131.     global $wp_query;
  132.  
  133.     $total_pages = $wp_query->max_num_pages;
  134.  
  135.     if ( $total_pages > 1 ) {
  136.  
  137.         $current_page = max( 1, get_query_var( 'paged' ) );
  138.  
  139.         /**
  140.          * SUPP-3492 RISE pagination issues on search - Commented out the line
  141.          */
  142.         echo paginate_links( array(
  143. //          'format'  => ( ( get_option( 'permalink_structure' ) && ! $wp_query->is_search ) || ( is_home() && get_option( 'show_on_front' ) !== 'page' && ! get_option( 'page_on_front' ) ) ) ? '?paged=%#%' : '&paged=%#%',
  144.             'current' => $current_page,
  145.             'total'   => $total_pages,
  146.         ) );
  147.     }
  148. }
  149.  
  150. /*
  151.  * Check if the curernt post (or page) has a focus area that needs to be rendered
  152.  * @return Boolean
  153.  */
  154.  
  155. function thrive_check_top_focus_area() {
  156.     if ( is_home() || is_404() ) {
  157.         return false;
  158.     }
  159.  
  160.     global $post;
  161.     if ( ! $post || ! isset( $post->post_type ) ) {
  162.         return false;
  163.     }
  164.     if ( $post->post_type == TT_APPR_POST_TYPE_LESSON || $post->post_type == TT_APPR_POST_TYPE_PAGE ) {
  165.         $post->post_type = "post";
  166.     }
  167.     if ( $post->post_type == "post" ) {
  168.         return _thrive_check_top_focus_area_post( $post );
  169.     } else {
  170.         return _thrive_check_top_focus_area_page( $post );
  171.     }
  172. }
  173.  
  174. function thrive_check_blog_focus_area( $position ) {
  175.     if ( ! is_home() ) {
  176.         return false;
  177.     }
  178.     $query       = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_display_location&meta_value=between_posts&order=ASC" );
  179.     $focus_areas = $query->get_posts();
  180.  
  181.     foreach ( $focus_areas as $temp_focus ) {
  182.         $post_custom_atr = get_post_custom( $temp_focus->ID );
  183.         if ( isset( $post_custom_atr['_thrive_meta_focus_display_between_posts'] ) && isset( $post_custom_atr['_thrive_meta_focus_display_between_posts'][0] ) && $post_custom_atr['_thrive_meta_focus_display_between_posts'][0] == $position ) {
  184.             return true;
  185.         }
  186.     }
  187.  
  188.     return false;
  189. }
  190.  
  191. /*
  192.  * Check if the curernt post (or page) has a focus area that needs to be rendered
  193.  * @return Boolean
  194.  */
  195.  
  196. function thrive_check_bottom_focus_area() {
  197.  
  198.     if ( is_home() || is_404() ) {
  199.         return false;
  200.     }
  201.  
  202.     global $post;
  203.     if ( ! $post || ! isset( $post->post_type ) ) {
  204.         return false;
  205.     }
  206.     if ( $post->post_type == "post" ) {
  207.         return _thrive_check_top_focus_area_post( $post, "bottom" );
  208.     } else {
  209.         return _thrive_check_top_focus_area_page( $post, "bottom" );
  210.     }
  211. }
  212.  
  213. /*
  214.  * Helper function used to check if the curernt post has a focus area that needs to be rendered
  215.  * @param Post object
  216.  * @return Boolean
  217.  */
  218.  
  219. function _thrive_check_top_focus_area_post( $post, $position = "top" ) {
  220.     $custom_fields = get_post_custom( $post->ID );
  221.  
  222.     if ( $position == "top" ) {
  223.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && $post->post_type == "post" ) {
  224.             return true;
  225.         }
  226.  
  227.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && $custom_fields['_thrive_meta_post_focus_area_top'][0] == "hide" && $post->post_type == "post" ) {
  228.             return false;
  229.         }
  230.     } else {
  231.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && $post->post_type == "post" ) {
  232.             return true;
  233.         }
  234.  
  235.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && $custom_fields['_thrive_meta_post_focus_area_bottom'][0] == "hide" && $post->post_type == "post" ) {
  236.             return false;
  237.         }
  238.     }
  239.  
  240.     $post_categories = wp_get_post_categories( $post->ID );
  241.  
  242.     $query1 = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_display_post_type&meta_value=post&order=ASC&posts_per_page=-1" );
  243.     foreach ( $query1->get_posts() as $p ) {
  244.         //check for the top display option
  245.         $post_custom_atr = get_post_custom( $p->ID );
  246.         $focus_cats      = json_decode( $post_custom_atr['_thrive_meta_focus_display_categories'][0] );
  247.         if ( ! is_array( $focus_cats ) ) {
  248.             $focus_cats = array();
  249.         }
  250.  
  251.         if ( isset( $post_custom_atr['_thrive_meta_focus_display_location'] ) && isset( $post_custom_atr['_thrive_meta_focus_display_location'][0] ) && $post_custom_atr['_thrive_meta_focus_display_location'][0] == $position && ( $post_custom_atr['_thrive_meta_focus_display_is_default'][0] == 1 || count( array_intersect( $post_categories, $focus_cats ) ) > 0 ) ) {
  252.             return true;
  253.         }
  254.     }
  255.  
  256.     return false;
  257. }
  258.  
  259. /*
  260.  * Helper function used to check if the curernt page has a focus area that needs to be rendered
  261.  * @param Post object
  262.  * @return Boolean
  263.  */
  264.  
  265. function _thrive_check_top_focus_area_page( $post, $position = "top" ) {
  266.     $custom_fields = get_post_custom( $post->ID );
  267.     if ( $position == "top" ) {
  268.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && $post->post_type == "page" ) {
  269.             return true;
  270.         }
  271.  
  272.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && $custom_fields['_thrive_meta_post_focus_area_top'][0] == "hide" && $post->post_type == "page" ) {
  273.             return false;
  274.         }
  275.     } else {
  276.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && $post->post_type == "page" ) {
  277.             return true;
  278.         }
  279.  
  280.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && $custom_fields['_thrive_meta_post_focus_area_bottom'][0] == "hide" && $post->post_type == "page" ) {
  281.             return false;
  282.         }
  283.     }
  284.     $query2 = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_display_post_type&meta_value=page&order=ASC&posts_per_page=-1" );
  285.  
  286.     $post_categories = wp_get_post_categories( $post->ID );
  287.  
  288.     foreach ( $query2->get_posts() as $p ) {
  289.         $post_custom_atr = get_post_custom( $p->ID );
  290.         if ( isset( $post_custom_atr['_thrive_meta_focus_display_categories'] ) && $post_custom_atr['_thrive_meta_focus_display_categories'][0] ) {
  291.             $focus_cats = json_decode( $post_custom_atr['_thrive_meta_focus_display_categories'][0] );
  292.         } else {
  293.             $focus_cats = array();
  294.         }
  295.         if ( ! is_array( $focus_cats ) ) {
  296.             $focus_cats = array();
  297.         }
  298.  
  299.         if ( isset( $post_custom_atr['_thrive_meta_focus_display_location'] ) && isset( $post_custom_atr['_thrive_meta_focus_display_location'][0] ) && $post_custom_atr['_thrive_meta_focus_display_location'][0] == $position ) {
  300.             return true;
  301.         }
  302.     }
  303.  
  304.     return false;
  305. }
  306.  
  307. /**
  308.  * Renders the top focus area
  309.  */
  310. function thrive_render_top_focus_area( $position = "top", $place = null ) {
  311.     global $post;
  312.     $current_post        = $post;
  313.     $page_focus          = null;
  314.     $post_focus          = null;
  315.     $current_focus       = null;
  316.     $current_focus_attrs = null;
  317.  
  318.     $custom_fields = get_post_custom( $post->ID );
  319.  
  320.     if ( $position == "top" ) {
  321.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && $post->post_type == "post" ) {
  322.             $post_focus = get_post( $custom_fields['_thrive_meta_post_focus_area_top'][0] );
  323.         }
  324.  
  325.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_top'] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_top'][0] ) && $post->post_type == "page" ) {
  326.             $page_focus = get_post( $custom_fields['_thrive_meta_post_focus_area_top'][0] );
  327.         }
  328.     } else {
  329.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && $post->post_type == "post" ) {
  330.             $post_focus = get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] );
  331.         }
  332.  
  333.         if ( isset( $custom_fields['_thrive_meta_post_focus_area_bottom'] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && $post->post_type == "page" ) {
  334.             $page_focus = get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] );
  335.         }
  336.     }
  337.  
  338.     if ( ! $post_focus ) {
  339.         $post_categories = wp_get_post_categories( $post->ID );
  340.         $query1          = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_display_post_type&meta_value=post&order=ASC&posts_per_page=-1" );
  341.         foreach ( $query1->get_posts() as $p ) {
  342.             $post_custom_atr = get_post_custom( $p->ID );
  343.             $focus_cats      = json_decode( $post_custom_atr['_thrive_meta_focus_display_categories'][0] );
  344.             if ( ! is_array( $focus_cats ) ) {
  345.                 $focus_cats = array();
  346.             }
  347.  
  348.             if ( isset( $post_custom_atr['_thrive_meta_focus_display_location'] ) && isset( $post_custom_atr['_thrive_meta_focus_display_location'][0] ) && $post_custom_atr['_thrive_meta_focus_display_location'][0] == $position && ( $post_custom_atr['_thrive_meta_focus_display_is_default'][0] == 1 || count( array_intersect( $post_categories, $focus_cats ) ) > 0 ) ) {
  349.                 $post_focus = $p;
  350.             }
  351.         }
  352.     }
  353.  
  354.     if ( ! $page_focus ) {
  355.         $post_categories = wp_get_post_categories( $post->ID );
  356.         //get the focus area for the posts and for the pages, if any is set
  357.         $query2 = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_display_post_type&meta_value=page&order=ASC&posts_per_page=-1" );
  358.         foreach ( $query2->get_posts() as $p ) {
  359.             $post_custom_atr = get_post_custom( $p->ID );
  360.             if ( isset( $post_custom_atr['_thrive_meta_focus_display_categories'] ) && $post_custom_atr['_thrive_meta_focus_display_categories'][0] ) {
  361.                 $focus_cats = json_decode( $post_custom_atr['_thrive_meta_focus_display_categories'][0] );
  362.             } else {
  363.                 $focus_cats = array();
  364.             }
  365.             if ( ! is_array( $focus_cats ) ) {
  366.                 $focus_cats = array();
  367.             }
  368.             if ( isset( $post_custom_atr['_thrive_meta_focus_display_location'] ) && isset( $post_custom_atr['_thrive_meta_focus_display_location'][0] ) && $post_custom_atr['_thrive_meta_focus_display_location'][0] == $position ) {
  369.                 $page_focus = $p;
  370.             }
  371.         }
  372.     }
  373.  
  374.     if ( $current_post->post_type == "post" ) {
  375.         if ( $post_focus ) {
  376.             $current_focus = $post_focus;
  377.         }
  378.     }
  379.  
  380.     if ( $post->post_type == "page" ) {
  381.         if ( $page_focus ) {
  382.             $current_focus = $page_focus;
  383.         }
  384.     }
  385.  
  386.     if ( $position == "between_posts" ) {
  387.         $query3      = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_display_location&meta_value=between_posts&order=ASC&posts_per_page=-1" );
  388.         $focus_areas = $query3->get_posts();
  389.  
  390.         foreach ( $focus_areas as $temp_focus ) {
  391.             $post_custom_atr = get_post_custom( $temp_focus->ID );
  392.             if ( isset( $post_custom_atr['_thrive_meta_focus_display_between_posts'] ) && isset( $post_custom_atr['_thrive_meta_focus_display_between_posts'][0] ) && $post_custom_atr['_thrive_meta_focus_display_between_posts'][0] == $place ) {
  393.                 $current_focus = $temp_focus;
  394.             }
  395.         }
  396.     }
  397.  
  398.     if ( is_search() && ! $current_focus && $page_focus ) {
  399.         $current_focus = $page_focus;
  400.     }
  401.  
  402.     if ( $place == "blog" || $place == "archive" ) {
  403.  
  404.         if ( $place == "blog" ) {
  405.             $query4 = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_page_blog&meta_value=blog&order=ASC&posts_per_page=-1" );
  406.         } elseif ( $place == "archive" ) {
  407.             $query4 = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_page_archive&meta_value=archive&order=ASC&posts_per_page=-1" );
  408.         }
  409.  
  410.         $focus_areas = $query4->get_posts();
  411.  
  412.         foreach ( $focus_areas as $focus_area ) {
  413.             $post_custom_atr = get_post_custom( $focus_area->ID );
  414.  
  415.             if ( isset( $post_custom_atr['_thrive_meta_focus_display_location'] )
  416.                  && isset( $post_custom_atr['_thrive_meta_focus_display_location'][0] )
  417.                  && $post_custom_atr['_thrive_meta_focus_display_location'][0] == $position
  418.             ) {
  419.                 $current_focus = $focus_area;
  420.             }
  421.         }
  422.     }
  423.  
  424.     /**
  425.      * Danutz: logic for custom Zack focus area
  426.      *
  427.      * @see Everywhere on top option for location of focus area
  428.      * @see child theme made for Zack
  429.      */
  430.     if ( ! $current_focus && $position === 'top_posts' ) {
  431.         $query5      = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_display_location&meta_value=top_posts&order=DESC&posts_per_page=1" );
  432.         $focus_areas = $query5->get_posts();
  433.         if ( ! empty( $focus_areas ) ) {
  434.             $current_focus = current( $focus_areas );
  435.         }
  436.     }
  437.  
  438.     if ( ! $current_focus ) {
  439.         return;
  440.     }
  441.     $current_attrs = get_post_custom( $current_focus->ID );
  442.  
  443.     if ( ! $current_attrs || ! isset( $current_attrs['_thrive_meta_focus_template'] ) || ! isset( $current_attrs['_thrive_meta_focus_template'][0] ) ) {
  444.         return;
  445.     }
  446.  
  447.     if ( isset( $current_attrs['_thrive_meta_focus_optin'] ) && isset( $current_attrs['_thrive_meta_focus_optin'][0] ) ) {
  448.         $optin_id = (int) $current_attrs['_thrive_meta_focus_optin'][0];
  449.  
  450.         //form action
  451.         $optinFormAction = get_post_meta( $optin_id, '_thrive_meta_optin_form_action', true );
  452.  
  453.         //form method
  454.         $optinFormMethod = get_post_meta( $optin_id, '_thrive_meta_optin_form_method', true );
  455.         $optinFormMethod = strtolower( $optinFormMethod );
  456.         $optinFormMethod = $optinFormMethod === 'post' || $optinFormMethod === 'get' ? $optinFormMethod : 'post';
  457.  
  458.         //form hidden inputs
  459.         $optinHiddenInputs = get_post_meta( $optin_id, '_thrive_meta_optin_hidden_inputs', true );
  460.  
  461.         //form fields
  462.         $optinFieldsJson  = get_post_meta( $optin_id, '_thrive_meta_optin_fields_array', true );
  463.         $optinFieldsArray = json_decode( $optinFieldsJson, true );
  464.  
  465.         //form not visible inputs
  466.         $optinNotVisibleInputs = get_post_meta( $optin_id, '_thrive_meta_optin_not_visible_inputs', true );
  467.     } else {
  468.         $optinFieldsArray  = array();
  469.         $optinFormAction   = "";
  470.         $optinHiddenInputs = "";
  471.     }
  472.     $value_focus_template = strtolower( $current_attrs['_thrive_meta_focus_template'][0] );
  473.  
  474.     $base_path = get_template_directory();
  475.     $base_path = apply_filters( 'thrive_focus_preview_template_base_path', $base_path, $current_attrs['_thrive_meta_focus_template'][0] );
  476.  
  477.     $template_path = $base_path . "/focusareas/" . $value_focus_template . ".php";
  478.     if ( $position != "top" ) {
  479.         //echo $template_path; die;
  480.     }
  481.  
  482.     if ( ! empty( $_GET['tve'] ) ) {
  483.         return;
  484.     }
  485.  
  486.     require $template_path;
  487. }
  488.  
  489. /*
  490.  * Renders the bottom focus area
  491.  */
  492.  
  493. function thrive_render_bottom_focus_area() {
  494.     global $post;
  495.     $current_post  = $post;
  496.     $page_focus    = null;
  497.     $post_focus    = null;
  498.     $current_focus = null;
  499.  
  500.     $custom_fields = get_post_custom( $post->ID );
  501.  
  502.     if ( isset( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && $post->post_type == "post" ) {
  503.         $post_focus = get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] );
  504.     }
  505.  
  506.     if ( isset( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && is_numeric( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] ) && $post->post_type == "page" ) {
  507.         $page_focus = get_post( $custom_fields['_thrive_meta_post_focus_area_bottom'][0] );
  508.     }
  509.  
  510.  
  511.     //get the focus area for the posts and for the pages, if any is set
  512.     $query1 = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_display_post_type&meta_value=post&order=ASC&posts_per_page=-1" );
  513.     foreach ( $query1->get_posts() as $p ) {
  514.         $post_custom_atr = get_post_custom( $p->ID );
  515.         if ( isset( $post_custom_atr['_thrive_meta_focus_display_location'] ) && isset( $post_custom_atr['_thrive_meta_focus_display_location'][0] ) && $post_custom_atr['_thrive_meta_focus_display_location'][0] == "bottom" ) {
  516.             $post_focus = $p;
  517.         }
  518.     }
  519.  
  520.     //get the focus area for the posts and for the pages, if any is set
  521.     $query2 = new WP_Query( "post_type=focus_area&meta_key=_thrive_meta_focus_display_post_type&meta_value=page&order=ASC&posts_per_page=-1" );
  522.     foreach ( $query2->get_posts() as $p ) {
  523.         $post_custom_atr = get_post_custom( $p->ID );
  524.         if ( isset( $post_custom_atr['_thrive_meta_focus_display_location'] ) && isset( $post_custom_atr['_thrive_meta_focus_display_location'][0] ) && $post_custom_atr['_thrive_meta_focus_display_location'][0] == "bottom" ) {
  525.             $page_focus = $p;
  526.         }
  527.     }
  528.  
  529.     if ( $current_post->post_type == "post" ) {
  530.         if ( $post_focus ) {
  531.             $current_focus = $post_focus;
  532.         }
  533.     }
  534.  
  535.     if ( $post->post_type == "page" ) {
  536.         if ( $page_focus ) {
  537.             $current_focus = $page_focus;
  538.         }
  539.     }
  540.  
  541.     if ( ! $current_focus ) {
  542.         return;
  543.     }
  544.     $current_attrs = get_post_custom( $current_focus->ID );
  545.  
  546.     if ( ! $current_attrs || ! isset( $current_attrs['_thrive_meta_focus_template'] ) || ! isset( $current_attrs['_thrive_meta_focus_template'][0] ) ) {
  547.         return;
  548.     }
  549.  
  550.     $template_path = get_template_directory() . "/focusareas/" . strtolower( $current_attrs['_thrive_meta_focus_template'][0] ) . "_bottom.php";
  551.  
  552.     require_once $template_path;
  553. }
  554.  
  555. /*
  556.  * Changes the page menu markup in order to render it accordingly to the theme's markup
  557.  * @param string $page_markup The menu markup
  558.  * @return string The new markup
  559.  */
  560.  
  561. function thrive_custom_page_menu( $page_markup ) {
  562.     preg_match( '/^<div class=\"([a-z0-9-_]+)\">/i', $page_markup, $matches );
  563.     $divclass   = $matches[1];
  564.     $toreplace  = array( '<div class="' . $divclass . '">', '</div>' );
  565.     $new_markup = str_replace( $toreplace, '', $page_markup );
  566.     $new_markup = preg_replace( '/^<ul>/i', '<ul id="' . $divclass . '">', $new_markup );
  567.     $new_markup = '<nav class="right">' . $new_markup . '</nav>';
  568.  
  569.     return $new_markup;
  570. }
  571.  
  572. add_filter( 'wp_page_menu', 'thrive_custom_page_menu' );
  573.  
  574. // read more link
  575. add_filter( 'the_content_more_link', 'thrive_more_link', 10, 2 );
  576. function thrive_more_link( $more_link, $more_link_text ) {
  577.     $options          = thrive_get_theme_options();
  578.     $read_more_class  = ( $options['other_read_more_type'] == "button" ) ? "btn dark medium" : "readmore_link";
  579.     $read_more_text   = ( $options['other_read_more_text'] != "" ) ? $options['other_read_more_text'] : "Read more";
  580.     $read_more_text   = ( $options['other_read_more_type'] == "button" ) ? "<span>" . $options['other_read_more_text'] . "</span>" : $options['other_read_more_text'];
  581.     $thrive_more_link = '<a class="' . $read_more_class . '" href="' . get_permalink() . '">' . $read_more_text . '</a>';
  582.  
  583.     return $thrive_more_link;
  584. }
  585.  
  586. /**
  587.  * Because TCB does apply filters on "the_content_more_link"
  588.  * and because of the filter "the_content_more_link" added in this theme
  589.  * This function removes the more_text appended to the excerpt
  590.  *
  591.  * @see  thrive_more_link()
  592.  */
  593. add_filter( "the_excerpt", "thrive_the_excerpt" );
  594. function thrive_the_excerpt( $excerpt ) {
  595.     $thrive_read_more_text = trim( thrive_get_theme_options( 'other_read_more_text' ) );
  596.     $last_occurrence       = strrpos( $excerpt, $thrive_read_more_text );
  597.     if ( $last_occurrence !== false ) {
  598.         $excerpt = substr_replace( $excerpt, "", $last_occurrence, strlen( $thrive_read_more_text ) );
  599.     }
  600.  
  601.     return $excerpt;
  602. }
  603.  
  604. // Adding actions to show and edit the field
  605. add_action( 'show_user_profile', 'thrive_social_fields_display', 10 );
  606. add_action( 'edit_user_profile', 'thrive_social_fields_display', 10 );
  607.  
  608. function thrive_social_fields_display( $user ) {
  609.     $tt_authorbox_image = esc_attr( get_the_author_meta( 'tt_authorbox_image', $user->ID ) );
  610.     if ( empty( $tt_authorbox_image ) ) {
  611.         $tt_authorbox_image = get_template_directory_uri() . "/images/" . TT_DEFAULT_AUTHORBOX_IMAGE;
  612.     }
  613.     require "inc/templates/user-thrive-authorbox-settings.php";
  614. }
  615.  
  616. add_action( 'personal_options_update', 'thrive_save_user_fields' );
  617. add_action( 'edit_user_profile_update', 'thrive_save_user_fields' );
  618.  
  619. function thrive_save_user_fields( $user_id ) {
  620.  
  621.     if ( ! current_user_can( 'edit_user', $user_id ) ) {
  622.         return false;
  623.     }
  624.  
  625.     $show_social_profiles = implode( ',', $_POST["show_social_profiles"] );
  626.  
  627.     $_POST['gauthor']               = ( isset( $_POST['gauthor'] ) ) ? $_POST['gauthor'] : "";
  628.     $_POST['gplus']                 = ( isset( $_POST['gplus'] ) ) ? $_POST['gplus'] : "";
  629.     $_POST['twitter']               = ( isset( $_POST['twitter'] ) ) ? $_POST['twitter'] : "";
  630.     $_POST['facebook']              = ( isset( $_POST['facebook'] ) ) ? $_POST['facebook'] : "";
  631.     $_POST['linkedin']              = ( isset( $_POST['linkedin'] ) ) ? $_POST['linkedin'] : "";
  632.     $_POST['xing']                  = ( isset( $_POST['xing'] ) ) ? $_POST['xing'] : "";
  633.     $_POST['tt_authorbox_image']    = ( isset( $_POST['tt_authorbox_image'] ) ) ? $_POST['tt_authorbox_image'] : "";
  634.     $_POST['thrive_author_website'] = ( isset( $_POST['thrive_author_website'] ) ) ? $_POST['thrive_author_website'] : "";
  635.  
  636.     update_user_meta( $user_id, 'gauthor', $_POST['gauthor'] );
  637.     update_user_meta( $user_id, 'gplus', $_POST['gplus'] );
  638.     update_user_meta( $user_id, 'twitter', $_POST['twitter'] );
  639.     update_user_meta( $user_id, 'facebook', $_POST['facebook'] );
  640.     update_user_meta( $user_id, 'linkedin', $_POST['linkedin'] );
  641.     update_user_meta( $user_id, 'xing', $_POST['xing'] );
  642.     update_user_meta( $user_id, 'show_social_profiles', $show_social_profiles );
  643.     update_user_meta( $user_id, 'thrive_author_website', $_POST['thrive_author_website'] );
  644.     update_user_meta( $user_id, 'tt_authorbox_image', $_POST['tt_authorbox_image'] );
  645.     if ( filter_var( $_POST['tt_authorbox_image'], FILTER_VALIDATE_URL ) ) {
  646.         update_user_meta( $user_id, 'tt_authorbox_image', $_POST['tt_authorbox_image'] );
  647.     } else {
  648.         delete_user_meta( $user_id, 'tt_authorbox_image' );
  649.     }
  650. }
  651.  
  652. // google authorship link
  653. add_action( 'wp_head', 'thrive_gauthorship' );
  654.  
  655. function thrive_gauthorship() {
  656.     if ( is_single() || is_page() ) {
  657.         global $post;
  658.         $user_id     = $post->post_author;
  659.         $g_page      = get_the_author_meta( 'gplus', $user_id );
  660.         $g_activated = get_the_author_meta( 'gauthor', $user_id );
  661.         if ( $g_page && $g_activated ):
  662.             echo '<link rel="author" href="' . $g_page . '"/>';
  663.         endif;
  664.     }
  665. }
  666.  
  667. function thrive_exclude_category( $query ) {
  668.     $hide_cat_option = thrive_get_theme_options( 'hide_cats_from_blog' );
  669.  
  670.     if ( ! is_string( $hide_cat_option ) ) {
  671.         $hide_cat_option = "";
  672.     }
  673.  
  674.     $hide_categories        = is_array( json_decode( $hide_cat_option ) ) ? json_decode( $hide_cat_option ) : array();
  675.     $temp_query_string_part = "";
  676.     foreach ( $hide_categories as $temp_cat_id ) {
  677.         $temp_query_string_part .= "-" . $temp_cat_id . " ";
  678.     }
  679.  
  680.     if ( $query->is_home() ) {
  681.         $query->set( 'cat', $temp_query_string_part );
  682.     }
  683.  
  684.     return $query;
  685. }
  686.  
  687. add_filter( 'pre_get_posts', 'thrive_exclude_category' );
  688.  
  689. // prevent wrapping of paragraph tags around shortcodes
  690. add_filter( 'the_content', 'thrive_remove_autop_shortcodes' );
  691.  
  692. function thrive_remove_autop_shortcodes( $content ) {
  693.     $array = array(
  694.         '<p>['    => '[',
  695.         ']</p>'   => ']',
  696.         ']<br />' => ']'
  697.     );
  698.  
  699.     $content = strtr( $content, $array );
  700.  
  701.     return $content;
  702. }
  703.  
  704. // attach classes that are helpful for CSS to primary menu and remove all pages apart from top level pages from the footer menu
  705. function thrive_menu_set_dropdown( $sorted_menu_items, $args ) {
  706.     if ( isset( $args->theme_location ) && $args->theme_location == "primary" ) {
  707.         $last_top    = 0;
  708.         $post_id_key = array();
  709.  
  710.         foreach ( $sorted_menu_items as $key => $obj ) {
  711.             // if not parent element (class not to be applied to parent element
  712.             if ( 0 != $obj->menu_item_parent ) {
  713.                 $sorted_menu_items[ $last_top ]->classes['dropdown'] = 'toplvl dropdown';
  714.                 // need to map key to post id
  715.                 $post_id_key[ $obj->db_id ] = $key;
  716.  
  717.                 // if menu item has parent
  718.                 if ( $obj->menu_item_parent ) {
  719.                     if ( isset( $post_id_key[ $obj->menu_item_parent ] ) ) {
  720.                         // give parent class identifier
  721.                         $sub_menu_parent_key                                            = $post_id_key[ $obj->menu_item_parent ];
  722.                         $sorted_menu_items[ $sub_menu_parent_key ]->classes['dropdown'] = 'arl';
  723.                     }
  724.                 }
  725.             } else {
  726.                 // top level menu item
  727.                 $sorted_menu_items[ $key ]->classes['dropdown'] = 'toplvl';
  728.                 $last_top                                       = $key;
  729.             }
  730.         }
  731.  
  732.         return $sorted_menu_items;
  733.     }
  734.  
  735.     return $sorted_menu_items;
  736. }
  737.  
  738. add_filter( 'wp_nav_menu_objects', 'thrive_menu_set_dropdown', 10, 2 );
  739.  
  740. require( get_template_directory() . "/inc/clone-post.php" );
  741. require( get_template_directory() . "/inc/theme-update.php" );
  742.  
  743. /*
  744.  * Add a new default avatar image
  745.  */
  746. add_filter( 'avatar_defaults', 'thrive_default_avatar_image' );
  747.  
  748. function thrive_default_avatar_image( $avatar_defaults ) {
  749.     $myavatar                     = get_template_directory_uri() . '/images/default_avatar.png';
  750.     $avatar_defaults[ $myavatar ] = "ThriveDefaultAvatar";
  751.  
  752.     return $avatar_defaults;
  753. }
  754.  
  755. /*
  756.  * Remove the query string for the static scripts and stylesheets used
  757.  * by this theme
  758.  */
  759.  
  760. function thrive_remove_script_version( $src ) {
  761.     $thrive_files = array(
  762.         "script.js",
  763.         "jquery",
  764.         "reset.css",
  765.         "main_blue.css",
  766.         "main_green.css",
  767.         "main_orange.css",
  768.         "main_purple.css",
  769.         "main_red.css"
  770.     );
  771.  
  772.     if ( thrive_strposa( $src, $thrive_files ) ) {
  773.         $my_theme = wp_get_theme();
  774.         $parts    = explode( '?', $src );
  775.  
  776.         return $parts[0] . "?v=" . $my_theme->get( 'Version' );
  777.     }
  778.  
  779.     return $src;
  780. }
  781.  
  782. add_filter( 'script_loader_src', 'thrive_remove_script_version', 15, 1 );
  783. add_filter( 'style_loader_src', 'thrive_remove_script_version', 15, 1 );
  784.  
  785. add_action( 'wp_ajax_thrive_lazy_load_comments', 'thrive_lazy_load_comments' );
  786. add_action( 'wp_ajax_nopriv_thrive_lazy_load_comments', 'thrive_lazy_load_comments' );
  787. add_action( 'tve_dash_main_ajax_theme_comments', 'thrive_lazy_load_comments', 10, 2 );
  788.  
  789. function thrive_lazy_load_comments( $current = '', $post_data = null ) {
  790.     $data              = is_null( $post_data ) ? $_POST : $post_data;
  791.     $post_id           = isset( $data['post_id'] ) ? (int) $data['post_id'] : 0;
  792.     $comment_page      = isset( $data['comment_page'] ) ? (int) $data['comment_page'] : 1;
  793.     $comments_per_page = 10;
  794.  
  795.     $args     = array(
  796.         'post_id'      => $post_id,
  797.         'order'        => strtoupper( get_option( 'comment_order', 'asc' ) ),
  798.         'number'       => $comments_per_page,
  799.         'offset'       => ( $comment_page - 1 ) * $comments_per_page,
  800.         'hierarchical' => true,
  801.     );
  802.     $comments = get_comments( $args );
  803.     if ( ! is_null( $post_data ) ) {
  804.         ob_start();
  805.     }
  806.     wp_list_comments(
  807.         array(
  808.             'callback'          => 'thrive_comments',
  809.             'reverse_top_level' => false
  810.         ),
  811.         $comments );
  812.     if ( ! is_null( $post_data ) ) {
  813.         $content = ob_get_contents();
  814.         ob_end_clean();
  815.  
  816.         return $content;
  817.     }
  818.     wp_die();
  819. }
  820.  
  821. /*
  822.  * Render the comments template and the comments form
  823.  * Used as a callback by wp_list_comments() for displaying the comments.
  824.  */
  825. if ( ! function_exists( 'thrive_comments' ) ) :
  826.     function thrive_comments( $comment, $args, $depth ) {
  827.         $GLOBALS['comment'] = $comment;
  828.         switch ( $comment->comment_type ) :
  829.             case 'trackback' :
  830.                 break;
  831.             case 'pingback' :
  832.             default :
  833.                 // Proceed with normal comments.
  834.                 global $post;
  835.                 if ( ! $post ) {
  836.                     $post = get_post( $comment->comment_post_ID );
  837.                 }
  838.                 $show_comment_date         = thrive_get_theme_options( 'other_show_comment_date' );
  839.                 $relative_time             = thrive_get_theme_options( 'relative_time' );
  840.                 $highlight_author_comments = thrive_get_theme_options( 'highlight_author_comments' );
  841.                 $comment_author            = get_user_by( 'email', get_comment_author_email() );
  842.                 $comment_author_url        = get_comment_author_url();
  843.                 $display_name              = null;
  844.                 $comment_container_class   = "cmc";
  845.                 $comment_author_id         = 0;
  846.                 $color_theme               = thrive_get_theme_options( 'color_scheme' );
  847.                 if ( $comment_author ) {
  848.                     $fname        = get_the_author_meta( 'first_name', $comment_author->ID );
  849.                     $lname        = get_the_author_meta( 'last_name', $comment_author->ID );
  850.                     $author_name  = get_the_author_meta( 'display_name', $comment_author->ID );
  851.                     $display_name = empty( $author_name ) ? $fname . " " . $lname : $author_name;
  852.                     if ( $post->post_author == $comment_author->ID && $highlight_author_comments == 1 ) {
  853.                         $comment_container_class .= " byAut";
  854.                     }
  855.                     $comment_author_id = $comment_author->ID;
  856.                 }
  857.                 if ( ! $display_name || $display_name == "" ) {
  858.                     $display_name = get_comment_author();
  859.                 }
  860.                 $client_ip         = _thrive_get_client_ip();
  861.                 $comment_author_ip = get_comment_author_IP();
  862.                 $user_ID           = get_current_user_id();
  863.                 $commenter = wp_get_current_commenter();
  864.                 $consent = empty( $commenter['comment_author_email'] ) ? '' : ' checked="checked"';
  865.                 ?>
  866.                 <?php if ( _thrive_check_comment_approved( $comment->comment_approved, $client_ip, $comment_author_ip, $user_ID, $comment_author_id ) ): ?>
  867.                 <div class="cmb" id="comment-<?php echo get_comment_ID(); ?>">
  868.                     <div class="<?php echo $comment_container_class; ?>">
  869.                         <div class="left">
  870.                             <?php echo get_avatar( get_comment_author_email(), 50 ); ?>
  871.                         </div>
  872.  
  873.                         <div class="ccr right">
  874.                                 <span class="nam">
  875.                                     <?php if ( $comment_author_url && $comment_author_url != "" ): ?>
  876.                                         <a href="<?php echo $comment_author_url; ?>" target="_blank" rel="nofollow">
  877.                                             <?php echo $display_name; ?>
  878.                                         </a>
  879.                                         <?php _e( 'says', 'thrive' ); ?>
  880.                                     <?php else: ?>
  881.                                         <span class="uNM"><?php echo $display_name; ?></span> <?php _e( 'says', 'thrive' ); ?>
  882.                                     <?php endif; ?>
  883.                                 </span>
  884.                             <span class="uDt">
  885.                                    <?php if ( $show_comment_date == 1 ): ?>
  886.                                        <?php if ( $relative_time == 1 ): ?>
  887.                                            <?php echo thrive_human_time( get_comment_date( 'U' ) ); ?>
  888.                                        <?php else: ?>
  889.                                            <?php echo get_comment_date(); ?>
  890.                                        <?php endif; ?>
  891.                                    <?php endif; ?>
  892.                                 </span>
  893.  
  894.                             <?php if ( '0' == $comment->comment_approved ): ?>
  895.                                 <p class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.', 'thrive' ); ?></p>
  896.                             <?php else: ?>
  897.                                 <p><?php comment_text(); ?></p>
  898.                             <?php endif; ?>
  899.  
  900.                             <?php if ( comments_open() && ! post_password_required() && '0' != $comment->comment_approved ) : ?>
  901.                                 <a class="rpl reply left" href="#"
  902.                                    id="link-reply-<?php echo get_comment_ID(); ?>"
  903.                                    cid="<?php echo get_comment_ID(); ?>">
  904.                                     <?php _e( "Reply", 'thrive' ); ?>
  905.                                 </a>
  906.                             <?php endif; ?>
  907.                             <div class="clear"></div>
  908.  
  909.                         </div>
  910.                         <div class="clear"></div>
  911.                     </div>
  912.                     <div class="lrp" id="respond-container-<?php echo get_comment_ID(); ?>" style="display: none;">
  913.                         <div class="clear"></div>
  914.                         <form action="<?php echo site_url( '/wp-comments-post.php' ) ?>" method="post">
  915.                             <?php if ( ! is_user_logged_in() ): ?>
  916.                                 <div class="llw">
  917.                                     <label for="author"><?php _e( "Name", 'thrive' ); ?><?php if ( get_option( "require_name_email" ) == 1 ) { ?>*<?php } ?></label>
  918.                                     <input type="text" id="author" placeholder="" name="author"/>
  919.                                 </div>
  920.                                 <div class="llw">
  921.                                     <label for="email"><?php _e( "Email", 'thrive' ); ?><?php if ( get_option( "require_name_email" ) == 1 ) { ?>*<?php } ?></label>
  922.                                     <input type="text" id="email" placeholder="" name="email"/>
  923.                                 </div>
  924.                                 <label for="website"><?php _e( "Website", 'thrive' ); ?></label>
  925.                                 <input type="text" id="website" placeholder="" name="website"/>
  926.  
  927.                                 <p class="comment-form-cookies-consent">
  928.                                     <input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" <?php echo $consent; ?>/>
  929.                                     <label for="wp-comment-cookies-consent">
  930.                                         <?php echo __( 'Save my name, email, and website in this browser for the next time I comment.', 'thrive' ); ?>
  931.                                     </label>
  932.                                 </p>
  933.                             <?php endif; ?>
  934.                             <label for="comment"><?php _e( 'Comment', 'thrive' ); ?></label>
  935.                             <textarea id="comment" name="comment" class="textarea"></textarea>
  936.  
  937.                             <?php echo apply_filters( 'comment_form_submit_field', '' ); ?>
  938.  
  939.                             <div class="btn <?php echo $color_theme; ?> small">
  940.                                 <input type="submit" value="<?php _e( "Post Comment", 'thrive' ); ?>">
  941.                             </div>
  942.  
  943.                             <input id="comment_post_ID" type="hidden" value="<?php echo get_the_ID(); ?>" name="comment_post_ID">
  944.                             <input id="comment_parent" type="hidden" value="<?php echo get_comment_ID(); ?>" name="comment_parent">
  945.                         </form>
  946.                         <a href="#" class="rpl right cancel_reply" cid="<?php echo get_comment_ID(); ?>">
  947.                             <?php _e( "Cancel", 'thrive' ); ?>
  948.                         </a>
  949.  
  950.                         <div class="clear"></div>
  951.                     </div>
  952.                 </div>
  953.                 <div class="clear"></div>
  954.                 <div class="lrp" style="display: none;" id="respond-container-<?php echo get_comment_ID(); ?>">
  955.                 </div>
  956.             <?php endif; ?>
  957.                 <?php
  958.                 break;
  959.         endswitch;
  960.     }
  961. endif; //thrive_comments
  962.  
  963. /*
  964.  * Add custom items to the menu from the admin part.
  965.  */
  966. add_filter( 'wp_setup_nav_menu_item', 'thrive_custom_admin_nav_item' );
  967.  
  968. function thrive_custom_admin_nav_item( $menu_item ) {
  969.     $menu_item->extended_activate     = get_post_meta( $menu_item->ID, '_menu_item_extended_activate', true );
  970.     $menu_item->highlight_menu        = get_post_meta( $menu_item->ID, '_menu_item_highlight_menu_item', true );
  971.     $menu_item->extended_columns      = get_post_meta( $menu_item->ID, '_menu_item_extended_columns', true );
  972.     $menu_item->extended_heading      = get_post_meta( $menu_item->ID, '_menu_item_extended_heading', true );
  973.     $menu_item->extended_disable_link = get_post_meta( $menu_item->ID, '_menu_item_extended_disable_link', true );
  974.     $menu_item->extended_text_chk     = get_post_meta( $menu_item->ID, '_menu_item_extended_text_chk', true );
  975.     $menu_item->extended_free_text    = get_post_meta( $menu_item->ID, '_menu_item_extended_free_text', true );
  976.  
  977.     return $menu_item;
  978. }
  979.  
  980. add_action( 'wp_update_nav_menu_item', 'thrive_custom_admin_nav_update', 10, 3 );
  981.  
  982. function thrive_custom_admin_nav_update( $menu_id, $menu_item_db_id, $args ) {
  983.     if ( isset( $_REQUEST['menu-item-extended-activate'][ $menu_item_db_id ] ) && is_array( $_REQUEST['menu-item-extended-activate'] ) ) {
  984.         $custom_value = $_REQUEST['menu-item-extended-activate'][ $menu_item_db_id ];
  985.         update_post_meta( $menu_item_db_id, '_menu_item_extended_activate', $custom_value );
  986.     } else {
  987.         update_post_meta( $menu_item_db_id, '_menu_item_extended_activate', 'off' );
  988.     }
  989.  
  990.     if ( isset( $_REQUEST['menu-item-highlight-menu-item'][ $menu_item_db_id ] ) && is_array( $_REQUEST['menu-item-highlight-menu-item'] ) ) {
  991.         $custom_value = $_REQUEST['menu-item-highlight-menu-item'][ $menu_item_db_id ];
  992.         update_post_meta( $menu_item_db_id, '_menu_item_highlight_menu_item', $custom_value );
  993.     } else {
  994.         update_post_meta( $menu_item_db_id, '_menu_item_highlight_menu_item', 'off' );
  995.     }
  996.  
  997.     if ( isset( $_REQUEST['menu-item-extended-columns'][ $menu_item_db_id ] ) && is_array( $_REQUEST['menu-item-extended-columns'] ) ) {
  998.         $custom_value = $_REQUEST['menu-item-extended-columns'][ $menu_item_db_id ];
  999.         update_post_meta( $menu_item_db_id, '_menu_item_extended_columns', $custom_value );
  1000.     }
  1001.  
  1002.     if ( isset( $_REQUEST['menu-item-extended-heading'][ $menu_item_db_id ] ) && is_array( $_REQUEST['menu-item-extended-heading'] ) ) {
  1003.         $custom_value = $_REQUEST['menu-item-extended-heading'][ $menu_item_db_id ];
  1004.         update_post_meta( $menu_item_db_id, '_menu_item_extended_heading', $custom_value );
  1005.     } else {
  1006.         if ( get_post_meta( $menu_item_db_id, '_menu_item_extended_heading', true ) == '' ) {
  1007.             update_post_meta( $menu_item_db_id, '_menu_item_extended_heading', 'on' );
  1008.         } else {
  1009.             update_post_meta( $menu_item_db_id, '_menu_item_extended_heading', 'off' );
  1010.         }
  1011.     }
  1012.  
  1013.     if ( isset( $_REQUEST['menu-item-extended-disable-link'][ $menu_item_db_id ] ) && is_array( $_REQUEST['menu-item-extended-disable-link'] ) ) {
  1014.         $custom_value = $_REQUEST['menu-item-extended-disable-link'][ $menu_item_db_id ];
  1015.         update_post_meta( $menu_item_db_id, '_menu_item_extended_disable_link', $custom_value );
  1016.     } else {
  1017.         update_post_meta( $menu_item_db_id, '_menu_item_extended_disable_link', 'off' );
  1018.     }
  1019.  
  1020.     if ( isset( $_REQUEST['menu-item-extended-text-chk'][ $menu_item_db_id ] ) && is_array( $_REQUEST['menu-item-extended-text-chk'] ) ) {
  1021.         $custom_value = $_REQUEST['menu-item-extended-text-chk'][ $menu_item_db_id ];
  1022.         update_post_meta( $menu_item_db_id, '_menu_item_extended_text_chk', $custom_value );
  1023.     } else {
  1024.         update_post_meta( $menu_item_db_id, '_menu_item_extended_text_chk', 'off' );
  1025.     }
  1026.  
  1027.     if ( isset( $_REQUEST['menu-item-extended-free-text'][ $menu_item_db_id ] ) && is_array( $_REQUEST['menu-item-extended-free-text'] ) ) {
  1028.         $custom_value = $_REQUEST['menu-item-extended-free-text'][ $menu_item_db_id ];
  1029.         update_post_meta( $menu_item_db_id, '_menu_item_extended_free_text', $custom_value );
  1030.     }
  1031. }
  1032.  
  1033. add_filter( 'wp_edit_nav_menu_walker', 'thrive_function_admin_custom_menu_walker', 10, 2 );
  1034.  
  1035.  
  1036. function custom_nav_edit_walker( $walker, $menu_id ) {
  1037.     return 'Walker_Nav_Menu_Edit_Custom';
  1038. }
  1039.  
  1040. /*
  1041.  * add custom font css
  1042.  */
  1043. add_action( "tha_head_top", "thrive_load_font_css" );
  1044.  
  1045. function thrive_load_font_css( $font ) {
  1046.  
  1047.     $fonts = (array) json_decode( get_option( 'thrive_font_manager_options' ) );
  1048.     if ( ! $fonts || ! is_array( $fonts ) ) {
  1049.         return;
  1050.     }
  1051.     echo '<style type="text/css">';
  1052.  
  1053.     foreach ( $fonts as $font ) {
  1054.         echo ' .' . $font->font_class . '{';
  1055.         echo "font-family: " . thrive_prepare_font_family( $font->font_name ) . ";";
  1056.         echo 'font-size:' . $font->font_size . ';';
  1057.         echo 'line-height:' . $font->font_height . ';';
  1058.         echo 'color:' . $font->font_color . ';';
  1059.         echo '} ';
  1060.         echo $font->custom_css;
  1061.     }
  1062.  
  1063.     echo '</style>';
  1064. }
  1065.  
  1066. /**
  1067.  * Prepare font family name to be added to css rule
  1068.  *
  1069.  * @param $font_family
  1070.  *
  1071.  * @return string
  1072.  */
  1073. function thrive_prepare_font_family( $font_family ) {
  1074.     $chunks = explode( ",", $font_family );
  1075.     $length = count( $chunks );
  1076.     $font   = "";
  1077.     foreach ( $chunks as $key => $value ) {
  1078.         $font .= "'" . trim( $value ) . "'";
  1079.         $font .= ( $key + 1 ) < $length ? ", " : "";
  1080.     }
  1081.  
  1082.     return $font;
  1083. }
  1084.  
  1085. function thrive_save_post_font( $post_id ) {
  1086.  
  1087.     $post_content = get_post_field( 'post_content', $post_id );
  1088.     preg_match_all( "/thrive_custom_font id='\d+'/", $post_content, $font_ids );
  1089.  
  1090.     $post_fonts = array();
  1091.     foreach ( $font_ids[0] as $font_id ) {
  1092.         $parts = explode( "'", $font_id );
  1093.         $id    = $parts[1];
  1094.         $font  = thrive_get_font_options( $id );
  1095.         if ( tve_dash_font_manager_is_safe_font( $font->font_name ) ) {
  1096.             continue;
  1097.         }
  1098.         if ( Tve_Dash_Font_Import_Manager::isImportedFont( $font->font_name ) ) {
  1099.             $post_fonts[] = Tve_Dash_Font_Import_Manager::getCssFile();
  1100.             continue;
  1101.         }
  1102.         $post_fonts[] = "//fonts.googleapis.com/css?family=" . str_replace( " ", "+", $font->font_name ) . ( $font->font_style != 0 ? ":" . $font->font_style : "" ) . ( $font->font_bold != 0 ? "," . $font->font_bold : "" ) . ( $font->font_italic != 0 ? $font->font_italic : "" ) . ( $font->font_character_set != 0 ? "&subset=" . $font->font_character_set : "" );
  1103.     }
  1104.     $post_fonts = array_unique( $post_fonts );
  1105.     update_post_meta( $post_id, 'thrive_post_fonts', sanitize_text_field( json_encode( $post_fonts ) ) );
  1106. }
  1107.  
  1108. add_action( 'save_post', 'thrive_save_post_font' );
  1109.  
  1110. function thrive_enqueue_head_fonts() {
  1111.  
  1112.     if ( is_singular() ) {
  1113.         $post_id = get_the_ID();
  1114.     } else {
  1115.         $post_id = array();
  1116.         if ( have_posts() ) {
  1117.             while ( have_posts() ) {
  1118.                 the_post();
  1119.                 $post_id[] = get_the_ID();
  1120.             }
  1121.         }
  1122.     }
  1123.     if ( is_array( $post_id ) ) {
  1124.         foreach ( $post_id as $id ) {
  1125.             $fonts = json_decode( get_post_meta( $id, 'thrive_post_fonts', true ) );
  1126.             if ( $fonts != null ) {
  1127.                 foreach ( $fonts as $key => $font ) {
  1128.                     wp_enqueue_style( 'tcf_' . md5( $font ), $font );
  1129.                 }
  1130.             }
  1131.         }
  1132.     } else {
  1133.         $fonts = json_decode( get_post_meta( $post_id, 'thrive_post_fonts', true ) );
  1134.         if ( $fonts != null ) {
  1135.             foreach ( $fonts as $key => $font ) {
  1136.                 wp_enqueue_style( 'tcf_' . md5( $font ), $font );
  1137.             }
  1138.         }
  1139.     }
  1140. }
  1141.  
  1142. add_filter( 'is_protected_meta', 'thrive_hide_custom_fields', 10, 2 );
  1143.  
  1144. function thrive_hide_custom_fields( $protected, $meta_key ) {
  1145.     $keys = array(
  1146.         'thrive_post_fonts',
  1147.         'thrive_share_count'
  1148.     );
  1149.  
  1150.     if ( in_array( $meta_key, $keys ) ) {
  1151.         return true;
  1152.     }
  1153.  
  1154.     return $protected;
  1155. }
  1156.  
  1157. add_action( 'wp_ajax_thrive_get_share_count', 'thrive_get_share_count' );
  1158. add_action( 'wp_ajax_nopriv_thrive_get_share_count', 'thrive_get_share_count' );
  1159.  
  1160. add_action( 'tve_dash_main_ajax_theme_shares', 'thrive_dash_social_ajax_share_counts', 10, 2 );
  1161.  
  1162. /**
  1163.  * return share counts to the dashboard main ajax call
  1164.  *
  1165.  * @param array $current
  1166.  * @param array $post_data
  1167.  */
  1168. function thrive_dash_social_ajax_share_counts( $current, $post_data ) {
  1169.     return thrive_get_share_count( true, $post_data );
  1170. }
  1171.  
  1172. /**
  1173.  * @param bool|false $return
  1174.  * @param null $post_data
  1175.  *
  1176.  * @return mixed
  1177.  */
  1178. function thrive_get_share_count( $return = false, $post_data = null ) {
  1179.     $post_data = null !== $post_data ? $post_data : $_REQUEST;
  1180.  
  1181.     if ( isset( $post_data['post_id'] ) ) {
  1182.         $post_id = $post_data['post_id'];
  1183.     } else {
  1184.         $post_id = 0;
  1185.     }
  1186.  
  1187.     if ( empty( $post_id ) ) {
  1188.         return '';
  1189.     }
  1190.  
  1191.     $cache_lifetime = apply_filters( 'thrive_cache_shares_lifetime', 300 );
  1192.  
  1193.     $share_count = json_decode( get_post_meta( $post_id, 'thrive_share_count', true ), true );
  1194.     if ( empty( $share_count ) ) {
  1195.         $share_count = array();
  1196.     }
  1197.  
  1198.     $post_link = get_permalink( $post_id );
  1199.     if ( ! empty( $share_count['url'] ) && $share_count['url'] != $post_link ) { // if url has changed => refresh the cache
  1200.         $share_count = array();
  1201.     }
  1202.  
  1203.     if ( empty( $_POST['no_cache'] ) && ! empty( $share_count['last_fetch'] ) && time() < $share_count['last_fetch'] + $cache_lifetime ) {
  1204.         if ( $return ) {
  1205.             return $share_count['total'] . ' ' . _n( 'Share', 'Shares', $share_count['total'], 'thrive' );
  1206.         }
  1207.         exit( $share_count['total'] . ' ' . _n( 'Share', 'Shares', $share_count['total'], 'thrive' ) );
  1208.     }
  1209.  
  1210.     $fb = thrive_get_facebook_share( $post_link );
  1211.     if ( ! empty( $fb ) || ! isset( $share_count['facebook'] ) ) {
  1212.         $share_count['facebook'] = $fb;
  1213.     }
  1214.  
  1215.     $share_count['twitter'] = 0;
  1216.  
  1217.     $po = thrive_get_plusones_shares( $post_link );
  1218.     if ( ! empty( $po ) || ! isset( $share_count['plusone'] ) ) {
  1219.         $share_count['plusone'] = $po;
  1220.     }
  1221.  
  1222.     $pinterest = thrive_get_plusones_shares( $post_link, 'pinterest' );
  1223.     if ( ! empty( $pinterest ) || ! isset( $share_count['pinterest'] ) ) {
  1224.         $share_count['pinterest'] = $pinterest;
  1225.     }
  1226.     $li = thrive_get_linkedin_share( $post_link );
  1227.     if ( ! empty( $li ) || ! isset( $share_count['linkedin'] ) ) {
  1228.         $share_count['linkedin'] = $li;
  1229.     }
  1230.     $total = 0;
  1231.     foreach ( $share_count as $network => $count ) {
  1232.         if ( $network == 'last_fetch' || $network == 'total' || $network == 'url' ) {
  1233.             continue;
  1234.         }
  1235.         $total += $count;
  1236.     }
  1237.     $share_count['total']      = $total;
  1238.     $share_count['last_fetch'] = time();
  1239.     $share_count['url']        = $post_link;
  1240.     //update post meta options
  1241.     update_post_meta( $post_id, 'thrive_share_count', sanitize_text_field( json_encode( $share_count ) ) );
  1242.  
  1243.     if ( $return ) {
  1244.         return $total . ' ' . _n( 'Share', 'Shares', $total + 12321, 'thrive' );
  1245.     }
  1246.     exit( $total . ' ' . _n( 'Share', 'Shares', $total, 'thrive' ) );
  1247. }
  1248.  
  1249. add_theme_support( 'woocommerce' );
  1250.  
  1251. /*
  1252.  * Custom title output
  1253.  */
  1254. if ( ! function_exists( 'thrive_wp_title' ) ) :
  1255.     function thrive_wp_title( $title ) {
  1256.         if ( is_front_page() ) {
  1257.             return get_bloginfo( 'name' ) . ' | ' . get_bloginfo( 'description' );
  1258.         } elseif ( is_feed() ) {
  1259.             return ' | RSS Feed';
  1260.         } else {
  1261.             return trim( $title, '| ' ) . ' | ' . get_bloginfo( 'name' );
  1262.         }
  1263.  
  1264.     }
  1265.  
  1266.     add_filter( 'wp_title', 'thrive_wp_title' );
  1267. endif;
  1268.  
  1269. /**
  1270.  * add custom classes for woocommerce - the right way
  1271.  */
  1272. add_filter( 'body_class', 'thrive_body_class' );
  1273.  
  1274. /**
  1275.  * check if Woocommerce specific pages and append required classes
  1276.  *
  1277.  * @param array $classes
  1278.  *
  1279.  * @return array
  1280.  */
  1281. function thrive_body_class( $classes ) {
  1282.     if ( class_exists( 'WooCommerce' ) ) {
  1283.         $classes [] = 'tve-woo-minicart';
  1284.     } else {
  1285.         return $classes;
  1286.     }
  1287.  
  1288.     if ( _thrive_check_is_woocommerce_page() || thrive_has_woo_shortcode() ) {
  1289.         $classes [] = 'tve-woocommerce';
  1290.     }
  1291.  
  1292.     return $classes;
  1293. }
  1294.  
  1295. add_filter( 'get_avatar_url', 'thrive_get_avatar_url', 10, 3 );
  1296. /**
  1297.  * Filter the avatar url
  1298.  * Returns the thrive user image if is set
  1299.  *
  1300.  * @param $url
  1301.  * @param $id_or_email
  1302.  *
  1303.  * @return string
  1304.  */
  1305. function thrive_get_avatar_url( $url, $id_or_email ) {
  1306.     if ( is_numeric( $id_or_email ) && $user = get_user_by( 'id', absint( $id_or_email ) ) ) {
  1307.         $thrive_url = get_user_meta( $user->ID, 'tt_authorbox_image', true );
  1308.         /** just some check for backwards compatibility */
  1309.         if ( strpos( $thrive_url, 'TT_DEFAULT_AUTHORBOX_IMAGE' ) !== false ) {
  1310.             return $url;
  1311.         }
  1312.  
  1313.         if ( ! empty( $thrive_url ) ) {
  1314.             return $thrive_url;
  1315.         }
  1316.     }
  1317.  
  1318.     return $url;
  1319. }
  1320.  
  1321. /**
  1322.  *  Display navigation to next/previous comments when applicable.
  1323.  */
  1324. function thrive_theme_comment_nav() {
  1325.     // Are there comments to navigate through?
  1326.     if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) {
  1327.         echo "<div class='pgn clearfix'>";
  1328.  
  1329.         if ( $prev_link = get_previous_comments_link( __( 'Older Comments', 'thrive' ) ) ) {
  1330.             printf( '%s', $prev_link );
  1331.         }
  1332.  
  1333.         if ( $next_link = get_next_comments_link( __( 'Newer Comments', 'thrive' ) ) ) {
  1334.             printf( '%s', $next_link );
  1335.         }
  1336.  
  1337.         echo "</div><!-- .nav-links -->";
  1338.     }
  1339. }
  1340.  
  1341. /**
  1342.  * return the previous comments page link's class
  1343.  *
  1344.  * @return string
  1345.  */
  1346. function thrive_get_previous_comments_link_attributes() {
  1347.     return 'class="prev page-numbers"';
  1348. }
  1349.  
  1350. /**
  1351.  * return the next comments page link's class
  1352.  *
  1353.  * @return string
  1354.  */
  1355. function thrive_get_next_comments_link_attributes() {
  1356.     return 'class="next page-numbers"';
  1357. }
  1358.  
  1359. add_action( 'wp_head', 'thrive_fb_comments_moderators' );
  1360.  
  1361. /**
  1362.  * output the meta tags needed for FB comments moderation tool
  1363.  *
  1364.  * <meta property="fb:admins" content="{YOUR_FACEBOOK_USER_ID}"/>
  1365.  *
  1366.  */
  1367. function thrive_fb_comments_moderators() {
  1368.     $fb_moderators = thrive_get_theme_options( 'fb_moderators' );
  1369.     $fb_app_id     = thrive_get_theme_options( 'fb_app_id' );
  1370.  
  1371.     if ( empty( $fb_moderators ) ) {
  1372.         return;
  1373.     }
  1374.  
  1375.     if ( ! is_singular() && ! is_front_page() && ! is_home() ) {
  1376.         return;
  1377.     }
  1378.  
  1379.     foreach ( $fb_moderators as $moderator ) {
  1380.         echo sprintf( '<meta property="fb:admins" content="%s"/>', $moderator );
  1381.     }
  1382.  
  1383.     echo sprintf( '<meta property="fb:app_id" content="%s"/>', $fb_app_id );
  1384.  
  1385. }
  1386.  
  1387. /**
  1388.  * Get ttw url
  1389.  *
  1390.  * @return string
  1391.  */
  1392. function thrive_get_ttw_url() {
  1393.     $affiliate_id = get_option( 'thrive_affiliate_id' );
  1394.  
  1395.     return ! empty( $affiliate_id ) ?
  1396.         'https://thrivethemes.com/affiliates/ref.php?id=' . $affiliate_id :
  1397.         'https://www.thrivethemes.com';
  1398.  
  1399. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top