functions.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  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_headerurl', 'dwp_login_url' );
  115. function dwp_login_url($url) {
  116. return home_url();
  117. }
  118. //add_filter( 'login_redirect', 'dwp_login_redirect', 10, 3 );
  119. //function dwp_login_redirect( $redirect_to, $request, $user ){
  120. // return home_url();
  121. //}
  122. add_action( 'login_enqueue_scripts', 'dwp_login_logo' );
  123. function dwp_login_logo() { ?>
  124. <style type="text/css">
  125. body.login {
  126. background-color: #333;
  127. }
  128. #login h1 a, .login h1 a {
  129. background-image: url(<?php echo get_stylesheet_directory_uri(); ?>/img/logo.png);
  130. height:130px;
  131. width:320px;
  132. background-size: 320px 130px;
  133. background-repeat: no-repeat;
  134. padding-bottom: 10px;
  135. }
  136. </style>
  137. <?php }
  138. /*************************************************
  139. // ############ admin menu order ############## //
  140. **************************************************/
  141. add_filter( 'custom_menu_order', '__return_true' );
  142. add_filter( 'menu_order', 'dwp_change_menu_order' );
  143. function dwp_change_menu_order( $menu_order ) {
  144. return array(
  145. 'index.php',
  146. 'edit.php',
  147. 'edit.php?post_type=page',
  148. 'upload.php',
  149. );
  150. }
  151. /*************************************************
  152. // ############# Admin Bar ################## //
  153. **************************************************/
  154. add_filter('show_admin_bar', '__return_false');
  155. add_filter('show_recent_comments_widget_style', function() { return false; });
  156. add_action( 'admin_bar_menu', 'dwp_remove_adminbar', 999 );
  157. function dwp_remove_adminbar( $wp_admin_bar ) {
  158. $wp_admin_bar->remove_node( 'wp-logo' );
  159. $wp_admin_bar->remove_menu( 'edit' );
  160. $wp_admin_bar->remove_menu( 'new-user' );
  161. $wp_admin_bar->remove_menu( 'new-post' );
  162. $wp_admin_bar->remove_menu( 'new-page' );
  163. $wp_admin_bar->remove_node( 'new-media' );
  164. $wp_admin_bar->remove_menu( 'edit-profile' );
  165. $wp_admin_bar->remove_menu( 'comments' );
  166. }
  167. function dwp_remove_new_content(){
  168. global $wp_admin_bar;
  169. $wp_admin_bar->remove_menu( 'new-content' );
  170. }
  171. add_action( 'wp_before_admin_bar_render', 'dwp_remove_new_content' );
  172. /*************************************************
  173. // ############ admin footer ############## //
  174. **************************************************/
  175. add_filter('admin_footer_text', '__return_empty_string', 1000);
  176. add_filter('update_footer', '__return_empty_string', 1000);
  177. /*************************************************
  178. // ############ dashboard items ################ //
  179. **************************************************/
  180. remove_action('welcome_panel', 'wp_welcome_panel');
  181. add_filter('screen_options_show_screen', '__return_false');
  182. add_action('admin_head', 'dwp_remove_help_tabs');
  183. function dwp_remove_help_tabs() {
  184. $screen = get_current_screen();
  185. $screen->remove_help_tabs();
  186. }
  187. add_action( 'admin_init', 'dwp_remove_dashboard_meta' );
  188. function dwp_remove_dashboard_meta() {
  189. remove_meta_box( 'dashboard_site_health', 'dashboard', 'normal' );
  190. remove_meta_box( 'dashboard_incoming_links', 'dashboard', 'normal' );
  191. remove_meta_box( 'dashboard_plugins', 'dashboard', 'normal' );
  192. remove_meta_box( 'dashboard_primary', 'dashboard', 'normal' );
  193. remove_meta_box( 'dashboard_secondary', 'dashboard', 'normal' );
  194. remove_meta_box( 'dashboard_incoming_links', 'dashboard', 'normal' );
  195. remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );
  196. }
  197. /*************************************************
  198. // ####### comments on attachments ############# //
  199. **************************************************/
  200. add_action( 'pre_comment_on_post', 'dwp_remove_comments_from_attachments', 10, 2 );
  201. function dwp_remove_comments_from_attachments( $open, $post_id ){
  202. return ( 'attachment' == get_post_type( $post_id ) ) ? false : $open;
  203. }
  204. add_filter( 'comments_open', 'dwp_filter_media_comment_status', 10 , 2 );
  205. function dwp_filter_media_comment_status( $open, $post_id ) {
  206. $post = get_post( $post_id );
  207. if( $post->post_type == 'attachment' ) {
  208. return false;
  209. }
  210. return $open;
  211. }
  212. /*************************************************
  213. // ####### menus for logged in/out ############# //
  214. create two menus named 'logged-in' & 'logged-out
  215. in top-navigation location of theme
  216. **************************************************/
  217. add_filter( 'wp_nav_menu_args', 'dwp_nav_menu_args' );
  218. function dwp_nav_menu_args( $args = '' ) {
  219. if( is_user_logged_in() ) {
  220. if( 'top-navigation' == $args['theme_location'] ) {
  221. $args['menu'] = 'logged-in';
  222. }
  223. } else {
  224. if( 'top-navigation' == $args['theme_location'] ) {
  225. $args['menu'] = 'logged-out';
  226. }
  227. }
  228. return $args;
  229. }
  230. /*************************************************
  231. // ############ user last login ################ //
  232. **************************************************/
  233. add_action( 'wp_login', 'dwp_login_timestamp', 20, 2 );
  234. function dwp_login_timestamp( $user_login, $user ) {
  235. update_user_meta( $user->ID, 'last_login', time() );
  236. }
  237. add_filter( 'manage_users_columns', 'dwp_user_last_login_column' );
  238. function dwp_user_last_login_column( $columns ) {
  239. $columns['last_login'] = 'Last Login';
  240. return $columns;
  241. }
  242. add_filter( 'manage_users_custom_column', 'dwp_last_login_column', 10, 3 );
  243. function dwp_last_login_column( $output, $column_id, $user_id ){
  244. if( $column_id == 'last_login' ) {
  245. $last_login = get_user_meta( $user_id, 'last_login', true );
  246. $date_format = 'j M, Y';
  247. $output = $last_login ? date( $date_format, $last_login ) : '-';
  248. }
  249. return $output;
  250. }
  251. add_filter( 'manage_users_sortable_columns', 'dwp_sortable_columns' );
  252. function dwp_sortable_columns( $columns ) {
  253. return wp_parse_args( array(
  254. 'last_login' => 'last_login'
  255. ), $columns );
  256. }
  257. add_action( 'pre_get_users', 'dwp_sort_last_login_column' );
  258. function dwp_sort_last_login_column( $query ) {
  259. if( !is_admin() ) {
  260. return $query;
  261. }
  262. $screen = get_current_screen();
  263. if( isset( $screen->id ) && $screen->id !== 'users' ) {
  264. return $query;
  265. }
  266. if( isset( $_GET[ 'orderby' ] ) && $_GET[ 'orderby' ] == 'last_login' ) {
  267. $query->query_vars['meta_key'] = 'last_login';
  268. $query->query_vars['orderby'] = 'meta_value';
  269. }
  270. return $query;
  271. }
  272. /*************************************************
  273. // ########## Howdy email/adminbar ############# //
  274. **************************************************/
  275. add_filter( 'gettext', 'dwp_change_howdy_text', 10, 2 );
  276. function dwp_change_howdy_text( $translation, $original ) {
  277. if( 'Howdy, %1$s' == $original )
  278. $translation = '%1$s';
  279. return $translation;
  280. }
  281. add_filter( 'admin_bar_menu', 'dwp_replace_howdy', 25 );
  282. function dwp_replace_howdy( $wp_admin_bar ) {
  283. $my_account = $wp_admin_bar->get_node('my-account');
  284. $newtext = str_replace( 'Howdy,', '', $my_account->title );
  285. $wp_admin_bar->add_node( array(
  286. 'id' => 'my-account',
  287. 'title' => $newtext,
  288. ) );
  289. }
  290. /*************************************************
  291. // ############### user profile ################ //
  292. **************************************************/
  293. if(is_admin()){
  294. remove_action("admin_color_scheme_picker", "admin_color_scheme_picker");
  295. }
  296. add_action( 'personal_options_update', 'dwp_save_extra_user_profile_fields' );
  297. add_action( 'edit_user_profile_update', 'dwp_save_extra_user_profile_fields' );
  298. add_action( 'show_user_profile', 'dwp_extra_user_profile_fields' );
  299. add_action( 'edit_user_profile', 'dwp_extra_user_profile_fields' );
  300. function dwp_extra_user_profile_fields( $user ) { ?>
  301. <br>
  302. <h3><?php _e("User Information", "blank"); ?></h3>
  303. <p>This information is useful for adminstrative purposes</p>
  304. <table class="form-table">
  305. <tr>
  306. <th><label for="address"><?php _e("Phone"); ?></label></th>
  307. <td>
  308. <input type="text" name="phone" id="phone" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
  309. <span class="description"><?php _e("Please enter your phone number."); ?></span>
  310. </td>
  311. </tr>
  312. <tr>
  313. <th><label for="address"><?php _e("Address"); ?></label></th>
  314. <td>
  315. <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
  316. <span class="description"><?php _e("Please enter your address."); ?></span>
  317. </td>
  318. </tr>
  319. <tr>
  320. <th><label for="city"><?php _e("City"); ?></label></th>
  321. <td>
  322. <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br />
  323. <span class="description"><?php _e("Please enter your city."); ?></span>
  324. </td>
  325. </tr>
  326. <tr>
  327. <th><label for="postalcode"><?php _e("Postal Code"); ?></label></th>
  328. <td>
  329. <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br />
  330. <span class="description"><?php _e("Please enter your postal code."); ?></span>
  331. </td>
  332. </tr>
  333. </table>
  334. <br>
  335. <h3><?php _e("User Accounts", "blank"); ?></h3>
  336. <p>This information is useful for the OpenGraph Protocol</p>
  337. <tr>
  338. <table class="form-table">
  339. <th><label for="postalcode"><?php _e("Facebook Username"); ?></label></th>
  340. <td>
  341. <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 />
  342. <span class="description"><?php _e("Please enter your Facebook username."); ?></span>
  343. </td>
  344. </tr>
  345. <tr>
  346. <th><label for="postalcode"><?php _e("Twitter Username"); ?></label></th>
  347. <td>
  348. <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 />
  349. <span class="description"><?php _e("Please enter your Twitter username."); ?></span>
  350. </td>
  351. </tr>
  352. </table>
  353. <?php }
  354. add_action( 'personal_options_update', 'dwp_save_extra_user_profile_fields' );
  355. add_action( 'edit_user_profile_update', 'dwp_save_extra_user_profile_fields' );
  356. function dwp_save_extra_user_profile_fields( $user_id ) {
  357. if ( !current_user_can( 'edit_user', $user_id ) ) {
  358. return false;
  359. }
  360. update_user_meta( $user_id, 'phone', $_POST['phone'] );
  361. update_user_meta( $user_id, 'address', $_POST['address'] );
  362. update_user_meta( $user_id, 'city', $_POST['city'] );
  363. update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] );
  364. update_user_meta( $user_id, 'facebook-username', $_POST['facebook-username'] );
  365. update_user_meta( $user_id, 'twitter-username', $_POST['twitter-username'] );
  366. }
  367. /*************************************************
  368. // ############# OpenGraph meta ################ //
  369. **************************************************/
  370. add_filter('language_attributes', 'dwp_doctype_opengraph');
  371. function dwp_doctype_opengraph($output) {
  372. return $output . '
  373. xmlns:og="http://opengraphprotocol.org/schema/"
  374. xmlns:fb="http://www.facebook.com/2008/fbml"';
  375. }
  376. add_action('wp_head', 'dwp_opengraph', 5);
  377. function dwp_opengraph() {
  378. global $post;
  379. if (is_single()) {
  380. if (has_post_thumbnail($post->ID)) {
  381. $img_src = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), 'full'); $img_src = $img_src[0];
  382. } elseif ( metadata_exists( 'post', get_the_ID(), 'featured_image_url' ) ){
  383. $img_src = get_post_meta( get_the_ID(), 'featured_image_url', true );
  384. } else {
  385. $img_src = get_stylesheet_directory_uri() . '/img/opengraph_image.jpg';
  386. }
  387. if($excerpt = $post->post_excerpt) {
  388. $excerpt = strip_tags($post->post_excerpt);
  389. $excerpt = str_replace("", "'", $excerpt);
  390. } else {
  391. $excerpt = get_bloginfo('description');
  392. }
  393. ?>
  394. <meta property="og:title" content="<?php echo the_title(); ?>"/>
  395. <meta property="og:description" content="<?php echo $excerpt; ?>"/>
  396. <meta property="og:type" content="article"/>
  397. <meta property="og:url" content="<?php echo the_permalink(); ?>"/>
  398. <meta property="og:site_name" content="<?php echo get_bloginfo(); ?>"/>
  399. <meta property="og:image" content="<?php echo $img_src; ?>"/>
  400. <meta property="fb:app_id" content="203136806559589" />
  401. <meta name="twitter:site" content="@<?php echo get_user_meta( get_current_user_id(), 'twitter-username', true );?>">
  402. <meta name="twitter:creator" content="@<?php echo get_user_meta( get_current_user_id(), 'twitter-username', true );?>">
  403. <meta name="twitter:title" content="<?php echo the_title(); ?>">
  404. <meta name="twitter:description" content="<?php echo $excerpt; ?>">
  405. <meta name="twitter:image" content="<?php echo $img_src; ?>">
  406. <?php
  407. } else {
  408. return;
  409. }
  410. $content = do_shortcode( apply_filters( 'the_content', $post->post_content ) );
  411. $media_url = get_post_meta( get_the_ID(), 'media', true );
  412. $media = get_media_embedded_in_content( $content );
  413. if( !empty($media) ) {
  414. $video_url = $media[0];
  415. ?>
  416. <meta property="og:video" content="<?php echo $media_url; ?>" />
  417. <meta property="og:video:secure_url" content="<?php echo $media_url; ?>" />
  418. <meta property="og:video:width" content="1280" />
  419. <meta property="og:video:height" content="720" />
  420. <meta property="og:video:type" content="video/mp4" />
  421. <meta name="twitter:card" content="player">
  422. <meta name="twitter:player" content="<?php echo get_permalink();?>container/" />
  423. <meta name="twitter:player:width" content="1280" />
  424. <meta name="twitter:player:height" content="720" />
  425. <meta name="twitter:player:stream" content="<?php echo $media_url; ?>" />
  426. <meta name="twitter:player:stream:content_type" content="video/mp4" />
  427. <?php
  428. } else {
  429. ?>
  430. <meta name="twitter:card" content="summary_large_image">
  431. <?php
  432. }
  433. }
  434. add_action( 'init', 'dwp_read_container_endpoint' );
  435. function dwp_read_container_endpoint(){
  436. add_rewrite_endpoint( 'container', EP_PERMALINK);
  437. }
  438. add_filter( 'single_template', 'dwp_read_container_template' );
  439. function dwp_read_container_template( $template = '' ) {
  440. global $wp_query;
  441. if( ! array_key_exists( 'container', $wp_query->query_vars ) ) return $template;
  442. $template = locate_template( 'single-container.php' );
  443. return $template;
  444. }
  445. add_shortcode( 'video', 'dwp_video_embed' );
  446. function dwp_video_embed( $attr, $content='' ) {
  447. if ( ! isset( $attr['poster'] ) && has_post_thumbnail() ) {
  448. $poster = get_post_meta( get_the_ID(), 'media-poster', true );
  449. $attr['poster'] = $poster;
  450. }
  451. return wp_video_shortcode( $attr, $content );
  452. }