✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

WordPressi vidinad: ümbertöötamine, 10. osa

14

Mis puutub WordPressi vidinate katlaplaadi ümbertöötamisse, siis oleme heas kohas. Palju tööd on tehtud selle nimel, et uute klasside, funktsioonide ja funktsionaalsuse juurutamine peaks olema palju lihtsam.

Ja mitte ainult: seda peaks olema lihtsam jälgida.

Täname viimases postituses tehtud tööd, et meil on veel palju tööd edasi arendada – nimelt põhiline haldusliides.

Lõpuks öeldi viimases postituses:

Mõne järgmise artikli jooksul see areneb edasi, kuid nagu näete, hoolitseme selle eest, et meil oleks WordPressiga rääkimiseks üks põhifunktsioonide klass ja klass, mis on mõeldud spetsiaalselt haldusvormi renderdamiseks.

Ja see on koht, kus me selles artiklis üles võtame. Täpsemalt käsitleme andmete desinfitseerimist ja serialiseerimist ning vidinasse salvestatud andmete toomist.

WordPressi vidina katlaplaat: ümbertöötlemine, 10. osa

Kasutajaliidese ümberkujundamine

Enne serialiseerimise juurde asumist peame tegema mõned väikesed tööd oma haldusvaatega. Tuletage meelde seeria varasemaid postitusi, et oleme loonud vormi, mis aktsepteerib:

  • pealkiri,
  • natuke sisu,
  • ja märkeruut.

See kuvatakse suurepäraselt, kuid see välistab mõned vidinate API põhifunktsioonid. Nimelt peame tagama, et nimetaksime oma elemente õigesti, kasutades järgmisi funktsioone:

Ja siis kirjutame oma funktsiooni, mida nimetatakse lihtsalt hankimiseks, mida ma lühidalt selgitan.

Ülaltoodud funktsioonid on vajalikud, kuna need aitavad WordPressil jälgida, mitu vidina eksemplari kasutatakse ja millist kasutaja redigeerib. Teisisõnu saame palju funktsioone tasuta.

Enne koodi näitamist tahan lühidalt arutada selle hankimise funktsiooni eesmärki, mida me tutvustame. Lühidalt, see on viis, kuidas me edastame võti (nagu võtme/väärtuse paari võtmes) funktsiooni ja seejärel saame sellel hõlpsalt meie jaoks väärtuse hankida, nii et see hoiab meie liidese võimalikult puhtana.

Niisiis, esiteks hankimise meetod :

<?php

/**
 * If the value for the key exists in the current instance of the widget, then it will
 * retrieve it. Otherwise, it will return an empty value.
 *
 * @param string $key the used to identify the value of the widget.
 * @param array $instance the options for the instance of this widget
 */
protected function get($key, $instance)
{
    return empty($instance[$key])? '': $instance[$key];
}

Oluline on märkida, et see meetod ei aktsepteeri mitte ainult loetava väärtuse võtit, vaid ka massiivi, mis viitab massiivi eksemplarile.

Ja nüüd, ümbertöötatud kasutajaliides :

<?php
/*
 * This file is part of WordPress Widget Boilerplate
 * (c) Tom McFarlin <tom@tommcfarlin.com>
 *
 * This source file is subject to the GPL license that is bundled
 * with this source code in the file LICENSE.
 */
?>

<div class="widget-content">
    <p>
        <input
            type="text"
            id="<?php echo esc_attr($this->get_field_id('title')); ?>"
            name="<?php echo esc_attr($this->get_field_name('title')); ?>"
            value="<?php echo $this->get('title', $instance) ?>"
            placeholder="Widget Title"
            class="widefat"
        />
    </p>

    <p>
        <textarea
            id="<?php echo esc_attr($this->get_field_id('content')); ?>"
            name="<?php echo esc_attr($this->get_field_name('content')); ?>"
            placeholder="Widget Content"
            style="width:100%;"><?php echo $this->get('content', $instance) ?></textarea>
    </p>

    <p>
        <input
            type="checkbox"
            value="on"
            name="<?php echo esc_attr($this->get_field_name('display-title')); ?>"
            id="<?php echo esc_attr($this->get_field_id('display-title')); ?>"
            <?php checked('on', $this->get('display-title', $instance), true); ?>
            class="checkbox"
        />
        <label for="<?php echo esc_attr($this->get_field_id('display-title')); ?>">Display Title?</label>
    </p>
</div><!-- .widget-content -->

Kuid see jätab siiski funktsionaalsusest puudu ja jätab töö meie teha. Nimelt peame andmed desinfitseerima ja WordPressile tagasi saatma, nii et see salvestab andmed.

Desinfitseerimine ja serialiseerimine

Meie näite puhul oleme väga ranged selles, mida lubame. Nimelt hakkame toetama ainult põhiteksti ja eemaldame kõik agressiivselt välja.

See tähendab, et me ei luba märgistamist ega midagi sellist. Selle asemel eemaldame kõik, mis pole põhitekst. Võime seda natuke kaunistada, kui on aeg esiküljel kuvada, kuid jätame selle vastava postituseni.

