functions.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. <?php
  2. /*************************************************
  3. // ############### parent theme ################## //
  4. **************************************************/
  5. add_action( 'wp_enqueue_scripts', 'enqueue_parent_styles' );
  6. function enqueue_parent_styles() {
  7. wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' );
  8. }
  9. /*************************************************
  10. // ############### require ################## //
  11. **************************************************/
  12. //require get_stylesheet_directory() . '/inc/cust-func.php';
  13. /*************************************************
  14. // ############### wp_head ################## //
  15. **************************************************/
  16. remove_action('wp_head', 'index_rel_link' );
  17. remove_action('wp_head', 'rel_canonical');
  18. remove_action('wp_head', 'start_post_rel_link', 10);
  19. remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10);
  20. remove_action('wp_head', 'wp_shortlink_wp_head', 10);
  21. remove_action('wp_head', 'parent_post_rel_link', 10);
  22. remove_action('wp_head', 'rsd_link');
  23. remove_action('wp_head', 'wlwmanifest_link');
  24. remove_action('wp_head', 'wp_generator');
  25. remove_action('wp_head', 'feed_links_extra', 3 );
  26. remove_action('wp_head', 'feed_links', 2 );
  27. remove_action('wp_head', 'wp_oembed_add_discovery_links', 10);
  28. remove_action('wp_head', 'wp_oembed_add_host_js', 10);
  29. remove_action('wp_head', 'rest_output_link_wp_head', 10);
  30. remove_action('template_redirect', 'rest_output_link_header', 11, 0);
  31. function dwp_remove_wp_ver_css_js( $src ) {
  32. if ( strpos( $src, 'ver=' ) )
  33. $src = remove_query_arg( 'ver', $src );
  34. return $src;
  35. }
  36. add_filter( 'style_loader_src', 'dwp_remove_wp_ver_css_js', 9999 );
  37. add_filter( 'script_loader_src', 'dwp_remove_wp_ver_css_js', 9999 );
  38. add_filter( 'xmlrpc_enabled', '__return_false' );
  39. add_filter( 'wp_headers', 'dwp_disable_x_pingback' );
  40. function dwp_disable_x_pingback( $headers ) {
  41. unset( $headers['X-Pingback'] );
  42. return $headers;
  43. }
  44. /*************************************************
  45. // ############### Emojis ################## //
  46. **************************************************/
  47. function dwp_disable_emojis() {
  48. remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
  49. remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
  50. remove_action( 'wp_print_styles', 'print_emoji_styles' );
  51. remove_action( 'admin_print_styles', 'print_emoji_styles' );
  52. remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
  53. remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
  54. remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
  55. //add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
  56. add_filter( 'emoji_svg_url', '__return_false' );
  57. }
  58. add_action( 'init', 'dwp_disable_emojis' );
  59. /*************************************************
  60. // ############ style-admin.css ############## //
  61. **************************************************/
  62. add_action('admin_enqueue_scripts', 'dwp_admin_theme_style');
  63. function dwp_admin_theme_style() {
  64. wp_enqueue_style('dwp-theme', get_stylesheet_directory_uri() . '/style-admin.css');
  65. }
  66. /*************************************************
  67. // ############## Admin pages ################ //
  68. **************************************************/
  69. add_action( 'admin_menu', 'dwp_remove_admin_pages', 99 );
  70. function dwp_remove_admin_pages() {
  71. /*
  72. remove_menu_page( 'tools.php' );
  73. remove_menu_page( 'edit.php?post_type=page' );
  74. remove_menu_page( 'edit.php?post_type=portfolio' );
  75. remove_menu_page( 'edit-comments.php' );
  76. remove_menu_page( 'edit.php' );
  77. remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=category');
  78. remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag');
  79. remove_menu_page( 'upload.php' );
  80. remove_menu_page( 'themes.php' );
  81. remove_menu_page( 'plugins.php' );
  82. remove_menu_page( 'users.php' );
  83. remove_menu_page( 'profile.php' );
  84. remove_menu_page( 'options-general.php' );
  85. */
  86. }
  87. /*************************************************
  88. // ######### email from:/reply-to ############# //
  89. **************************************************/
  90. add_filter('wp_mail_from', 'dwp_fromemail');
  91. function dwp_fromemail($email) {
  92. $wpfrom = get_option('admin_email');
  93. return $wpfrom;
  94. }
  95. /*************************************************
  96. // ######### rm 'WordPress' admin title ####### //
  97. **************************************************/
  98. add_filter('admin_title', 'dwp_admin_title', 10, 2);
  99. function dwp_admin_title($admin_title, $title) {
  100. return get_bloginfo('name').' - '.$title;
  101. }
  102. /*************************************************
  103. // ############## login/out ################### //
  104. **************************************************/
  105. add_action('wp_logout','dwp_redirect_after_logout');
  106. function dwp_redirect_after_logout(){
  107. wp_safe_redirect( home_url() );
  108. exit();
  109. }
  110. add_filter( 'login_headertext', 'dwp_login_title' );
  111. function dwp_login_title() {
  112. return get_option( 'blogname' );
  113. }
  114. add_filter( 'login_title', 'dwp_login_wp_title' );
  115. function dwp_login_wp_title( $login_title ) {
  116. return str_replace(array( ' &lsaquo;', ' &#8212; WordPress'), array( ' &lsaquo;', ''),$login_title );
  117. }
  118. add_filter( 'login_headerurl', 'dwp_login_url' );
  119. function dwp_login_url($url) {
  120. return home_url();
  121. }
  122. //add_filter( 'login_redirect', 'dwp_login_redirect', 10, 3 );
  123. //function dwp_login_redirect( $redirect_to, $request, $user ){
  124. // return home_url();
  125. //}
  126. add_action( 'login_enqueue_scripts', 'dwp_login_logo' );
  127. function dwp_login_logo() { ?>
  128. <style type="text/css">
  129. body.login {
  130. background-color: #333;
  131. }
  132. #login h1 a, .login h1 a {
  133. background-image: url(<?php echo get_stylesheet_directory_uri(); ?>/img/logo.png);
  134. height:130px;
  135. width:320px;
  136. background-size: 320px 130px;
  137. background-repeat: no-repeat;
  138. padding-bottom: 10px;
  139. }
  140. </style>
  141. <?php }
  142. /*************************************************
  143. // ############ admin menu order ############## //
  144. **************************************************/
  145. add_filter( 'custom_menu_order', '__return_true' );
  146. add_filter( 'menu_order', 'dwp_change_menu_order' );
  147. function dwp_change_menu_order( $menu_order ) {
  148. return array(
  149. 'index.php',
  150. 'edit.php',
  151. 'edit.php?post_type=page',
  152. 'upload.php',
  153. );
  154. }
  155. /*************************************************
  156. // ############# Admin Bar ################## //
  157. **************************************************/
  158. add_filter('show_admin_bar', '__return_false');
  159. add_filter('show_recent_comments_widget_style', function() { return false; });
  160. add_action( 'admin_bar_menu', 'dwp_remove_adminbar', 999 );
  161. function dwp_remove_adminbar( $wp_admin_bar ) {
  162. $wp_admin_bar->remove_node( 'wp-logo' );
  163. $wp_admin_bar->remove_menu( 'edit' );
  164. $wp_admin_bar->remove_menu( 'new-user' );
  165. $wp_admin_bar->remove_menu( 'new-post' );
  166. $wp_admin_bar->remove_menu( 'new-page' );
  167. $wp_admin_bar->remove_node( 'new-media' );
  168. $wp_admin_bar->remove_menu( 'edit-profile' );
  169. $wp_admin_bar->remove_menu( 'comments' );
  170. }
  171. function dwp_remove_new_content(){
  172. global $wp_admin_bar;
  173. $wp_admin_bar->remove_menu( 'new-content' );
  174. }
  175. add_action( 'wp_before_admin_bar_render', 'dwp_remove_new_content' );
  176. /*************************************************
  177. // ############ admin footer ############## //
  178. **************************************************/
  179. add_filter('admin_footer_text', '__return_empty_string', 1000);
  180. add_filter('update_footer', '__return_empty_string', 1000);
  181. /*************************************************
  182. // ############ dashboard items ################ //
  183. **************************************************/
  184. remove_action('welcome_panel', 'wp_welcome_panel');
  185. add_filter('screen_options_show_screen', '__return_false');
  186. add_action('admin_head', 'dwp_remove_help_tabs');
  187. function dwp_remove_help_tabs() {
  188. $screen = get_current_screen();
  189. $screen->remove_help_tabs();
  190. }
  191. add_action( 'admin_init', 'dwp_remove_dashboard_meta' );
  192. function dwp_remove_dashboard_meta() {
  193. remove_meta_box( 'dashboard_site_health', 'dashboard', 'normal' );
  194. remove_meta_box( 'dashboard_incoming_links', 'dashboard', 'normal' );
  195. remove_meta_box( 'dashboard_plugins', 'dashboard', 'normal' );
  196. remove_meta_box( 'dashboard_primary', 'dashboard', 'normal' );
  197. remove_meta_box( 'dashboard_secondary', 'dashboard', 'normal' );
  198. remove_meta_box( 'dashboard_incoming_links', 'dashboard', 'normal' );
  199. remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );
  200. }
  201. /*************************************************
  202. // ####### comments on attachments ############# //
  203. **************************************************/
  204. add_action( 'pre_comment_on_post', 'dwp_remove_comments_from_attachments', 10, 2 );
  205. function dwp_remove_comments_from_attachments( $open, $post_id ){
  206. return ( 'attachment' == get_post_type( $post_id ) ) ? false : $open;
  207. }
  208. add_filter( 'comments_open', 'dwp_filter_media_comment_status', 10 , 2 );
  209. function dwp_filter_media_comment_status( $open, $post_id ) {
  210. $post = get_post( $post_id );
  211. if( $post->post_type == 'attachment' ) {
  212. return false;
  213. }
  214. return $open;
  215. }
  216. /*************************************************
  217. // ####### menus for logged in/out ############# //
  218. create two menus named 'logged-in' & 'logged-out
  219. in top-navigation location of theme
  220. **************************************************/
  221. add_filter( 'wp_nav_menu_args', 'dwp_nav_menu_args' );
  222. function dwp_nav_menu_args( $args = '' ) {
  223. if( is_user_logged_in() ) {
  224. if( 'top-navigation' == $args['theme_location'] ) {
  225. $args['menu'] = 'logged-in';
  226. }
  227. } else {
  228. if( 'top-navigation' == $args['theme_location'] ) {
  229. $args['menu'] = 'logged-out';
  230. }
  231. }
  232. return $args;
  233. }
  234. /*************************************************
  235. // ############ user last login ################ //
  236. **************************************************/
  237. add_action( 'wp_login', 'dwp_login_timestamp', 20, 2 );
  238. function dwp_login_timestamp( $user_login, $user ) {
  239. update_user_meta( $user->ID, 'last_login', time() );
  240. }
  241. add_filter( 'manage_users_columns', 'dwp_user_last_login_column' );
  242. function dwp_user_last_login_column( $columns ) {
  243. $columns['last_login'] = 'Last Login';
  244. return $columns;
  245. }
  246. add_filter( 'manage_users_custom_column', 'dwp_last_login_column', 10, 3 );
  247. function dwp_last_login_column( $output, $column_id, $user_id ){
  248. if( $column_id == 'last_login' ) {
  249. $last_login = get_user_meta( $user_id, 'last_login', true );
  250. $date_format = 'j M, Y';
  251. $output = $last_login ? date( $date_format, $last_login ) : '-';
  252. }
  253. return $output;
  254. }
  255. add_filter( 'manage_users_sortable_columns', 'dwp_sortable_columns' );
  256. function dwp_sortable_columns( $columns ) {
  257. return wp_parse_args( array(
  258. 'last_login' => 'last_login'
  259. ), $columns );
  260. }
  261. add_action( 'pre_get_users', 'dwp_sort_last_login_column' );
  262. function dwp_sort_last_login_column( $query ) {
  263. if( !is_admin() ) {
  264. return $query;
  265. }
  266. $screen = get_current_screen();
  267. if( isset( $screen->id ) && $screen->id !== 'users' ) {
  268. return $query;
  269. }
  270. if( isset( $_GET[ 'orderby' ] ) && $_GET[ 'orderby' ] == 'last_login' ) {
  271. $query->query_vars['meta_key'] = 'last_login';
  272. $query->query_vars['orderby'] = 'meta_value';
  273. }
  274. return $query;
  275. }
  276. /*************************************************
  277. // ########## Howdy email/adminbar ############# //
  278. **************************************************/
  279. add_filter( 'gettext', 'dwp_change_howdy_text', 10, 2 );
  280. function dwp_change_howdy_text( $translation, $original ) {
  281. if( 'Howdy, %1$s' == $original )
  282. $translation = '%1$s';
  283. return $translation;
  284. }
  285. add_filter( 'admin_bar_menu', 'dwp_replace_howdy', 25 );
  286. function dwp_replace_howdy( $wp_admin_bar ) {
  287. $my_account = $wp_admin_bar->get_node('my-account');
  288. $newtext = str_replace( 'Howdy,', '', $my_account->title );
  289. $wp_admin_bar->add_node( array(
  290. 'id' => 'my-account',
  291. 'title' => $newtext,
  292. ) );
  293. }
  294. /*************************************************
  295. // ############### user profile ################ //
  296. **************************************************/
  297. if(is_admin()){
  298. remove_action("admin_color_scheme_picker", "admin_color_scheme_picker");
  299. }
  300. add_action( 'personal_options_update', 'dwp_save_extra_user_profile_fields' );
  301. add_action( 'edit_user_profile_update', 'dwp_save_extra_user_profile_fields' );
  302. add_action( 'show_user_profile', 'dwp_extra_user_profile_fields' );
  303. add_action( 'edit_user_profile', 'dwp_extra_user_profile_fields' );
  304. function dwp_extra_user_profile_fields( $user ) { ?>
  305. <br>
  306. <h3><?php _e("User Information", "blank"); ?></h3>
  307. <p>This information is useful for adminstrative purposes</p>
  308. <table class="form-table">
  309. <tr>
  310. <th><label for="address"><?php _e("Phone"); ?></label></th>
  311. <td>
  312. <input type="text" name="phone" id="phone" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
  313. <span class="description"><?php _e("Please enter your phone number."); ?></span>
  314. </td>
  315. </tr>
  316. <tr>
  317. <th><label for="address"><?php _e("Address"); ?></label></th>
  318. <td>
  319. <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
  320. <span class="description"><?php _e("Please enter your address."); ?></span>
  321. </td>
  322. </tr>
  323. <tr>
  324. <th><label for="city"><?php _e("City"); ?></label></th>
  325. <td>
  326. <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br />
  327. <span class="description"><?php _e("Please enter your city."); ?></span>
  328. </td>
  329. </tr>
  330. <tr>
  331. <th><label for="postalcode"><?php _e("Postal Code"); ?></label></th>
  332. <td>
  333. <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br />
  334. <span class="description"><?php _e("Please enter your postal code."); ?></span>
  335. </td>
  336. </tr>
  337. </table>
  338. <br>
  339. <h3><?php _e("User Accounts", "blank"); ?></h3>
  340. <p>This information is useful for the OpenGraph Protocol</p>
  341. <tr>
  342. <table class="form-table">
  343. <th><label for="postalcode"><?php _e("Facebook Username"); ?></label></th>
  344. <td>
  345. <input type="text" name="facebook-username" id="facebook-username" value="<?php echo esc_attr( get_the_author_meta( 'facebook-username', $user->ID ) ); ?>" class="regular-text" /><br />
  346. <span class="description"><?php _e("Please enter your Facebook username."); ?></span>
  347. </td>
  348. </tr>
  349. <tr>
  350. <th><label for="postalcode"><?php _e("Twitter Username"); ?></label></th>
  351. <td>
  352. <input type="text" name="twitter-username" id="twitter-username" value="<?php echo esc_attr( get_the_author_meta( 'twitter-username', $user->ID ) ); ?>" class="regular-text" /><br />
  353. <span class="description"><?php _e("Please enter your Twitter username."); ?></span>
  354. </td>
  355. </tr>
  356. </table>
  357. <?php }
  358. add_action( 'personal_options_update', 'dwp_save_extra_user_profile_fields' );
  359. add_action( 'edit_user_profile_update', 'dwp_save_extra_user_profile_fields' );
  360. function dwp_save_extra_user_profile_fields( $user_id ) {
  361. if ( !current_user_can( 'edit_user', $user_id ) ) {
  362. return false;
  363. }
  364. update_user_meta( $user_id, 'phone', $_POST['phone'] );
  365. update_user_meta( $user_id, 'address', $_POST['address'] );
  366. update_user_meta( $user_id, 'city', $_POST['city'] );
  367. update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] );
  368. update_user_meta( $user_id, 'facebook-username', $_POST['facebook-username'] );
  369. update_user_meta( $user_id, 'twitter-username', $_POST['twitter-username'] );
  370. }
  371. /*************************************************
  372. // ############# OpenGraph meta ################ //
  373. **************************************************/
  374. add_filter('language_attributes', 'dwp_doctype_opengraph');
  375. function dwp_doctype_opengraph($output) {
  376. return $output . '
  377. xmlns:og="http://opengraphprotocol.org/schema/"
  378. xmlns:fb="http://www.facebook.com/2008/fbml"';
  379. }
  380. add_action('wp_head', 'dwp_opengraph', 5);
  381. function dwp_opengraph() {
  382. global $post;
  383. if (is_single()) {
  384. if (has_post_thumbnail($post->ID)) {
  385. $img_src = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), 'full'); $img_src = $img_src[0];
  386. } elseif ( metadata_exists( 'post', get_the_ID(), 'featured_image_url' ) ){
  387. $img_src = get_post_meta( get_the_ID(), 'featured_image_url', true );
  388. } else {
  389. $img_src = get_stylesheet_directory_uri() . '/img/opengraph_image.jpg';
  390. }
  391. if($excerpt = $post->post_excerpt) {
  392. $excerpt = strip_tags($post->post_excerpt);
  393. $excerpt = str_replace("", "'", $excerpt);
  394. } else {
  395. $excerpt = get_bloginfo('description');
  396. }
  397. ?>
  398. <meta property="og:title" content="<?php echo the_title(); ?>"/>
  399. <meta property="og:description" content="<?php echo $excerpt; ?>"/>
  400. <meta property="og:type" content="article"/>
  401. <meta property="og:url" content="<?php echo the_permalink(); ?>"/>
  402. <meta property="og:site_name" content="<?php echo get_bloginfo(); ?>"/>
  403. <meta property="og:image" content="<?php echo $img_src; ?>"/>
  404. <meta property="fb:app_id" content="203136806559589" />
  405. <meta name="twitter:site" content="@<?php echo get_user_meta( get_current_user_id(), 'twitter-username', true );?>">
  406. <meta name="twitter:creator" content="@<?php echo get_user_meta( get_current_user_id(), 'twitter-username', true );?>">
  407. <meta name="twitter:title" content="<?php echo the_title(); ?>">
  408. <meta name="twitter:description" content="<?php echo $excerpt; ?>">
  409. <meta name="twitter:image" content="<?php echo $img_src; ?>">
  410. <?php
  411. } else {
  412. return;
  413. }
  414. $content = do_shortcode( apply_filters( 'the_content', $post->post_content ) );
  415. $media_url = get_post_meta( get_the_ID(), 'media', true );
  416. $media = get_media_embedded_in_content( $content );
  417. if( !empty($media) ) {
  418. $video_url = $media[0];
  419. ?>
  420. <meta property="og:video" content="<?php echo $media_url; ?>" />
  421. <meta property="og:video:secure_url" content="<?php echo $media_url; ?>" />
  422. <meta property="og:video:width" content="1280" />
  423. <meta property="og:video:height" content="720" />
  424. <meta property="og:video:type" content="video/mp4" />
  425. <meta name="twitter:card" content="player">
  426. <meta name="twitter:player" content="<?php echo get_permalink();?>container/" />
  427. <meta name="twitter:player:width" content="1280" />
  428. <meta name="twitter:player:height" content="720" />
  429. <meta name="twitter:player:stream" content="<?php echo $media_url; ?>" />
  430. <meta name="twitter:player:stream:content_type" content="video/mp4" />
  431. <?php
  432. } else {
  433. ?>
  434. <meta name="twitter:card" content="summary_large_image">
  435. <?php
  436. }
  437. }
  438. add_action( 'init', 'dwp_read_container_endpoint' );
  439. function dwp_read_container_endpoint(){
  440. add_rewrite_endpoint( 'container', EP_PERMALINK);
  441. }
  442. add_filter( 'single_template', 'dwp_read_container_template' );
  443. function dwp_read_container_template( $template = '' ) {
  444. global $wp_query;
  445. if( ! array_key_exists( 'container', $wp_query->query_vars ) ) return $template;
  446. $template = locate_template( 'single-container.php' );
  447. return $template;
  448. }
  449. add_shortcode( 'video', 'dwp_video_embed' );
  450. function dwp_video_embed( $attr, $content='' ) {
  451. if ( ! isset( $attr['poster'] ) && has_post_thumbnail() ) {
  452. $poster = get_post_meta( get_the_ID(), 'media-poster', true );
  453. $attr['poster'] = $poster;
  454. }
  455. return wp_video_shortcode( $attr, $content );
  456. }