web-dev-qa-db-fra.com

Comment créer un code court qui renvoie du texte si le domaine est .com, et non .co.uk

J'essaie de créer un shortcode pour voir si l'URL correspond à l'attribut, puis renvoie le contenu. Jusqu'à présent j'ai:

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
    }
}

Mais comme vous pouvez le constater, je n’ai pas réussi à faire fonctionner correctement les attributs et l’instruction if.

Je voudrais l'utiliser comme ceci:

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

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

pour lire l'attribut country, il vous suffit de le lire en $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;
 }

};
3
Kaperto

Alors que if ($current_tld === $atts["country"]) check fera le travail pour vous lorsque tout sera parfait, il risque de générer des erreurs si votre code court est mal inséré ou incomplet.

Par exemple, vérifiez les deux scénarios suivants:

// misspelled contry attribute
[ifurl contry="com"] Show only if .com [/ifurl]
// incomplete shortcode with no country attribute
[ifurl] Show only if .com [/ifurl]

Dans ces deux cas, WordPress appellera votre fonction shortcode, mais celle-ci produira une erreur ou un résultat inattendu, car vous ne les avez pas manipulées.

Une façon de corriger le code consiste à effectuer une vérification isset( $atts["country"] ), comme ceci:

if ( isset( $atts["country"] ) && $current_tld === $atts["country"] )

Cependant, une méthode encore meilleure consiste à déclarer les attributs par défaut avant de traiter le shortcode à l'aide de la fonction shortcode_atts . Par exemple, le CODE amélioré pourrait être le suivant:

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 "";
}

Avec ce CODE, nous avons défini le site .com comme site par défaut. Par conséquent, le code court donné dans l'exemple suivant donnera la sortie sur le site .com, mais pas sur le site .co.uk:

[ifurl] Show only if .com [/ifurl]

Plus important encore, cela ne jettera aucune erreur.

De plus, en procédant ainsi, vous ouvrez la fenêtre pour améliorer vos attributs de code abrégé afin qu'ils puissent être modifiés par d'autres plug-ins à l'aide d'un crochet de filtre nommé shortcode_atts_{$shortcode_name} (dans votre cas, ce sera shortcode_atts_ifurl).

Ceci est très utile si vous voulez développer un plugin et que d'autres développeurs puissent améliorer votre plugin facilement sans avoir à le modifier directement.

3
Scott