Php Can';不要让WordPress钩子在嵌入式类中触发
我正在尝试用一些面向对象的方法构建一些很好的metabox功能 我有一个主要的DazSEO类,其中包含一个Metabox类 当我在metabox类中设置WordPress save data连接时,它们不会启动,但当我从根类中设置它们时,它们会启动 在嵌入式类中使用钩子是否与WordPress钩子系统不兼容 如果有任何帮助,我将不胜感激,因为我花了很多时间试图弄清楚这里的问题是什么,我想这是wp引擎的一些对象范围问题,但我不相信。 Dazzo类{ 公共静态$plugins=array() 但这样的设计很凌乱 这个插件是这样初始化的Php Can';不要让WordPress钩子在嵌入式类中触发,php,wordpress,Php,Wordpress,我正在尝试用一些面向对象的方法构建一些很好的metabox功能 我有一个主要的DazSEO类,其中包含一个Metabox类 当我在metabox类中设置WordPress save data连接时,它们不会启动,但当我从根类中设置它们时,它们会启动 在嵌入式类中使用钩子是否与WordPress钩子系统不兼容 如果有任何帮助,我将不胜感激,因为我花了很多时间试图弄清楚这里的问题是什么,我想这是wp引擎的一些对象范围问题,但我不相信。 Dazzo类{ 公共静态$plugins=array() 但这样
<form name="edittag" id="edittag" method="post" action="edit-tags.php" ...>
如果
$pagenow
是一个,那么这些可能会回答以下问题:(下面提到的PHP文件保存在wp admin
中)
term.php
(即分类术语编辑)页面时,$\u-GET['taxonomy']
和$\u-GET['tag\u-ID']
默认设置/可用(WordPress要求您确定要编辑的术语)。因此isset($\u-GET['taxonomy'])
的计算结果为true
TermMetabox
类构造函数中,您正在将TermMetabox::onTermSave()
挂接到edit_terms
操作,该操作(默认情况下)不会在term.php
页面上触发term.php
上的分类法编辑表单来自edittagform.php
,其中开头的
标签如下所示:
<input type="hidden" name="action" value="editedtag"/> <- the action
<input type="hidden" name="tag_ID" ...>
<input type="hidden" name="taxonomy" ...>
如您所见,表单将使用POST
方法提交到edit tags.php
,操作为editedtag
edit tags.php
上,如果操作是editedtag
,将被调用,并且您最终将返回到term.php
。如果您还不知道,wp\u update\u term()
操作$pagenow
是否为edit tags.php
,并且我使用$\u POST
而不是$\u GET
:
public function adminInit() {
add_action( 'load-edit-tags.php', array( $this, 'setupMetaBox' ) );
}
或者,您可以使用load edit tags.php
操作来代替$pagenow====“edit tags.php”
检查,如下所示:
:dazzeo::adminInit()
:dazzeo::setupMetaBox()
setupMetaBox()中
,$pagenow
是什么,以及$pagenow==='term.php'
可能从未计算为true
,因此您的TermMetabox
类没有被实例化。感谢您的想法。是的,该语句确实计算为true,我在那里有一些调试代码,我删除了这些代码以保持示例稳定谢谢,我甚至没有考虑过表单提交的中间步骤。我的Meta Objax类设计在我实例化WordPress API以使它工作的时候不起作用。所以我制作了一个SaveDATA类,并将数据保存与之分离。现在我可以继续工作了。这真是太棒了,我很高兴C。我会帮你的。:)顺便说一句,当我说“term.php上的分类法编辑表单”时,我实际上是指“term.php上的分类法术语编辑表单”。很抱歉。谢谢,据我所知,分类法就像术语“分组”的类别它们作为普通的wp类别对帖子进行分组,但WordPress核心中有两个单独的API。是的,您对分组的看法是正确的,在分类法中(例如,标准/内置的帖子类别和标记),您可以有一对多的组,WordPress将其称为“术语”。然而,尽管帖子类别和标签具有特殊/内置的包装函数,但这些函数实际上使用相同的API,例如get_category()
和get_tag()
,它们都使用get_term()
-您可以在wp includes/taxonomy.php
中找到此函数和其他分类法/术语函数。如果需要有关分类法的更多信息,请参阅。:)
<form name="edittag" id="edittag" method="post" action="edit-tags.php" ...>
<input type="hidden" name="action" value="editedtag"/> <- the action
<input type="hidden" name="tag_ID" ...>
<input type="hidden" name="taxonomy" ...>
public function setupMetaBox() {
// global $pagenow; // I used this when testing.
if( $pagenow === 'edit-tags.php' ) {
if( isset($_POST['taxonomy']) ) {
...
require_once('admin\metabox\TermMetaBox.php');
$this->metaBox = new TermMetabox( $_POST['taxonomy'] );
...
}
}
}
public function adminInit() {
add_action( 'load-edit-tags.php', array( $this, 'setupMetaBox' ) );
}
public function setupMetaBox() {
if( isset($_POST['taxonomy']) ) {
...
require_once('admin\metabox\TermMetaBox.php');
$this->metaBox = new TermMetabox( $_POST['taxonomy'] );
...
}
}