Selleks kasutame järgmisi funktsioone:

Tuletage meelde, et meie vidinas on kaks välja – pealkirjaväli ja sisuväli. Sõltuvalt loodava vidina tüübist võib andmete puhastamiseks vaja minna ainult ühte klassi või funktsiooni. Teistes olukordades võib vaja minna midagi keerukamat.

Pidage seda koodi läbimisel meeles, kuna see ei ole kõigile sobiv lahendus. Selle asemel tehakse see spetsiaalselt selle jaoks.

Igatahes, andmete desinfitseerimiseks kirjutame spetsiaalselt selleks otstarbeks klassi ja seejärel teeme selle oma WidgetAdmini klassile kättesaadavaks.

Siin on klass tervikuna koos järgneva kirjeldusega:

<?php

/*
 * This file is part of WordPress Widget Boilerplate
 * (c) Tom McFarlin <tom@tommcfarlin.com>
 *
 * This source file is subject to the GPL license that is bundled
 * with this source code in the file LICENSE.
 */

namespace WordPressWidgetBoilerplateWordPress;

/**
 * Santiizes and saves the data for the widget.
 */
class WidgetSerializer
{
    /**
     * Updates the values of the widget. Sanitizes the information before saving it.
     *
     * @param array $newInstance the array of new options to save
     */
    public function update($newInstance)
    {
        $instance = [];
        foreach ($newInstance as $key => $value) {
            $instance[$key] = strip_tags(
                stripslashes($value)
            );
        }

        return $instance;
    }
}

Klass peaks olema sirgjooneline. See võtab sisse vidina sissetulevad väärtused, desinfitseerib need ja tagastab seejärel uue massiivi, mis antakse WordPressile tagasi.

Siiski on konks. See klass peab olema viimases postituses näidatud põhividinate klassi atribuut.

Teiseks  kutsub sellesse klassi sisse värskendusmeetod, mis on osa vidinate API-st. Muutujat $oldInstance ei ole vaja serialisaatorisse edastada, kuid see on vajalik värskendusmeetodi jaoks.

Siin on vidinaklass, nagu see praegu on üles ehitatud :

<?php

/*
 * This file is part of WordPress Widget Boilerplate
 * (c) Tom McFarlin <tom@tommcfarlin.com>
 *
 * This source file is subject to the GPL license that is bundled
 * with this source code in the file LICENSE.
 */

namespace WordPressWidgetBoilerplateWordPress;

use WP_Widget;

class Widget extends WP_Widget
{
    /**
     * @var string unique identifier for your widget
     */
    protected $widgetSlug;

    /**
     * Initializes the plugin by setting its properties and calling the parent class with the description.
     *
     * @param string           $widgetSlug       unique identifier for your widget
     * @param WidgetSerializer $widgetSerializer the class responsible for saving widget options
     */
    public function __construct($widgetSlug)
    {
        $this->widgetSlug = $widgetSlug;

        parent::__construct(
            $this->getWidgetSlug(),
            __('Widget Name', $this->getWidgetSlug()),
            [
                'classname' => $this->getWidgetSlug().'-class',
                'description' => __('Short description of the widget goes here.', $this->getWidgetSlug()),
            ]
        );
    }

    /**
     * Return the widget slug.
     *
     * @return string slug variable
     */
    public function getWidgetSlug()
    {
        return $this->widgetSlug;
    }

    /**
     * Displays the administrative view of the form and includes the options
     * for the instance of the widget as arguments passed into the function.
     *
     * @param array $instance the options for the instance of this widget
     */
    public function form($instance)
    {
        include plugin_dir_path(__FILE__).'Views/Admin.php';
    }

    /**
     * Updates the values of the widget. Uses the serialization class to sanitize the
     * information before saving it.
     *
     * @param array $newInstance the values to be sanitized and saved
     * @param array $oldInstance the values that were originally saved
     */
    public function update($newInstance, $oldInstance)
    {
        return $this->widgetSerializer->update($newInstance, $oldInstance);
    }

    /**
     * If the value for the key exists in the current instance of the widget, then it will
     * retrieve it. Otherwise, it will return an empty value.
     *
     * @param string $key      the used to identify the value of the widget
     * @param array  $instance the options for the instance of this widget
     */
    protected function get($key, $instance)
    {
        return empty($instance[$key])? '': $instance[$key];
    }
}

Kui aga lehte värskendate, võite märgata, et desinfitseerimine ja serialiseerimine ei paista andmete toomisel töötavat. Ja seda me järgmises postituses uurimegi.

Andmete otsimine

Pange tähele, et kuigi funktsionaalsus tundub selle jaoks puudulik (kuna desinfitseerimata andmed on endiselt kuvatud), oleme keskendunud sellele, et kirjutaksime klasse sidusalt ja vastutustundlikult ning need ei oleks omavahel tihedalt seotud.

Kordame seda järgmises postituses veidi rohkem. Nii et uurige ülaltoodud koodi, rakendage seda, kui olete seda teinud, ja jätkame järgmises postituses.

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem