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

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

17

Eelmises postituses käisime läbi palju ümberkujundamist, mis jagas mured oma klassidesse.

Lõppkokkuvõttes aitab see näidata, kuidas saame säilitada kõrgetasemelise ühtekuuluvuse, töötades mitte ainult WordPressi klassidega, vaid tehes seda koos juba olemasolevate API-dega.

Kuna mõned viimased postitused koodibaasi ümbertöötamise kohta on olnud nii pikad, on praegune postituste komplekt keskendunud väikestele järkjärgulistele muudatustele ja seega lühematele, rohkem keskendunud postitustele.

Nagu eelmises artiklis mainitud:

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.

Nii et see on koht, kus me selles artiklis üles võtame.

WordPressi vidina katlaplaat: ümberkujundamine, 11. osa

Enne mis tahes koodi kirjutamist tuleb kõigepealt tähele panna, et kui täidate ühe vidina sisuala (nt pealkirja) millegi sellisega :

<script type="text/javascript">This is the Title</script>

Seejärel klõpsake nuppu Salvesta, tegelik sisu desinfitseeritakse ja kirjutatakse andmebaasi. Seda näete, kui vaatate andmebaasis vidina väärtust.

Lisaks näivad andmed esmapilgul korras, kuid kui värskendate lehte, kuvatakse desinfitseerimata sisu. Kui navigeerite teisele lehele (nt Menüüd) ja tulete seejärel tagasi, kuvatakse vidina sisu, kuid see on korralikult puhastatud.

Miks see siis teatud toimingute tegemisel näitab üht asja andmebaasis ja üht asja haldusala esiotsas?

See on seotud vidina vahemäluga ja õnneks saame seda vahemälu oma äranägemise järgi tühjendada, kasutades soovitud konksu (st saame tellida mis tahes sündmuse ja seejärel lasta sellel vahemälu tühjendada).

Koodi viitest :

Eemaldab vahemälu sisu, mis vastab võtmele ja rühmale.

Pange tähele, et see nõuab võtme ja valikulise rühma esitamist. Boilerplate’is oleme võtmena kasutanud vidina näppu ja rühm on vidin.

Vahemälu tühjendamine

Kuna funktsiooni saab siduda mis tahes sündmusega, saame luua abonendi, mille saame siduda mis tahes sündmusega. See tähendab , et saame luua DeleteWidgetCache’i abonendi oma abonendi nimeruumis:

<?php

<?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 WordPressWidgetBoilerplateSubscriber;

/**
 * Deletes the cached contents of the widget.
 */
class DeleteWidgetCacheSubscriber extends AbstractSubscriber
{
    /**
     * {@inheritdoc}
     */
    public function __construct(string $hook)
    {
        parent::__construct($hook);
    }

    /**
     * Flushes the widget's cache based on the key that's specified in the function arguments.
     */
    public function load()
    {
        /* Because we're implementing an abstract class, we'll parse arguments from the
         * func_get_args().
         */
        $args = func_get_args();
        if (!$this->hasValidArguments($args)) {
            return;
        }

        // TODO: More to come...
    }

    /**
     * Verifies that we have valid arguments with which to work.
     *
     * @param array $args the array of arguments we are validating
     *
     * @return bool true if the arguments are valid; otherwise, false
     */
    private function hasValidArguments(array $args): bool
    {
        // First, check the initial index of the arguments.
        if (!isset($args[0])) {
            return false;
        }

        // Next, check the values of the arguments for the widget key and group.
        $args = $args[0];
        if (!isset($args[0]) && !isset($args[1])) {
            return false;
        }

        return true;
    }
}

Seejärel värskendame abonendi registrisse lisamiseks alglaadimist ja kasutame kohandatud konksu flush_widget_cache, mida kasutame hetkeks.

<?php
/**
 * WordPress Widget Boilerplate
 *
 * The WordPress Widget Boilerplate is an organized, maintainable boilerplate for building
 * widgets using WordPress best practices.
 *
 * @package   WordPressWidgetBoilerplate
 * @author    Your Name <email@example.com>
 * @license   GPL-3.0+
 * @link      http://example.com
 * @copyright 2018 - 2019 Your Name or Company Name
 *
 * @wordpress-plugin
 * Plugin Name:       WordPress Widget Boilerplate
 * Plugin URI:        https://github.com/tommcfarlin/wordpress-widget-boilerplate
 * Description:       An object-oriented foundation for building WordPress Widgets.
 * Version:           1.0.0
 * Author:            Tom McFarlin
 * Author URI:        https://tommcfarlin.com
 * Text Domain:       widget-name
 * License:           GPL-3.0+
 * License URI:       http://www.gnu.org/licenses/gpl-3.0.txt
 * Domain Path:       /lang
 */

