Supporto » Funzionalità = Plugin » Errore ad un plugin che genera post da CF7

  • Ciao a tutti,

    dopo i due più recenti aggiornamenti di wordpress non mi funziona più un plugin che genera post di una determinata categoria derivante dalla compilazione di moduli di CF7.
    L’ho controllato e ricontrollato eppure niente da fare, con il debug di wordpress mi esce il seguente errore:

    Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, function “add_author_support_to_posts” not found or invalid function name in /var/www/virtual/mlnv.org/sportelodelsitadino/htdocs/wp-includes/class-wp-hook.php:324

    Stack trace: 0 /var/www/virtual/mlnv.org/sportelodelsitadino/htdocs/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters() 1 /var/www/virtual/mlnv.org/sportelodelsitadino/htdocs/wp-includes/plugin.php(517): WP_Hook->do_action() 2 /var/www/virtual/mlnv.org/sportelodelsitadino/htdocs/wp-settings.php(643): do_action() 3 /var/www/virtual/mlnv.org/sportelodelsitadino/htdocs/wp-config.php(82): require_once(‘…’) 4 /var/www/virtual/mlnv.org/sportelodelsitadino/htdocs/wp-load.php(50): require_once(‘…’) 5 /var/www/virtual/mlnv.org/sportelodelsitadino/htdocs/wp-blog-header.php(13): require_once(‘…’) 6 /var/www/virtual/mlnv.org/sportelodelsitadino/htdocs/index.php(17): require(‘…’) 7 {main} thrown in /var/www/virtual/mlnv.org/sportelodelsitadino/htdocs/wp-includes/class-wp-hook.php on line 324

    Questo di seguito alla fine è il codice php del plugin, so che è lunghetto ma se qualcuno gentilmente mi aiuta a trovar l’errore gliene sarei molto grato.
    Grazie infinite

    Enrico

    <?php
    
    if (!defined('ABSPATH')) {
        exit;
    }
    
    /**
     * Our main plugin class
     */
    class CF7_To_WP
    {
    
        /**
         * The single instance of cf7_to_wp.
         * @var     object
         */
        private static $_instance = null;
    
        /**
         * Settings class object
         * @var     object
         */
        public $settings = null;
    
        /**
         * The version number.
         * @var     string
         */
        public $_version;
    
        /**
         * The token.
         * @var     string
         */
        public $_token;
    
        /**
         * The main plugin file.
         * @var     string
         */
        public $file;
    
        /**
         * The main plugin directory.
         * @var     string
         */
        public $dir;
    
        /**
         * The plugin assets directory.
         * @var     string
         */
        public $assets_dir;
    
        /**
         * The plugin assets URL.
         * @var     string
         */
        public $assets_url;
    
        /**
         * Our post type slug.
         *
         * @var string
         */
        private $post_type = 'cf7_form_messages';
    
        /**
         * Constructor function.
         * @access  public
         */
        public function __construct($file = '', $version = '0.1')
        {
            $this->_version = $version;
            $this->_token = 'cf7_to_wp';
    
            // Load plugin environment variables
            $this->file = $file;
            $this->dir = dirname($this->file);
            $this->assets_dir = trailingslashit($this->dir) . 'assets';
            $this->assets_url = esc_url(trailingslashit(plugins_url('/assets/', $this->file)));
    
            // Handle localization
            $this->load_plugin_textdomain();
            add_action('init', array($this, 'load_localization'), 0);
        }
    
        /**
         * Initialize all the things!
         */
        public function init()
        {
            // Register Messages post type.
            add_action('init', array($this, 'register_form_msg_post_type'));
            add_filter('add_menu_classes', array($this, 'menu_msg_form_bubble'));
            add_filter('post_row_actions', array($this, 'action_row_for_msg_posts'), 10, 2);
            add_action('admin_init', [$this, 'maybe_mark_form_message_as_read']);
            add_filter('wpcf7_verify_nonce', '__return_true');
    
            // Hook into CF7 actions.
            add_filter('wpcf7_editor_panels', array($this, 'add_cf7_panel'));
            add_action('wpcf7_after_save', array($this, 'save_cf7_data'), 50, 1);
            add_action('wpcf7_mail_sent', array($this, 'create_post_on_form_submission'), 50, 1);
            add_action('wpcf7_mail_failed', array($this, 'create_post_on_form_submission'), 50, 1);
            add_action('init', 'add_author_support_to_posts');
            add_filter('wpcf7_verify_nonce', '__return_true');
        }
    
        /**
         * Load plugin localisation
         */
        public function load_localization()
        {
            load_plugin_textdomain('cf7_to_wp', false, dirname(plugin_basename($this->file)) . '/lang/');
        }
    
        /**
         * Load plugin textdomain
         */
        public function load_plugin_textdomain()
        {
            $domain = 'cf7_to_wp';
            $locale = apply_filters('plugin_locale', get_locale(), $domain);
            load_textdomain($domain, WP_LANG_DIR . '/' . $domain . '/' . $domain . '-' . $locale . '.mo');
            load_plugin_textdomain($domain, false, dirname(plugin_basename($this->file)) . '/lang/');
        }
    
        /**
         * Register our post type to store messages.
         */
        public function register_form_msg_post_type()
        {
            register_post_type(
                $this->post_type,
                array(
                    'labels' => array(
                        'name' => __('Pratiche', 'cf7_to_wp'),
                        'singular_name' => __('Pratica', 'cf7_to_wp'),
                        'add_new' => __('Aggiungi nuova', 'cf7_to_wp'),
                        'add_new_item' => __('Aggiungi nuova pratica', 'cf7_to_wp'),
                        'edit' => __('Modifica', 'cf7_to_wp'),
                    ),
                    'description' => 'Pratiche e Servizi',
                    'has_archive' => true,
                    'publicly_queryable' => true,
                    'capability_type' => 'post',
                    'menu_position' => 32,
                    'show_ui' => true,
                    'show_in_menu' => true,
                    'public' => true,
                    'query_var' => true,
                    'menu_icon' => 'dashicons-buddicons-pm',
                    'taxonomies' => array('category'),
                    'supports' => array(
                        'author',
                        'title',
    					'category',
                        'editor',
                        'excerpt',
                        'trackbacks',
                        'page-attributes',
                        'custom-fields',
                        'thumbnail',
                        'sticky',
                    ),
                )
            );
        }
    
        /**
         * Add bubble to admin menu
         *
         * @param array $menu
         * @return array $menu
         */
        public function menu_msg_form_bubble($menu)
        {
            $form_messages_count = wp_count_posts($this->post_type);
            $pending_count = $form_messages_count->draft + $form_messages_count->pending;
    
            foreach ($menu as $menu_key => $menu_data) {
                if ("edit.php?post_type={$this->post_type}" !== $menu_data[2]) {
                    continue;
                }
    
                $menu[$menu_key][0] .= " <span class='update-plugins count-$pending_count'><span class='plugin-count'>" . number_format_i18n($pending_count) . '</span></span>';
            }
    
            return $menu;
        }
    
        /**
         * Add "Mark as read" action for our post type
         *
         * @param array $actions
         * @param WP_Post $post
         * @return array $actions
         */
        public function action_row_for_msg_posts($actions, $post)
        {
            if ($post->post_type === $this->post_type && $post->post_status !== 'publish') {
                $actions['mark_as_read'] = sprintf(
                    '<a href="%s" class="aria-button-if-js" aria-label="%s">%s</a>',
                    wp_nonce_url("edit.php?post_type={$this->post_type}&action=mark_as_read&message_id={$post->ID}", "mark_message_as_read_{$post->ID}"),
                    esc_attr(__('Mark as read', 'cf7_to_wp')),
                    __('Mark as read', 'cf7_to_wp')
                );
            }
    
            return $actions;
        }
    
        /**
         * Mark form message as read
         */
        public function maybe_mark_form_message_as_read()
        {
            if (isset($_GET['action']) && $_GET['action'] == 'mark_as_read' && isset($_GET['message_id'])) {
                $message_id = (int) $_GET['message_id'];
    
                if (isset($_GET['_wpnonce']) && wp_verify_nonce($_GET['_wpnonce'], "mark_message_as_read_{$message_id}")) {
                    $updated_post = wp_update_post(
                        array(
                            'ID' => $message_id,
                            'post_status' => 'publish',
                        )
                    );
    
                    wp_redirect(wp_get_referer());
                    exit();
                }
            }
        }
    
        /**
         * Add new panel to CF7 form settings
         *
         * @param array $panels
         * @return array
         */
        public function add_cf7_panel($panels)
        {
            $panels['cf7-to-wp'] = array(
                'title' => __('Salva messaggi', 'cf7_to_wp'),
                'callback' => array($this, 'cf7_to_wp_form_metabox'),
            );
    
            return $panels;
        }
    
        /**
         * Output the content of our panel/metabox
         *
         * @param WPCF7_ContactForm $post CF7 object
         */
        public function cf7_to_wp_form_metabox($post)
        {
            $id = $post->id();
            $cf7towp = get_post_meta($id, '_cf7towp', true);
            $cf7towp = wp_parse_args(
                $cf7towp,
                array(
                    'active' => 0,
                    'title' => '',
                    'content' => '',
                    'category' => 0,
                )
            );?>
    
    		<p style="margin-bottom:1em; font-size:1.25em;">
    			<?php _e('Abilitando la casella sottostante ogni modulo inviato compilato verrà pubblicato come nuovo articolo "Pratiche" privato.', 'cf7_to_wp');?>
    		</p>
    
    		<div class="mail-field" style="margin-bottom:1em;">
    			<label for="cf7towp-active">
    				<input type="checkbox" id="cf7towp-active" name="wpcf7-cf7towp-active" value="1" <?php checked($cf7towp['active'], 1);?> />
    				<strong><?php echo esc_html(__('Salvare i moduli compilati come articoli "Pratiche"?', 'cf7_to_wp')); ?></strong>
    			</label>
    
    		</div>
    
    		<div class="pseudo-hr"></div>
    
    		<div class="mail-field">
    			<p class="description">
    				<label for="cf7towp-category"><?php echo esc_html(__('Categoria dell\'articolo', 'cf7_to_wp')); ?></label>
    				<select id="cf7towp-category" name="wpcf7-cf7towp-category">
    					<?php $this->get_category_options($id)?>
    				</select>
    			</p>
    		</div>
    
    		<div class="mail-field">
    			<p class="description">
    				<label for="cf7towp-title"><?php echo esc_html(__('Titolo dell\'articolo', 'cf7_to_wp')); ?></label>
    				<input type="text" id="cf7towp-title" name="wpcf7-cf7towp-title" class="large-text" value="<?php echo esc_attr($cf7towp['title']); ?>" />
    			</p>
    		</div>
    
    		<div class="mail-field">
    			<p class="description">
    				<label for="cf7towp-content"><?php echo esc_html(__('Contenuto dell\'articolo', 'cf7_to_wp')); ?></label>
    				<textarea id="cf7towp-content" name="wpcf7-cf7towp-content" cols="100" rows="10" class="large-text"><?php echo esc_attr($cf7towp['content']); ?></textarea>
    			</p>
    		</div>
    
    		<hr>
    
    		<p class="description" style="margin-top:.5em;">
    			<span style="float:left; width:60%;">
    				<?php _e('Usa i classici CF7 [mail-tag] per i contenuti dinamici nel titolo e nel contenuto (li trovi sulla tab Mail).', 'cf7_to_wp');?>
    			</span>
    			<span style="text-align:right; float:right; width:40%;">
    				<?php
    $credits_link = '<a target="_blank" href="https://github.com/psaikali/contact-form-to-wp-posts">Fonte</a>';
            printf(__('A Contact Form 7 addon by %1$s', 'cf7_to_wp'), $credits_link);
            ?>
    			</span>
    		</p>
    
    		<hr>
    	<?php }
    
        /**
         * Get category field data
         */
    
        public function get_category_options($id)
        {
    
            $cf7towp = get_post_meta($id, '_cf7towp', true);
            $cf7towp = wp_parse_args(
                $cf7towp,
                array(
                    'active' => 0,
                    'title' => '',
                    'content' => '',
                    'category' => 0,
                )
            );
    
            $args = array(
                'taxonomy' => 'category',
                'hide_empty' => false,
            );
    
            $terms = get_terms($args);
    
            foreach ($terms as $term) {
                $options .= '<option value="' . $term->term_id . '" ' . selected($cf7towp['category'], $term->term_id, true) . '>' . $term->name . '</option>';
            }
    
            echo $options;
    
        }
    
        /**
         * Save metabox/tab data when CF7 form settings page is saved.
         *
         * @param WPCF7_ContactForm $contact_form
         */
        public function save_cf7_data($contact_form)
        {
            global $user_id;
            $user_id = get_current_user_id();
            $id = $contact_form->id();
            $cf7towp = array();
            $cf7towp['active'] = (!empty($_POST['wpcf7-cf7towp-active']));
    
            if (isset($_POST['wpcf7-cf7towp-title'])) {
                $cf7towp['title'] = sanitize_text_field($_POST['wpcf7-cf7towp-title']);
            }
    
            if (isset($_POST['wpcf7-cf7towp-content'])) {
                $cf7towp['content'] = wp_kses_post($_POST['wpcf7-cf7towp-content']);
            }
    
            if (isset($_POST['wpcf7-cf7towp-category'])) {
                $cf7towp['category'] = wp_kses_post($_POST['wpcf7-cf7towp-category']);
            }
    
            update_post_meta($id, '_cf7towp', $cf7towp);
        }
    
        /**
         * Create a Messages post when form is submitted
         *
         * @param WPCF7_ContactForm $contact_form
         */
    
        public function get_current_user_id()
        {
            if (class_exists('Jwt_Auth_Public')) {
                $jwt = new \Jwt_Auth_Public('jwt-auth', '1.1.0');
                $token = $jwt->validate_token(false);
                if (\is_wp_error($token)) {
                    return false;
                }
    
                return $token->data->user->id;
            } else {
                return false;
            }
        }
    
        public function create_post_on_form_submission($contact_form)
        {
    
            $form_post = $contact_form->id();
            $cf7towp_data = get_post_meta($form_post, '_cf7towp', true);
    
            if ($cf7towp_data['active'] === true) {
                $submission = WPCF7_Submission::get_instance();
    
                if ($submission) {
                    $meta = array();
                    $meta['ip'] = $submission->get_meta('remote_ip');
                    $meta['ua'] = $submission->get_meta('user_agent');
                    $meta['url'] = $submission->get_meta('url');
                    $meta['date'] = date_i18n(get_option('date_format'), $submission->get_meta('timestamp'));
                    $meta['time'] = date_i18n(get_option('time_format'), $submission->get_meta('timestamp'));
                }
    
                $post_title_template = $cf7towp_data['title'];
                $post_content_template = $cf7towp_data['content'];
                $post_category[] = $cf7towp_data['category'];
    
                $post_title = wpcf7_mail_replace_tags(
                    $post_title_template,
                    array(
                        'html' => true,
                        'exclude_blank' => true,
                        'has_archive' => true,
                    )
                );
    
                $post_content = wpcf7_mail_replace_tags(
                    $post_content_template,
                    array(
                        'html' => true,
                        'exclude_blank' => true,
                        'has_archive' => true,
                    )
                );
    
                $new_form_msg = wp_insert_post(
    
                    array(
                        'post_type' => $this->post_type,
                        'post_title' => $post_title,
                        'post_content' => $post_content,
                        'post_author' => $current_user -> ID,
                        'post_status' => 'private',
                        'has_archive' => true,
                        'post_category' => $post_category,
                    )
                );
    
                if ($submission) {
                    update_post_meta($new_form_msg, 'cf7towp_meta', $meta, );
                }
            }
        }
    
        /**
         * Main cf7_to_wp singleton instance
         *
         * Ensures only one instance of cf7_to_wp is loaded or can be loaded.
         *
         * @static
         * @see cf7_to_wp()
         * @return Main cf7_to_wp instance
         */
        public static function instance($file = '', $version = '0.1')
        {
            if (is_null(self::$_instance)) {
                self::$_instance = new self($file, $version);
            }
            return self::$_instance;
        }
    
        /**
         * Cloning is forbidden.
         *
         */
        public function __clone()
        {
            _doing_it_wrong(__FUNCTION__, __('Cheatin’ huh?'), $this->_version);
        }
    
        /**
         * Unserializing instances of this class is forbidden.
         *
         */
        public function __wakeup()
        {
            _doing_it_wrong(__FUNCTION__, __('Cheatin’ huh?'), $this->_version);
        }
    }
