WooCommerce-重写规则创建的有条件的页面

时间:2020-03-21 作者:wharfdale

我有一个由插件(Dokan)创建的页面,名为Products:example。com/仪表板/产品

仪表板/产品页面是根据重写规则创建的,它不是可以在管理面板中看到的实际页面。因此,我不能使用此条件:is\\u page(page id)。

否则,我如何执行WordPress条件检查页面是否为/仪表板/产品页面?

这是插件中的register\\u rule函数代码:

$this->query_vars = apply_filters( \'dokan_query_var_filter\', array(
    \'products\',
    \'new-product\',
    \'orders\',
    \'withdraw\',
    \'settings\',
    \'edit-account\'
) );

foreach ( $this->query_vars as $var ) {
    add_rewrite_endpoint( $var, EP_PAGES );
}
我的最终目标是将这两行包装在一个条件中,以便它们仅在/dashboard/products 页码:

add_action( \'dokan_dashboard_content_inside_before\', \'custom_dashboard_menu\', 10 );
add_action( \'dokan_dashboard_content_before\', \'custom_dashboard_header\', 10 );

1 个回复
SO网友:Sally CJ

在WordPress中,请求路径,例如。path/to/something 如中所示example.com/path/to/something?query=string&if=any, 保存在中WP::$request 可通过全球$wp 变量,因此在您的情况下,可以这样做来检查页面是否/dashboard/products:

global $wp;
// Note: No trailing slashes.
$is_my_page = ( \'dashboard/products\' === $wp->request );

// Or without the "global $wp;"
$is_my_page = ( \'dashboard/products\' === $GLOBALS[\'wp\']->request );

// To check if you\'re on /dashboard/products/<anything>:
global $wp;
$is_my_page = preg_match( \'#^dashboard/products/#\', $wp->request );
可能有Dokan特定的方式/API/函数,但您必须自己找到。

如果出现以下情况,请更新/dashboard/products 实际上不是一个注册的WordPress重写规则,或者您在WordPress解析请求URL、路径等之前正在检查,那么您可以像这样执行“PHP方式”:

if ( ! empty( $_SERVER[\'REQUEST_URI\'] ) ) {
    $path = parse_url( $_SERVER[\'REQUEST_URI\'], PHP_URL_PATH );
    $is_my_page = ( \'/dashboard/products/\' === $path );
}

相关推荐