content-options.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. /**
  3. * Content Options.
  4. *
  5. * This feature will only be activated for themes that declare their support.
  6. * This can be done by adding code similar to the following during the
  7. * 'after_setup_theme' action:
  8. *
  9. add_theme_support( 'jetpack-content-options', array(
  10. 'blog-display' => 'content', // the default setting of the theme: 'content', 'excerpt' or array( 'content', 'excerpt' ) for themes mixing both display.
  11. 'author-bio' => true, // display or not the author bio: true or false.
  12. 'author-bio-default' => false, // the default setting of the author bio, if it's being displayed or not: true or false (only required if false).
  13. 'masonry' => '.site-main', // a CSS selector matching the elements that triggers a masonry refresh if the theme is using a masonry layout.
  14. 'post-details' => array(
  15. 'stylesheet' => 'themeslug-style', // name of the theme's stylesheet.
  16. 'date' => '.posted-on', // a CSS selector matching the elements that display the post date.
  17. 'categories' => '.cat-links', // a CSS selector matching the elements that display the post categories.
  18. 'tags' => '.tags-links', // a CSS selector matching the elements that display the post tags.
  19. 'author' => '.byline', // a CSS selector matching the elements that display the post author.
  20. 'comment' => '.comments-link', // a CSS selector matching the elements that display the comment link.
  21. ),
  22. 'featured-images' => array(
  23. 'archive' => true, // enable or not the featured image check for archive pages: true or false.
  24. 'archive-default' => false, // the default setting of the featured image on archive pages, if it's being displayed or not: true or false (only required if false).
  25. 'post' => true, // enable or not the featured image check for single posts: true or false.
  26. 'post-default' => false, // the default setting of the featured image on single posts, if it's being displayed or not: true or false (only required if false).
  27. 'page' => true, // enable or not the featured image check for single pages: true or false.
  28. 'page-default' => false, // the default setting of the featured image on single pages, if it's being displayed or not: true or false (only required if false).
  29. 'portfolio' => true, // enable or not the featured image check for single projects: true or false.
  30. 'portfolio-default' => false, // the default setting of the featured image on single projects, if it's being displayed or not: true or false (only required if false).
  31. 'fallback' => true, // enable or not the featured image fallback: true or false.
  32. 'fallback-default' => true, // the default setting for featured image fallbacks: true or false (only required if false)
  33. ),
  34. ) );
  35. *
  36. */
  37. /**
  38. * Activate the Content Options plugin.
  39. *
  40. * @uses current_theme_supports()
  41. */
  42. function jetpack_content_options_init() {
  43. // If the theme doesn't support 'jetpack-content-options', don't continue.
  44. if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
  45. return;
  46. }
  47. // Load the Customizer options.
  48. require( dirname( __FILE__ ) . '/content-options/customizer.php' );
  49. // Load Blog Display function.
  50. require( dirname( __FILE__ ) . '/content-options/blog-display.php' );
  51. // Load Author Bio function.
  52. require( dirname( __FILE__ ) . '/content-options/author-bio.php' );
  53. // Load Post Details function.
  54. require( dirname( __FILE__ ) . '/content-options/post-details.php' );
  55. // Load Featured Images function.
  56. if ( jetpack_featured_images_should_load() ) {
  57. require( dirname( __FILE__ ) . '/content-options/featured-images.php' );
  58. }
  59. // Load Featured Images Fallback function.
  60. if ( jetpack_featured_images_fallback_should_load() ) {
  61. require( dirname( __FILE__ ) . '/content-options/featured-images-fallback.php' );
  62. }
  63. }
  64. add_action( 'init', 'jetpack_content_options_init' );
  65. function jetpack_featured_images_get_settings() {
  66. $options = get_theme_support( 'jetpack-content-options' );
  67. $featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
  68. $settings = array(
  69. 'archive' => ( ! empty( $featured_images['archive'] ) ) ? $featured_images['archive'] : null,
  70. 'post' => ( ! empty( $featured_images['post'] ) ) ? $featured_images['post'] : null,
  71. 'page' => ( ! empty( $featured_images['page'] ) ) ? $featured_images['page'] : null,
  72. 'portfolio' => ( ! empty( $featured_images['portfolio'] ) ) ? $featured_images['portfolio'] : null,
  73. 'archive-default' => ( isset( $featured_images['archive-default'] ) && false === $featured_images['archive-default'] ) ? '' : 1,
  74. 'post-default' => ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1,
  75. 'page-default' => ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1,
  76. 'portfolio-default' => ( isset( $featured_images['portfolio-default'] ) && false === $featured_images['portfolio-default'] ) ? '' : 1,
  77. 'fallback' => ( ! empty( $featured_images['fallback'] ) ) ? $featured_images['fallback'] : null,
  78. 'fallback-default' => ( isset( $featured_images['fallback-default'] ) && false === $featured_images['fallback-default'] ) ? '' : 1,
  79. );
  80. $settings = array_merge( $settings, array(
  81. 'archive-option' => get_option( 'jetpack_content_featured_images_archive', $settings['archive-default'] ),
  82. 'post-option' => get_option( 'jetpack_content_featured_images_post', $settings['post-default'] ),
  83. 'page-option' => get_option( 'jetpack_content_featured_images_page', $settings['page-default'] ),
  84. 'portfolio-option' => get_option( 'jetpack_content_featured_images_portfolio', $settings['portfolio-default'] ),
  85. 'fallback-option' => get_option( 'jetpack_content_featured_images_fallback', $settings['fallback-default'] ),
  86. ) );
  87. return $settings;
  88. }
  89. function jetpack_featured_images_should_load() {
  90. // If the theme doesn't support post thumbnails, don't continue.
  91. if ( ! current_theme_supports( 'post-thumbnails' ) ) {
  92. return false;
  93. }
  94. $opts = jetpack_featured_images_get_settings();
  95. // If the theme doesn't support archive, post and page or if all the options are ticked and we aren't in the customizer, don't continue.
  96. if (
  97. ( true !== $opts['archive'] && true !== $opts['post'] && true !== $opts['page'] )
  98. || ( 1 === $opts['archive-option'] && 1 === $opts['post-option'] && 1 === $opts['page-option'] && ! is_customize_preview() )
  99. ) {
  100. return false;
  101. }
  102. return true;
  103. }
  104. function jetpack_featured_images_fallback_should_load() {
  105. // If the theme doesn't support post thumbnails, don't continue.
  106. if ( ! current_theme_supports( 'post-thumbnails' ) ) {
  107. return false;
  108. }
  109. $opts = jetpack_featured_images_get_settings();
  110. // If the theme doesn't support fallback, don't continue.
  111. if ( true !== $opts['fallback'] ) {
  112. return false;
  113. }
  114. return true;
  115. }