Stai visualizzando 3 risposte - dal 1 al 3 (di 3 totali)
  • Moderatore Cristiano Zanca

    (@cristianozanca)

    Salve ,

    leggendo dal messaggio di errore:

    add_author_support_to_posts” not found or invalid function name

    nel codice condiviso sembrerebbe essere assente la definizione della funzione:

    add_author_support_to_posts

    il consiglio è di aggiungerla o di rimuovere la chiamata collegata:

    add_action('init', 'add_author_support_to_posts');

    Cordiali Saluti

    Chi ha creato la discussione enricotv

    (@enricotv)

    Grazie Cristiano per la risposta.
    Mi chiedo però come mai prima avesse sempre funzionato allora, qualche idea?
    Questa definizione delle funziona di seguito è corretta?

    function add_author_support_to_posts() {
       add_post_type_support( 'cf7_form_messages', 'author' ); 
    }

    Un saluto,

    Enrico

    • Questa risposta è stata modificata 1 mese fa da enricotv.
    Chi ha creato la discussione enricotv

    (@enricotv)

    Ho aggiunto la funzione sopra e adesso il sito non va in modalità debug ma nella parte superiore della pagina dei plugin del sito appena provo ad attivarlo esce la scritta con la barra verticale rossa davanti:

    Il plugin non può essere attivato perchè genera un errore fatale.

    Continuo a non capire dove possa essere l’errore. Ovviamente se tolgo la funzione e la chiamata il plugin funziona, ma non è come dovrebbe essere.

    • Questa risposta è stata modificata 1 mese fa da enricotv.
    • Questa risposta è stata modificata 1 mese fa da enricotv.
Stai visualizzando 3 risposte - dal 1 al 3 (di 3 totali)
  • Devi essere collegato per rispondere a questo topic.