在另一种自定义帖子类型中使用来自一种自定义帖子类型的高级自定义字段/使用嵌套的快捷代码

时间:2018-08-01 作者:charelf

我有两种自定义帖子类型,projectperson. 两者都有几个自定义字段。我正在为project 自定义帖子类型。

project 自定义字段我有几个类型为relation的字段,如此屏幕截图所示。不幸的是,我并不真正理解它们的含义以及如何使用它们,但这不是我的主要问题。enter image description here

接下来,在person 自定义字段,我只有文本字段,如first_name, last_name, 等

现在让我们假设我有一个自定义的post类型person. 该人员已为项目作出贡献,该项目是类型为的自定义职位类型project.

现在,在使用project 贴子,包括类型为的自定义字段的[acf字段]快捷码person?

下面是我想做的截图/概念:红色圆圈是从project 自定义字段,而蓝色圆圈是从person 自定义字段。enter image description here

备注:

我是wordpress的新手,对php一无所知

理想情况下,我的问题的解决方案不需要我向php文件中添加代码,因为我的客户并不希望这样做。最好在WPBakery模板编辑器中进行。

已安装和可用的插件包括ACF、WPBakery、toolset、Essential、ACF vc、自定义帖子类型UI。谢谢您的帮助,我希望我能以一种可以理解的方式成功地表达我的问题。

更新我找到了这个插件,它似乎提供了一个解决方案:嵌套的短代码:https://wordpress.org/plugins/nested-shortcodes/

不幸的是,这也带来了一些限制,使我无法找到解决方案。我想做的是:

输入:[acf field="first_name" post_id=[acf field="student"]]

预期输出为:John Doe

不幸的是,我得到的结果是:]

他们认为这部分是由于此处列出的短代码限制https://codex.wordpress.org/Shortcode_API#Limitations

另一方面,这种硬编码的变通方法可以:

输入:[acf field="student"] 输出:89

输入:[acf field="first_name" post_id=89] 输出:John Doe

不幸的是,此解决方案具有硬编码的唯一ID 89,因此无法将其用作模板以供将来使用。

有没有人有一个解决方案或更好的变通方法,不需要我硬编码?我也愿意接受全新的想法和方向,只要它能帮助我解决这个问题

2 个回复
最合适的回答,由SO网友:be.fresh 整理而成

我认为,在ACF设置中使用关系模型时,必须遍历页面上的元素。因此,您可以简单地使用ACF文档中的代码,并将其添加到您的单曲中。php或页面。php。https://www.advancedcustomfields.com/resources/relationship/

如果仍要使用短代码,可以创建自己的短代码,包括上面链接中的示例代码。

希望这有帮助!

SO网友:charelf

这是我在be的帮助下找到的一个解决方案。新鲜的在函数中添加此行代码。php文件创建一个短代码[person],它提供正确的输出。

function person_func() {
    $postID = do_shortcode("[acf field=\'student\']");
    $postField = get_field("first_name", $postID);
    return $postField;
}
add_shortcode( \'person\', \'person_func\' );
为什么它会起作用?我发现here ACF在其get\\u field()函数中也接受post ID,所以我可以用硬编码的89作为post ID来避免我的问题。

当然,这个函数可以通过创建一个可以获取属性的短代码来变得更有用,如下所示here.

结束

相关推荐

Shortcode with foreach

我不能对foreach使用shortcode。它给了我语法错误。我错在哪里?function create_galeri_shortcode($atts) { $atts = shortcode_atts( array( ), $atts, \'galeri\' ); if ( has_post_format( \'gallery\' )) { $images = get_post_

在另一种自定义帖子类型中使用来自一种自定义帖子类型的高级自定义字段/使用嵌套的快捷代码 - 小码农CODE - 行之有效找到问题解决它

在另一种自定义帖子类型中使用来自一种自定义帖子类型的高级自定义字段/使用嵌套的快捷代码

时间:2018-08-01 作者:charelf

我有两种自定义帖子类型,projectperson. 两者都有几个自定义字段。我正在为project 自定义帖子类型。

project 自定义字段我有几个类型为relation的字段,如此屏幕截图所示。不幸的是,我并不真正理解它们的含义以及如何使用它们,但这不是我的主要问题。enter image description here

接下来,在person 自定义字段,我只有文本字段,如first_name, last_name, 等

现在让我们假设我有一个自定义的post类型person. 该人员已为项目作出贡献,该项目是类型为的自定义职位类型project.

现在,在使用project 贴子,包括类型为的自定义字段的[acf字段]快捷码person?

下面是我想做的截图/概念:红色圆圈是从project 自定义字段,而蓝色圆圈是从person 自定义字段。enter image description here

备注:

我是wordpress的新手,对php一无所知

理想情况下,我的问题的解决方案不需要我向php文件中添加代码,因为我的客户并不希望这样做。最好在WPBakery模板编辑器中进行。

已安装和可用的插件包括ACF、WPBakery、toolset、Essential、ACF vc、自定义帖子类型UI。谢谢您的帮助,我希望我能以一种可以理解的方式成功地表达我的问题。

更新我找到了这个插件,它似乎提供了一个解决方案:嵌套的短代码:https://wordpress.org/plugins/nested-shortcodes/

不幸的是,这也带来了一些限制,使我无法找到解决方案。我想做的是:

输入:[acf field="first_name" post_id=[acf field="student"]]

预期输出为:John Doe

不幸的是,我得到的结果是:]

他们认为这部分是由于此处列出的短代码限制https://codex.wordpress.org/Shortcode_API#Limitations

另一方面,这种硬编码的变通方法可以:

输入:[acf field="student"] 输出:89

输入:[acf field="first_name" post_id=89] 输出:John Doe

不幸的是,此解决方案具有硬编码的唯一ID 89,因此无法将其用作模板以供将来使用。

有没有人有一个解决方案或更好的变通方法,不需要我硬编码?我也愿意接受全新的想法和方向,只要它能帮助我解决这个问题

2 个回复
最合适的回答,由SO网友:be.fresh 整理而成

我认为,在ACF设置中使用关系模型时,必须遍历页面上的元素。因此,您可以简单地使用ACF文档中的代码,并将其添加到您的单曲中。php或页面。php。https://www.advancedcustomfields.com/resources/relationship/

如果仍要使用短代码,可以创建自己的短代码,包括上面链接中的示例代码。

希望这有帮助!

SO网友:charelf

这是我在be的帮助下找到的一个解决方案。新鲜的在函数中添加此行代码。php文件创建一个短代码[person],它提供正确的输出。

function person_func() {
    $postID = do_shortcode("[acf field=\'student\']");
    $postField = get_field("first_name", $postID);
    return $postField;
}
add_shortcode( \'person\', \'person_func\' );
为什么它会起作用?我发现here ACF在其get\\u field()函数中也接受post ID,所以我可以用硬编码的89作为post ID来避免我的问题。

当然,这个函数可以通过创建一个可以获取属性的短代码来变得更有用,如下所示here.

相关推荐

redirect if shortcode exists

WordPress初学者。我试图检查用户请求的页面中是否存在短代码,如果存在,则在用户未登录时重定向。function redirect_to_home() { if (has_shortcode(get_the_content(), \'shortcode\')) { if(!is_admin() && !is_user_logged_in()) { //redirect exit(); }