初始化失败时的基本函数调用

时间:2014-02-17 作者:Nathan Arthur

一段时间以来,我一直在为这件事头痛。我的插件中有一段非常直接的代码:

add_action(\'init\', \'register_shortcodes\');

$shortcodeRegistrationRan = False;

function register_shortcodes() {
    global $shortcodeRegistrationRan;
    $shortcodeRegistrationRan = True;
    echo "Ran = True";

    add_shortcode( \'accountability\', array($hfMain, \'processAccountabilityShortcode\') );
}
问题是$shortcodeRegistrationRan 从不设置为True, “Ran=True”也不会出现在页面的任何位置。我错过了什么?

我正在使用SimpleTest for Wordpress 检查我的跑步标志的状态。我还有很多其他通过的测试,所以测试套件运行良好。我的测试通过以下方式进行检查:

public function testShortcodeRegistrationRan() {
    global $shortcodeRegistrationRan;
    $this->assertEqual($shortcodeRegistrationRan, True);
}
在测试套件开始时:

require_once(dirname(__FILE__) . \'/../[PLUGIN NAME].php\');
EDIT: 根据@s\\u ha\\u dum的建议,我使用shortcode_exists 功能:

public function testShortcodeRegistration() {
    $this->assertEqual(shortcode_exists(\'accountability\'), True);
}
不幸的是,它也没有通过。

EDIT: 以下是完整的上下文:

<?php
/*
Plugin Name: Nathan\'s Awesome Widget
Plugin URI: http://NathanArthur.com/
Description: This plugin does awesome things
Author: Nathan Arthur
Version: 1.0
Author URI: http://NathanArthur.com/
*/

/*global $wp_version;

if ( !version_compare($wp_version,"3.0",">=") ) {
    die("You need at least version 3.0 of Wordpress to use the copyright plugin");
}*/

function my_plugin_activate() {
    error_log("my plugin activated");
}

register_activation_hook(__FILE__,"my_plugin_activate");



if (!class_exists("HfAccountability")) {
    class HfAccountability {
        private $currentUser;
        function HfAccountability() { //constructor
            $this->currentUser = wp_get_current_user();
        }
        function getCurrentUserLogin() {
            return $this->currentUser->user_login;
        }
        function processAccountabilityShortcode( $atts ) {
            #$to = \'[MY EMAIL ADDRESS]\';
            #$subject = \'Testing Mandrill integration\';
            #$message = "Yup, that\'s all we\'re doing";
            #wp_mail( $to, $subject, $message, $headers, $attachments );
            return \'We tried.\';
        }
    }
}

if (class_exists("HfAccountability")) {
    $hfMain = new HfAccountability();
}

//Actions and Filters
/* if (isset($hfMain)) {
    //Actions
    add_action(\'init\', \'register_shortcodes\'); //PROBLEMATIC LINE

    //Filters

    $actionsRan = True;
} */

add_action(\'init\', \'register_shortcodes\');

$shortcodeRegistrationRan = False;

function register_shortcodes() {
    global $shortcodeRegistrationRan;
    $shortcodeRegistrationRan = True;
    echo "Ran = True";

    add_shortcode( \'accountability\', array($hfMain, \'processAccountabilityShortcode\') );
}

2 个回复
最合适的回答,由SO网友:Nathan Arthur 整理而成

我觉得自己很不聪明。我的问题有两个方面:

首先,我的插件不知怎么被停用了add_shortcode 函数类的名称,而不是该类的实例。如果有人能解释为什么会这样,那就太好了。This page 表示任何一种方式都可以

SO网友:s_ha_dum

我想说的是,你所做的事情过于复杂,至少在我理解你的范围内。

您可以确定是否已使用核心函数注册了您的短代码shortcode_exists, 返回一个boolean. 据我所知,使用它应该可以提供与上述代码完全等效的功能。

结束

相关推荐

通过php将属性设置为woo商务中的变量

我正在创建一个前端表单,允许用户使用预定义的属性和变体从前端向我的店铺发布可变产品。我发现了一个非常有用的问题:here 它向我展示了如何将产品类型设置为变量,并在产品数据的属性部分指定预定义的属性。然而,当我在Wordpress/Woocommerce的后端编辑产品时,我单击变体,但没有设置任何变体,我查看属性,我的“分辨率”属性是用我的3个项目设置的。如何将这些属性设置为我的表单的变体?我是否需要使用wp\\U insert\\U post?在phpmyadmin中,看起来产品变体被分配给了一个pa