PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.0
4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Integrations / Abstracts / NoIndexService.php
surecart / app / src / Integrations / Abstracts Last commit date
NoIndexService.php 6 months ago
NoIndexService.php
106 lines
1 <?php
2
3 namespace SureCart\Integrations\Abstracts;
4
5 /**
6 * Abstract base class for SEO plugin integrations that handle noindex robots meta.
7 */
8 abstract class NoIndexService {
9 /**
10 * The filter hook name for the robots meta.
11 *
12 * @var string
13 */
14 protected $hook_name = '';
15
16 /**
17 * The query vars that should trigger noindex.
18 *
19 * @var array
20 */
21 protected $query_vars = [
22 'products-search',
23 'products-order',
24 'products-orderby',
25 'line_items',
26 'currency',
27 ];
28
29 /**
30 * The noindex robots.
31 *
32 * @var array
33 */
34 protected $noindex_robots = [
35 'noindex' => 'noindex',
36 'nofollow' => 'nofollow',
37 ];
38
39 /**
40 * Bootstrap the service.
41 *
42 * @throws \RuntimeException If hook_name is not set.
43 *
44 * @return void
45 */
46 public function bootstrap(): void {
47 if ( empty( $this->hook_name ) ) {
48 throw new \RuntimeException( 'Missing hook_name for noindex service: ' . static::class );
49 }
50
51 add_filter( $this->hook_name, [ $this, 'addNoindexForQueryVars' ] );
52 }
53
54 /**
55 * Modify robots to add noindex for SureCart query vars.
56 *
57 * @param array $robots Robots array.
58 *
59 * @return array Modified robots.
60 */
61 public function addNoindexForQueryVars( array $robots ): array {
62 if ( $this->hasNoIndexQueryVars() ) {
63 return $this->noindex_robots;
64 }
65
66 return $robots;
67 }
68
69 /**
70 * Check if the current request has any SureCart query variables.
71 *
72 * @return bool True if any SureCart query var is present.
73 */
74 protected function hasNoIndexQueryVars(): bool {
75 $query_vars = $this->getNoIndexQueryVars();
76
77 foreach ( $query_vars as $query_var ) {
78 // Safe to use $_GET directly as we only check existence, not values.
79 if ( isset( $_GET[ $query_var ] ) || get_query_var( $query_var ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
80 return true;
81 }
82 }
83
84 return false;
85 }
86
87 /**
88 * Get SureCart query variables that should trigger noindex.
89 *
90 * @return array List of query variable names.
91 */
92 protected function getNoIndexQueryVars(): array {
93 $query_vars = $this->query_vars;
94
95 // Add all registered taxonomies for sc_product.
96 $product_taxonomies = get_object_taxonomies( 'sc_product', 'names' );
97 if ( ! empty( $product_taxonomies ) ) {
98 foreach ( $product_taxonomies as $taxonomy ) {
99 $query_vars[] = 'products-' . $taxonomy;
100 }
101 }
102
103 return apply_filters( 'surecart/noindex_query_vars', array_unique( $query_vars ), $this );
104 }
105 }
106