web-dev-qa-db-fra.com

Obtenir le plugin Param URL et insérer le résultat dans le code du widget

J'essaie d'insérer le résultat d'un plug-in Get Param et de l'insérer dans un widget de calendrier sur une page WP.

Dans un module de code, si j'écris la syntaxe du plugin: [urlparam param="Book" /]

-et- l'URL de la page est: https://www.example.com/booking/?Book=calendly.com/xxxxx

... le résultat est correctement affiché: calendly.com/xxxxx

Maintenant, quand j'essaye de placer cette syntaxe de plugin dans le même module dans le code du widget, pas honorer le résultat attendu. Code du widget (notez l'urlparam après data-url =):

<!-- Calendly inline widget begin -->
<div class="calendly-inline-widget" data-url="[urlparam param="Book" /]" style="min-width:320px;height:580px;"></div>
<script type="text/javascript" src="https://assets.calendly.com/assets/external/widget.js"></script>
<!-- Calendly inline widget end -->

Y a-t-il une sorte de syntaxe qui me manque pour incorporer ce code dans un code de widget en ligne?

1
Bruce Christy

Je pense que le problème sous-jacent est que les codes courts ne sont pas évalués lorsqu'ils sont placés dans des attributs HTML . Vous pouvez modifier le modèle et générer le code HTML nécessaire en utilisant PHP et do_shortcode( '[urlparam param="Book" /]') comme approche alternative:

<!-- Calendly inline widget begin -->
<div class="calendly-inline-widget" data-url="<?php echo do_shortcode( '[urlparam param="Book" /]' ); ?>" style="min-width:320px;height:580px;"></div>
<script type="text/javascript" src="https://assets.calendly.com/assets/external/widget.js"></script>
<!-- Calendly inline widget end -->

Création d'un plugin contenant un widget Calendly

Une autre approche consiste à créer un widget produisant le code HTML souhaité.

Le code ci-dessous peut ensuite être encapsulé dans un plug-in en l'enregistrant dans un fichier nommé wpse-calendly.php dans un répertoire nommé wpse-calendly. Ensuite, copiez notre plug-in Calendly personnalisé dans le répertoire plugins, activez-le et ajoutez le widget à la zone de widget souhaitée.

Notez que cette solution repose toujours sur le shortcode urlparam pour fonctionner correctement.

/**
 * Register WPSE_Calendly widget.
 */
add_action( 'widgets_init', 'wpse_register_calendly_widget' );
function wpse_register_calendly_widget() {
    register_widget( 'WPSE_Calendly_Widget' );
}

/**
 * Adds WPSE_Calendly widget.
 */

/**
 * Core class used to implement a WPSE Calendly widget.
 *
 * @see WP_Widget
 */
class WPSE_Calendly_Widget extends WP_Widget {

    /**
     * Sets up a new WPSE Calendly widget instance.
     */
    public function __construct() {
        $widget_ops = array(
            'description' => __( 'Display Calendly Widget.', 'wpse_calendly' ),
        );
        parent::__construct( 'wpse_calendly', __( 'Calendly', 'wpse_calendly' ), $widget_ops );
    }

    /**
     * Outputs the content for the current Calendly widget instance.
     *
     * @param array $args     Display arguments including 'before_title', 'after_title',
     *                        'before_widget', and 'after_widget'.
     * @param array $instance Settings for the current Calendly widget instance.
     */
    public function widget( $args, $instance ) {
        if ( ! empty( $instance['title'] ) ) {
            $title = $instance['title'];
        }

        // Bail if the urlparam shortcode has not been registered.
        if ( ! shortcode_exists( 'urlparam' ) ) {
            return;
        }

        /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
        $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );

        echo $args['before_widget'];
        if ( $title ) {
            echo $args['before_title'] . $title . $args['after_title'];
        }

        ?>
<!-- Calendly inline widget begin -->
<div class="calendly-inline-widget" data-url="<?php echo do_shortcode( '[urlparam param="Book" /]' ); ?>" style="min-width:320px;height:580px;"></div>
<script type="text/javascript" src="https://assets.calendly.com/assets/external/widget.js"></script>
<!-- Calendly inline widget end -->
        <?php

        echo $args['after_widget'];
    }

    /**
     * Handles updating settings for the current Calendly widget instance.
     *
     * @param array $new_instance New settings for this instance as input by the user via
     *                            WP_Widget::form().
     * @param array $old_instance Old settings for this instance.
     * @return array Settings to save or bool false to cancel saving.
     */
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance['title'] = sanitize_text_field( $new_instance['title'] );

        return $instance;
    }

    /**
     * Outputs the Calendly widget settings form.
     *
     * @param array $instance Current settings.
     */
    public function form( $instance ) {
        $title_id = $this->get_field_id( 'title' );
        $instance['title'] = ! empty( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';

        echo '<p><label for="' . $title_id .'">' . __( 'Title:', 'wpse_calendly' ) . '</label>
            <input type="text" class="widefat" id="' . $title_id .'" name="' . $this->get_field_name( 'title' ) .'" value="' . $instance['title'] .'" />
        </p>';
    }
}
1
Dave Romsey