Действие не загружается в плагин расширения - PullRequest
1 голос
/ 14 октября 2019

Я использую wordpress 5.2.3, кроме того, я пытаюсь кодировать свой собственный тег для плагина mailster 2.4.4, плагин для рассылки WordPress.

В документации к плагину написано , что яследует просто добавить действие mailster_add_tag к functions.php.

Однако я пытаюсь создать свой собственный плагин, так как в будущем будет добавлено больше функциональности / сложности:

My newsletter.php:

<?php
/**
Plugin Name: Newsletter Extension
description: Mailster Newsletter Extension
Version: 1.0
Author: Batman
License: GPLv2 or later
Text Domain: newsletter
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

class Newsletter {

    /**
     * Constructor.
     */
    public function __construct() {
        //  constants.
        define( '_FILE', __FILE__ );
        define( '_DIR', trailingslashit( dirname( __FILE__ ) ) );
        define( '_VERSION', '0.0.1' );
        register_activation_hook( basename( _DIR ) . '/' . basename( _FILE ), array( $this, 'activate' ) );
        add_action( 'plugins_loaded', array( $this, 'includes' ) );
    }
    /**
     * Called on plugin activation
     */
    public function activate() {
        $this->includes();
        $this->addCustomTags();

        flush_rewrite_rules();
    }
    /**
     * Includes.
     */
    public function includes() {
        include_once( _DIR . 'includes/DailyTemplate.php' );
    }
    /**
     * Includes.
     */
    public function addCustomTags() {
        DailyTemplate::addMyTag();
    }
}
new Newsletter();

Внутри моего includes/DailyTemplate.php:

<?php

class DailyTemplate {

    public function __construct() { }

    public function addMyTag() {
        if ( function_exists( 'mailster_add_tag' ) ) {
            mailster_add_tag( 'coupon', function( $option, $fallback, $campaignID = null, $subscriberID = null ) {

                // make sure the subscriber ID is set
                if ( ! is_null( $subscriberID ) ) {
                    return get_subscribers_coupon( $subscriberID );
                }

                // return the fallback "NOCOUPONCODE4U"
                return $fallback;
            } );
        }
    }

    function get_subscribers_coupon( $subscriber_id ) {
        $seed = AUTH_SALT;
        $length = 10;
        $code = substr( strtoupper( base_convert( md5( $seed . $subscriber_id ), 16, 36 ) ), 0, $length );
        return $code;
    }

}
new DailyTemplate();

При запуске приведенного выше кода я не получаю никакой ошибки.

Однако, похоже,мне, что плагин не загружен, потому что - как указано в документации - нет тега в раскрывающемся списке редактора . (см. рисунок на странице)

Есть предложения, что я делаю неправильно, чтобы загрузить тег? Я использую неправильный крючок?

Я ценю ваши ответы!

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Здесь вы вызываете статический метод:

public function addCustomTags() {
    DailyTemplate::addMyTag();
}

Итак, лучше объявить этот метод как статический, так как статический вызов нестатических методов не рекомендуется, так что это будет так:

public static function addMyTag() { //.....

в методе "addMyTag ()" вы вызываете метод-член внутри вашего класса, поэтому вы должны вызывать свой метод следующим образом:

return self::get_subscribers_coupon( $subscriberID );

последнее, что вы также должны объявитьМетод "get_subscribeers_coupon ()" как статический метод, так как мы вызываем его статически:

public static function get_subscribers_coupon( $subscriber_id ) { //....

Надеюсь, эта помощь.

1 голос
/ 14 октября 2019

Здесь DailyTemplate::addMyTag(); вы вызываете метод, который является статическим и доступен без создания объекта. Таким образом, вы можете объявить это как статический метод. Вызов статических методов статически не рекомендуется с PHP 7. Объявите как

public static function addMyTag 

и проверьте, работает ли он или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...