TableVariation.php
1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
namespace ACA\WC\Asset\Script;
use AC;
class TableVariation extends AC\Asset\Script {
private const TABLE = 'product_variation';
public function __construct( string $handle, AC\Asset\Location\Absolute $location ) {
parent::__construct( $handle, $location->with_suffix( 'assets/js/table-variation.js' ), [ 'jquery' ] );
}
public function register(): void {
parent::register();
wp_localize_script( $this->handle, 'aca_wc_table_variation', [
'button_back_label' => __( 'Back to products', 'codepress-admin-columns' ),
'button_back_link' => $this->get_referer_link(),
] );
}
private function get_referer_link(): string {
$preference = new AC\Preferences\Site( 'referer' );
$referer = $this->check_referer( 'product' );
if ( $referer ) {
$preference->set( self::TABLE, $referer );
} else if ( ! $this->check_referer( self::TABLE ) ) {
// Remove preference link when referer is neither from product or product_variation
$preference->delete( self::TABLE );
}
$link = $preference->get( self::TABLE );
if ( ! $link ) {
$link = add_query_arg( [ 'post_type' => 'product' ], admin_url( 'edit.php' ) );
}
return $link;
}
/**
* Checks if the referer came from another list table
*
* @param string $post_type
*
* @return false|string Return referer link
*/
private function check_referer( $post_type ) {
$referer = wp_get_referer();
if ( ! $referer ) {
return false;
}
if ( false === strpos( $referer, admin_url( 'edit.php' ) ) ) {
return false;
}
$parts = parse_url( $referer );
if ( ! isset( $parts['query'] ) ) {
return false;
}
parse_str( $parts['query'], $query );
if ( ! isset( $query['post_type'] ) || $post_type !== $query['post_type'] ) {
return false;
}
return $referer;
}
}