我正在编写一个Wordpress插件,它在管理区域中创建一个页面,以及执行一些前端代码.
下面的代码抛出了一个很好的Fatal error: Using $this when not in object context错误.这是相当神秘的,因为变量在类中被调用.
也许我没有遵循功能和类的预期Wordpress插件结构,但下面的概念代码是使用Wordpress Codex中插件开发的相关条目创建的.
有人可以解释为什么会触发错误,因为当我在Wordpress代码库之外创建一个类的实例时,一切都很好.
if (!class_exists("MyClass")) {
class MyClass {
var $test = 'Test variable';
public function index() {
//Index code
}
public function add() {
echo $this->test;
}
}
}
add_action('admin_menu', 'my_plugin_menu');
function my_plugin_menu() {
add_menu_page('My Plugin', 'My Plugin', 'manage_options', 'my-plugin', array('MyClass', 'index'));
add_submenu_page('my-plugin', 'Add New Thing', 'Add New', 'manage_options', 'my-plugin-add', array('MyClass', 'add'));
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应该支持多种语言的CakePHP插件.此处记录了i18n本地化的过程,但未明确涵盖插件.下面这个结构应该有效吗?因为目前不适合我,但我可能会忽视某些事情.
/myapp/
/plugins/
/myplugin/
/locale/
default.pot
/nld/
/LC_MESSAGES/
default.mo
default.po
Run Code Online (Sandbox Code Playgroud)
并在插件控制器中调用翻译,如下所示:
Configure::write('Config.language', 'nld');
Run Code Online (Sandbox Code Playgroud)
在我的插件视图中,本地化函数的格式如下:
__('MyPluginName', 'MyDefaultString')
Run Code Online (Sandbox Code Playgroud)
一些介绍CakePHP的职位和插件的本地化提到,所有区域应该进去/myapp/locale/,而不是插件目录,但不会违抗模块化插件结构的目的是什么?我读过的条目来自2008年(例如这个),所以我希望情况不再如此.
任何人都可以向我提供一些关于本地化Cake插件的更多细节,甚至可能是一步一步的教程吗?
我有一个自定义分类法,我用它来串联帖子(系列是该分类中的一个术语).我想要的是在执行WordPress循环时将这些捆绑的帖子视为特殊情况.
只应显示系列中的第一篇文章(具有最近日期的帖子),并且应将所有其他不属于自定义分类中的术语的帖子视为普通帖子.除了自定义系列分类法之外,还可以对帖子进行标记或分类(因此最多包含三个分类法,包括自定义分类法).循环应包含固定数量的帖子(例如,WordPress后端中设置的首页上的帖子数量).
我对如何对这些帖子进行分组感到茫然,部分原因是因为所有数据都在不同的表中,并且因为每个条目都属于多个分类.当然循环遍历posts数组,在MySQL调用之后丢弃系列中的旧帖子是可能的,但在这种情况下,如果不对数据库进行额外查询,则很难维护固定数量的帖子.
所以我想实现一个纯SQL解决方案.我一直在尝试使用posts_clauses钩子.我相信下面的这个查询会返回一个系列中ID最高但不是日期的帖子,而且对数据库很重要.
$clauses['fields'] .= ", $wpdb->posts.ID AS postID, (SELECT $wpdb->terms.term_id
FROM $wpdb->posts, $wpdb->term_taxonomy, $wpdb->term_relationships, $wpdb->terms
WHERE $wpdb->posts.ID=postID
AND $wpdb->term_taxonomy.taxonomy='post-series'
AND $wpdb->term_relationships.term_taxonomy_id=$wpdb->term_taxonomy.term_taxonomy_id
AND $wpdb->posts.ID=$wpdb->term_relationships.object_id
AND $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id
ORDER BY $wpdb->posts.post_date DESC
LIMIT 0,1) AS uniqueID";
$clauses['groupby'] = "IFNULL(uniqueID,$wpdb->posts.ID)";
Run Code Online (Sandbox Code Playgroud)
基于上面的子句,WordPress构造了以下SQL查询:
SELECT SQL_CALC_FOUND_ROWS wp_posts.*, wp_posts.ID AS postID,
(SELECT wp_terms.term_id FROM wp_posts, wp_term_taxonomy, wp_term_relationships, wp_terms
WHERE wp_posts.ID=postID
AND wp_term_taxonomy.taxonomy='post-bundles'
AND wp_term_relationships.term_taxonomy_id=wp_term_taxonomy.term_taxonomy_id
AND wp_posts.ID=wp_term_relationships.object_id
AND wp_terms.term_id=wp_term_taxonomy.term_id
ORDER BY wp_posts.post_date DESC LIMIT 0,1)
AS uniqueID FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post' …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Cake插件中包含的一个JavaScripts,我遇到了问题.由于某种原因,JavaScript文件被解析为PHP文件,因此加载文件会引发此错误,这是一个PHP解析错误:
<b>Parse error</b>: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
Run Code Online (Sandbox Code Playgroud)
使用HtmlHelper调用脚本:
<?php echo $this->Html->script(array(
'/myplugin/scripts/tiny_mce/tiny_mce',
)); ?>
Run Code Online (Sandbox Code Playgroud)
该错误由tiny_mce.js驻留在脚本目录的子目录中的压缩文件触发,未压缩版本显示相同的行为.问题是我在本地设置上没有遇到问题.
远程服务器运行PHP 5.2.17并mod_rewrite启用,我的Cake版本是1.3.10 - 我的测试设置运行PHP 5.3.4和相同版本的Cake.它可能是重写或权限错误,但我的应用程序运行正常,其他脚本(包括子目录和远程的脚本)加载没有问题.
编辑: 将tiny_mce目录移出Cake安装并链接到它后,JavaScript被正确解析.我猜这是一个与mod_rewrite和插件处理有关的错误,但我没有找到与此行为相关的其他情况.
我知道printfPHP中的语句可以格式化字符串,如下所示:
//my variable
$car = "BMW X6";
printf("I drive a %s",$car); // prints I drive a BMW X6,
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用打印数组时printf,似乎没有办法对其进行格式化.有人可以帮忙吗?
php ×4
cakephp ×2
wordpress ×2
arrays ×1
cakephp-1.3 ×1
class ×1
javascript ×1
localization ×1
mysql ×1
parsing ×1
plugins ×1