如果域名是.com而不是.co.uk,我如何创建返回文本的快捷代码

时间:2018-08-19 作者:JronCh

我试图创建一个短代码,查看url是否与属性匹配,然后返回内容。到目前为止,我已经:

add_shortcode( \'ifurl\', \'ifurl\' );

function ifurl( $atts, $content = null ) {
    $url =  \'https://\' . $_SERVER[\'SERVER_NAME\']; 
    $current_tld = end( explode( ".", parse_url( $url, PHP_URL_HOST ) ) );
    $country_select = // Something to get attribute \'country\'

    if( $current_tld == $country_select ) {
        return $content
    }
}
但正如您所看到的,我无法使属性和if语句正常工作。

我想这样使用它:

[ifurl country="com"] Show only if .com [/ifurl]

[ifurl country="uk"] Show only if .co.uk [/ifurl]

2 个回复
最合适的回答,由SO网友:Kaperto 整理而成

阅读属性country, 你只需要把它读进去$atts

add_shortcode( \'ifurl\', \'ifurl\' );

function ifurl($atts, $content = null) {

 $url =  \'https://\' . $_SERVER[\'SERVER_NAME\']; 
 $current_tld = end(explode(".", parse_url($url, PHP_URL_HOST)));

 if ($current_tld === $atts["country"]) {
  return $content;
 }

};

SO网友:Scott

虽然if ($current_tld === $atts["country"]) 当一切都很完美时,check将为您完成这项工作,当您的短代码插入错误或不完整时,它可能会产生错误。

例如,检查以下两种情况:

// misspelled contry attribute
[ifurl contry="com"] Show only if .com [/ifurl]
// incomplete shortcode with no country attribute
[ifurl] Show only if .com [/ifurl]
在这两种情况下,WordPress都会调用您的shortcode函数,但您的shortcode函数会产生错误或意外的结果,因为您没有处理这些问题。

修复代码的一种方法是isset( $atts["country"] ) 检查,如下所示:

if ( isset( $atts["country"] ) && $current_tld === $atts["country"] )
然而,更好的方法是首先声明默认属性,然后再使用shortcode_atts 作用例如,改进后的代码可能如下所示:

add_shortcode( \'ifurl\', \'ifurl\' );

function ifurl( $atts, $content = "" ) {
    $atts = shortcode_atts(
        array(
            \'country\' => \'com\'
        ), $atts, \'ifurl\' );

    $url =  \'https://\' . $_SERVER[\'SERVER_NAME\']; 
    $current_tld = end( explode( ".", parse_url( $url, PHP_URL_HOST ) ) );

    if( $current_tld === $atts[\'country\'] ) {
        return $content;
    }
    return "";
}
使用此代码,我们可以.com 默认为site,因此以下示例中给出的shortcode将在上给出输出.com 站点,但不在上.co.uk 地点:

[ifurl] Show only if .com [/ifurl]
更重要的是,它不会抛出任何错误。

此外,通过这种方式,您可以打开窗口来增强短代码属性,以便其他插件使用名为shortcode_atts_{$shortcode_name} (在你的情况下shortcode_atts_ifurl).

如果您想开发插件,并且希望其他开发人员能够轻松地增强您的插件,而不必直接修改它,那么这非常有用。

结束

相关推荐

Shortcode with foreach

我不能对foreach使用shortcode。它给了我语法错误。我错在哪里?function create_galeri_shortcode($atts) { $atts = shortcode_atts( array( ), $atts, \'galeri\' ); if ( has_post_format( \'gallery\' )) { $images = get_post_