我想创建一个短代码,在文档中搜索某个元素,该元素的DOM位置与短代码有明确的关系。
例:
<div>
<div class="target" data-target="SomeValue">SomeValue<div>
<div>more html here</div>
<div>[gettarget]</div>
</div>
<div>
<div class="target" data-target="SomeOtherValue">SomeOtherValue<div>
<div>more html here</div>
<div>[gettarget]</div>
</div>
函数gettarget
如何访问其类target
的兄弟div(将会有一个)并获取其内容(或其data-target
属性,无关紧要)。所以最后我想要
gettarget
第一次打电话给SomeValue
和gettarget
第二次打电话给SomeOtherValue
。我能得到的最远的是:
$doc = new DOMDocument();
echo $_SERVER['SCRIPT_NAME'];
$doc->loadHTMLFile($_SERVER['SCRIPT_NAME']);
$xpath = new DOMXpath($doc);
var_dump($xpath);
产量:
/wp-admin/admin-ajax.phpobject(DOMXPath)#11113 (1) { ["document"]=> string(22) "(object value omitted)" }
那不是我的文件: - /
正如我在评论中所说
- 函数gettarget如何访问其类目标的sibling-div? - 它无法在wordpress中调用[您的短代码]时页面尚未完成。更多只有开放和关闭的短代码
[start]content[/start]
中的内容被传递给短代码,没有外部内容是可访问的(不使用javascript)您可以使用像
add_filter( 'the_content', 'filter_function_name' )
这样的过滤器,一个正则表达式/\[gettarget\]/
,以及一些不是短代码[gettarget]
的东西,因为如果它们不是实际的短代码,WP会将它们留在中。然后,当您拥有完整的内容时,您可以在DOM中访问您想要的内容。等等
它看起来像任何一个好的答案,所以......
像这样的东西:
add_filter( 'the_content', 'filter_function_name' );
function filter_function_name($content){
//if no [gettarget] bail
if(false === strpos($content,'[gettarget]')) return $content;
$doc = DOMDocument::loadHTML($content);
$xpath = new DOMXpath($doc);
var_dump($xpath);
//for example remove [gettarget] our not shortcode, shortcode
$content = preg_replace('/\[gettarget\]/', '', $content);
return $content;
}
我曾经只使用过一次Dom Document,(然后我学会了PHPQuery,再也没有看过它)。但是这样你不会加载页面,我真的不确定你从wordpress内部从这个$doc->loadHTMLFile($_SERVER['SCRIPT_NAME'])
得到什么。也许只是一个模板文件或类似的?
我上面的方式,我知道content
是wordpress将在页面上推出的。更不用说我不知道你将如何从你的方式改变输出。这样您就可以修改内容并将其返回并进行更改。
- 注意 - 最后一件事,它已经过了一分钟但是如果我记得你有类似短代码[gettarget]
的东西,但你实际上没有它的短代码,它只是留在内容中。如果这是正确的,那么我上面所说的应该非常接近。我们可以利用这个优势,使它看起来像是WP管理区域内的短代码,并且在输出中(通过删除它)。
我想过用JavaScript做这件事,但唉,我懒得把它放进去......
无论如何希望它有所帮助。