WooCommerce:填充 [product_page id="X"] 其中 X 是 URL 参数

WooCommerce: Populate [product_page id="X"] where X is a URL parameter

我编写了以下代码,目的是使用 url 参数动态填充 woocommerce 简码 [product_page id="X"],其中 X 是产品 ID,带有回退如果 url.

中不存在参数,则默认(产品 ID=46)

例如:

example.com/somepage?ppid=60 会将短代码更改为 [product_page id="60"]

示例。com/somepage 会将简码更改为 [product_page id="46"],其中 46 是“默认值”

但是,它目前没有返回正确的产品页面。奇怪的是,无论我尝试什么,它都默认为产品 ID 440(这是我数据库中最高的产品 ID)。

function ppid_from_query($atts) {
      $atts = shortcode_atts(array('default' => 46), $atts, 'myppid');
      $pp_id = $atts['default'];
      if (isset($_REQUEST['ppid']) && !empty($_REQUEST['ppid'])) {
        $pp_id = intval($_REQUEST['ppid']);
      }
      if (!empty($pp_id) && 46 != $pp_id) {
        return do_shortcode("[product_page id='{$ppid}']");
      }
    }
 add_shortcode('myppid', 'ppid_from_query');

并且将短代码添加到页面,如 [myppid default=46"]

我做错了什么?

您传递了错误的变量 $ppid 而不是 $pp_id。试试下面的代码。

function ppid_from_query( $atts ) {

    $atts = shortcode_atts( array(
        'default' => 46
    ), $atts, 'myppid' );

    $pp_id = $atts['default'];
    
    if ( isset( $_REQUEST['ppid'] ) && $_REQUEST['ppid'] != '' ) {
        $pp_id = intval( $_REQUEST['ppid'] );
    }

    return do_shortcode( "[product_page id='".$pp_id."']" );
    
}
add_shortcode( 'myppid', 'ppid_from_query' );