小编men*_*sch的帖子

为什么在Wordpress插件的类中使用$ this会导致致命错误?

我正在编写一个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)

php wordpress class wordpress-plugin

8
推荐指数
2
解决办法
9942
查看次数

如何本地化CakePHP插件?

我正在开发一个应该支持多种语言的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插件的更多细节,甚至可能是一步一步的教程吗?

localization cakephp internationalization cakephp-1.3

5
推荐指数
1
解决办法
2260
查看次数

按WordPress循环中的自定义分类法显示日期的最后一个帖子

我有一个自定义分类法,我用它来串联帖子(系列是该分类中的一个术语).我想要的是在执行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)

php mysql wordpress

5
推荐指数
1
解决办法
987
查看次数

为什么在我的Cake插件中将JavaScript文件解析为PHP?

我正在开发一个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和插件处理有关的错误,但我没有找到与此行为相关的其他情况.

javascript php plugins parsing cakephp

3
推荐指数
1
解决办法
1259
查看次数

如何在php中使用printf格式化数组

我知道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 arrays string-formatting

2
推荐指数
2
解决办法
1万
查看次数