问题和答案进行了修订
有时候,这些问题会困扰您,并在以后的生活中再次追捕您,这就是一个这样的问题。
这个问题让我考虑了该问题的替代解决方案。就像我已经说过的那样,自定义字段和元框用于存储少量的元数据,而不是充当发布内容的扩展,您可以在其中执行简码和功能。另外,正如我已经说过的,您的方法不正确,不应使用
我在您的文章中发现有趣的是,您使用自定义字段和元框无意中显示了来自用户输入的自定义内容。所以我坐下来,想出一种可行的方法来完成这项工作,并正确使用自定义字段数据和元框数据
这是我的主意:
场景:
注意:可以对其进行修改以适合任何需要
在单个帖子上,用户希望/要求在帖子之后动态显示自定义内容以适应其需求。这应该是动态的。内容应为自定义查询,用户需要选择要显示的内容以及所需的内容
可能的解决方案:
简码在这里不起作用,因为简码不能在自定义字段中执行。两者都do_shortcode
不起作用,因为它不是动态的并且是硬编码的,这是我们不想要的。就像您的问题一样,我们将使用自定义字段。再次强调,请勿使用自定义字段执行自定义查询或简码
计划:
我们将使用定制字段仅保存查询参数,仅此而已。因此,我们要做的是创建一个名为的自定义字段custom_query_arguments
。在您的帖子编辑器屏幕中,您现在将看到可以使用的自定义字段
下一步将是将自定义查询参数添加到字段中。可以说,我们需要显示类别1中的3个帖子(按标题排序)。因此,我们的查询参数应如下所示:(以字符串格式)
'posts_per_page=3&cat=1&orderby=title'
这就是您现在应该在自定义字段中输入的内容。输入后,保存您的自定义字段的值
接下来将在您的single.php中构造自定义查询。这里需要的是,我们需要从自定义字段中获取值,该值实际上是我们的查询参数,并将其提供给的新实例WP_Query
以检索帖子。我们还需要检查我们是否在该自定义字段中保存了一个值,如果自定义字段为空,则不显示任何内容
代码:
您可以在单篇文章发布后在single.php中尝试类似的操作。
$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {
$q = new WP_Query( $args );
if( $q->have_posts() ) {
while( $q->have_posts() ) {
$q->the_post();
the_title();
}
wp_reset_postdata();
}
}
如果用户要删除自定义查询,则只需删除自定义字段的值并将自定义字段留空即可。如果他需要显示相同的查询,但来自类别10和总共5个帖子,则可以将原始值替换为以下内容:
'posts_per_page=5&cat=10&orderby=title'
注意事项:
在此自定义字段和元框中输入信息时,请使用正确的语法和格式,这一点很重要。语法错误或不正确的信息将导致不希望的输出甚至致命错误。让您的客户了解此类信息非常重要
原始答案
我不了解您要完成的工作,但是据我所知,这是两件事
选项1
apply_filters('the_content', $content);
用于将内容过滤器应用于未过滤的原始帖子内容,通常来自的使用$post->post_content
。这些过滤器包括著名的过滤器wp_autop
,它将p标签添加到the_content()
apply_filters('the_content', $content);
通常用于与不使用而get_posts
直接使用WP_Post
对象的情况结合使用setup_postdata( $post )
,从而使模板标签the_content()
可用
选项2
do_shortcode
用于在页面编辑器屏幕后端的文本编辑器外部的模板文件中的任何位置添加简码,基本上是通过其钩子过滤简码。
正确用法如下
示例:在模板文件中添加画廊简码
echo do_shortcode( '[gallery]' )
编辑1
根据您的评论,我将不再使用简码。
如果您不打算通过文本编辑器添加简码,而是要通过do_shortcode
模板文件直接添加(硬编码),我宁愿将函数添加到模板中
例:
如果您具有以下简码功能
function footag_func( $atts ) {
return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );
您可以直接在模板中直接调用该函数,例如
echo footag_func();
这种方式速度更快,因为不需要解析短代码
编辑2
老实说,您所做的编辑完全是错误的。这就是为什么我不明白你最初的问题
有时,我需要在帖子/页面/自定义帖子类型上添加帖子元,以便他们可以添加短代码(滑块,联系表格等)或仅添加简单文本。这是一个文本字段。
为了使短代码有效,我使用选项1 .....
自定义字段是不是文本字段,并且肯定不是要用来执行的简并为此事滑块或接触形式。自定义字段绝不能用于替换帖子和页面中的文本编辑器。
如前所述,apply_filters('the_content', $content);
它用于将格式应用于原始帖子内容。
你有两个选择
我强烈建议您对您的结构和要达到的目标进行全新的了解。自定义字段不是文本编辑器,不能执行短代码或滑块。
我的建议是研究自定义小部件或可以与自定义字段一起使用的系统