namespace WordPressWidgetBoilerplate;

use WordPressWidgetBoilerplateUtilitiesRegistry;
use WordPressWidgetBoilerplatePlugin;
use WordPressWidgetBoilerplateSubscriberWidgetSubscriber;
use WordPressWidgetBoilerplateSubscriberDeleteWidgetCacheSubscriber;

// Prevent this file from being called directly.
defined('WPINC') || die;

// Include the autoloader.
require_once __DIR__. '/vendor/autoload.php';

// Setup a filter so we can retrieve the registry throughout the plugin.
$registry = new Registry();
add_filter('wpwBoilerplateRegistry', function() use ($registry) {
    return $registry;
});

// Add subscribers.
$registry->add('deleteWidgetCacheSubscriber', new DeleteWidgetCacheSubscriber('flush_widget_cache'));

// Add the Widget base class to the Registry.
$registry->add('widgetSubscriber', new WidgetSubscriber('widgets_init'));

// Start the machine.
(new Plugin($registry))->start();

Boilerplate’i jaoks kasutame kohandatud sündmust alati, kui kutsutakse vidina serialiseerimiskood.

Esmalt defineerime  kõne do_action, identifitseerime selle kui flush_widget_cache ja seejärel edastame sündmusele vajalikud argumendid, et tellija saaks neid lugeda:

<?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
{
    /**
     * @var string a reference to the slug of the widget to which the serialier is associated
     */
    private $widgetSlug;

    /**
     * Initializes the class.
     *
     * @param string a reference to the slug of the widget to which the serialier is associated
     */
    public function __construct(string $widgetSlug)
    {
        $this->widgetSlug = $widgetSlug;
    }

    /**
     * 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)
            );
        }

        do_action('flush_widget_cache', [$this->widgetSlug, 'widget']);

        return $instance;
    }
}

Ja siis abonendis tühjendame sissetulevate argumentide põhjal vahemälu :

<?php

<?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 WordPressWidgetBoilerplateSubscriber;

/**
 * Deletes the cached contents of the widget.
 */
class DeleteWidgetCacheSubscriber extends AbstractSubscriber
{
    /**
     * {@inheritdoc}
     */
    public function __construct(string $hook)
    {
        parent::__construct($hook);
    }

    /**
     * Flushes the widget's cache based on the key that's specified in the function arguments.
     */
    public function load()
    {
        /* Because we're implementing an abstract class, we'll parse arguments from the
         * func_get_args().
         */
        $args = func_get_args();
        if (!$this->hasValidArguments($args)) {
            return;
        }

        $args = $args[0];
        wp_cache_delete($args[0], $args[1]);
    }

    /**
     * Verifies that we have valid arguments with which to work.
     *
     * @param array $args the array of arguments we are validating
     *
     * @return bool true if the arguments are valid; otherwise, false
     */
    private function hasValidArguments(array $args): bool
    {
        // First, check the initial index of the arguments.
        if (!isset($args[0])) {
            return false;
        }

        // Next, check the values of the arguments for the widget key and group.
        $args = $args[0];
        if (!isset($args[0]) && !isset($args[1])) {
            return false;
        }

        return true;
    }
}

Ja see teebki seda.

Esiotsa kasutamiseks valmis

Praegu on meil paigas mehhanism, mis saab vidinate vahemälu igal ajal tühjendada – mitte ainult kohandatud sündmusega, vaid ka kõigi WordPressi pakutavate sündmustega.

See võib olla kasulik, kui kasutate Boilerplate’i millegi jaoks, mis kasutab vahemällu salvestatud päringut või muud vahemällu salvestamise mehhanismi, ja soovite veenduda, et sisu on selge.

Järgmisena vaatame sisu renderdamist esiotsas. Oleme Boilerplate’i ümbertöötlemise lõpule jõudmas, kuid veel on vaja natuke teha, enne kui oleme valmis ühendama selle koodibaasi põhiharuga.

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