PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
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 / WordPress / Admin / Menus / ProductCollectionsMenuService.php
surecart / app / src / WordPress / Admin / Menus Last commit date
AdminMenuPageService.php 1 year ago AdminMenuPageServiceProvider.php 2 years ago ProductCollectionsMenuService.php 2 years ago
ProductCollectionsMenuService.php
142 lines
1 <?php
2
3 namespace SureCart\WordPress\Admin\Menus;
4
5 use SureCart\Models\ProductCollection;
6
7 /**
8 * Service for product collection pages in WordPress menu related functions.
9 */
10 class ProductCollectionsMenuService {
11 /**
12 * Bootstrap any actions.
13 *
14 * @return void
15 */
16 public function bootstrap(): void {
17 add_action( 'admin_init', [ $this, 'registerNavMetaBox' ], 9 );
18 add_filter( 'render_block', [ $this, 'filterMenuBlockLinkHref' ], 10, 2 );
19 }
20
21 /**
22 * Adds the meta box container.
23 *
24 * @return void
25 */
26 public function registerNavMetaBox(): void {
27 global $pagenow;
28
29 if ( ! current_user_can( 'edit_theme_options' ) ) {
30 return;
31 }
32
33 if ( 'nav-menus.php' === $pagenow ) {
34 add_meta_box(
35 'sc_collections_meta_box',
36 __( 'Product Collections', 'surecart' ),
37 [ $this, 'metaBoxContents' ],
38 'nav-menus',
39 'side',
40 'high'
41 );
42 }
43 }
44
45 /**
46 * Show the Meta Menu settings.
47 *
48 * @return void
49 */
50 public function metaBoxContents(): void {
51 $this->renderCollectionPagesMenuOptions();
52 }
53
54 /**
55 * Render the collection pages menu options.
56 *
57 * @return void
58 */
59 public function renderCollectionPagesMenuOptions(): void {
60 $collections = ProductCollection::get();
61
62 if ( empty( $collections ) || ! is_array( $collections ) ) {
63 esc_html_e( 'No product collections added.', 'surecart' );
64 return;
65 }
66
67 ?>
68 <div id="posttype-sc-collections" class="posttypediv">
69 <div id="tabs-panel-sc-collections" class="tabs-panel tabs-panel-active">
70 <ul id="sc-collections-checklist" class="categorychecklist form-no-clear">
71 <?php
72 $i = -1;
73 foreach ( $collections as $collection ) :
74 $name = $collection->name;
75 ?>
76 <li>
77 <label class="menu-item-title">
78 <input type="checkbox" class="menu-item-checkbox" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-object-id]" value="<?php echo esc_attr( $i ); ?>" /> <?php echo esc_html( $name ); ?>
79 </label>
80 <input type="hidden" class="menu-item-type" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-type]" value="custom" />
81 <input type="hidden" class="menu-item-title" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-title]" value="<?php echo esc_attr( $name ); ?>" />
82 <input type="hidden" class="menu-item-url" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-url]" value="<?php echo esc_url( $collection->permalink ); ?>" />
83 <input type="hidden" class="menu-item-classes" name="menu-item[<?php echo esc_attr( $i ); ?>][menu-item-classes]" />
84 </li>
85 <?php
86 $i--;
87 endforeach;
88 ?>
89 </ul>
90 </div>
91 <p class="button-controls" data-items-type="posttype-sc-collections">
92 <span class="list-controls">
93 <label>
94 <input type="checkbox" class="select-all" />
95 <?php esc_html_e( 'Select all', 'surecart' ); ?>
96 </label>
97 </span>
98 <span class="add-to-menu">
99 <button type="submit" class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e( 'Add to menu', 'surecart' ); ?>" name="add-post-type-menu-item" id="submit-posttype-sc-collections"><?php esc_html_e( 'Add to menu', 'surecart' ); ?></button>
100 <span class="spinner"></span>
101 </span>
102 </p>
103 </div>
104 <?php
105 }
106
107 /**
108 * If the menu item is a collection page, add the collection slug to the menu item..
109 *
110 * @param string $content Block content.
111 * @param array $block_data Block data.
112 *
113 * @return array
114 */
115 public function filterMenuBlockLinkHref( $content, $block_data ) {
116 // not a navigation link.
117 if ( empty( $block_data['blockName'] ) || 'core/navigation-link' !== $block_data['blockName'] ) {
118 return $content;
119 }
120 // don't have kind.
121 if ( empty( $block_data['attrs']['kind'] ) || 'sc-collection' !== $block_data['attrs']['kind'] ) {
122 return $content;
123 }
124 // don't have an id.
125 if ( empty( $block_data['attrs']['id'] ) ) {
126 return $content;
127 }
128
129 $collection = ProductCollection::find( $block_data['attrs']['id'] );
130
131 if ( ! $collection || empty( $collection ) || empty( $collection->slug ) ) {
132 return $content;
133 }
134
135 $collection_slug = $collection->slug;
136
137 $new_link = esc_url_raw( trailingslashit( get_home_url() ) . trailingslashit( \SureCart::settings()->permalinks()->getBase( 'collection_page' ) ) . $collection_slug );
138
139 return preg_replace( '/href="([^"]*)"/', 'href="' . $new_link . '"', $content );
140 }
141 }
142