什么是最佳做法,为什么?
选项1:
选项2:
$content = //my text area data;
echo apply_filters('the_content', $content);
请告诉我哪种是最佳实践,为什么。 br />
让我详细描述该方案。我根据客户的要求开发主题。有时,我需要在帖子/页面/自定义帖子类型上添加帖子元,以便他们可以添加短代码(滑块,联系表格等)或仅添加简单文本。这是一个文本文件。
为了使短代码正常工作,我使用了选项1。但是他们没有给我解释为什么这是错误的方式。这就是我要问的原因。
整个过程可以在wp的默认文本编辑器中完成。但是我需要为模板的特定用途创建这些选项,这是我的客户想要的。
#1 楼
再次提出问题和答案有时候,有些问题会困扰您,并在以后的生活中再次困扰您,而这就是一个这样的问题。就像我已经说过的那样,自定义字段和元框用于存储少量的元数据,而不是充当发布内容的扩展,您可以在其中执行简码和功能。另外,正如我已经说过的那样,您的方法不正确,不应使用。
我确实在您的帖子中发现有趣的是,您使用自定义字段和元框无意间显示了用户输入的自定义内容。因此,我想到了一种可行的方法来正确执行自定义字段数据和元框数据。
这是我的想法:
场景:
注意:这可以是修改以适合任何需求
在单个帖子上,用户希望/要求在帖子之后动态显示自定义内容以适合其需求。这应该是动态的。内容应该是自定义查询,用户需要选择他/她希望显示的内容以及他/她想要的内容。不会在自定义字段中执行。
do_shortcode
无效,因为它不是动态的并且是硬编码的,这是我们不想要的。就像您的问题一样,我们将使用自定义字段。再次强调,请勿使用自定义字段执行自定义查询或简码。计划:
我们将使用自定义字段仅保存查询参数;就这些。因此,我们创建了一个名为
custom_query_arguments
的自定义字段。在您的帖子编辑器屏幕上,您现在将看到可以使用的自定义字段。下一步是将我们的自定义查询参数添加到我们的字段中。假设我们需要显示类别1中的3个帖子(按标题排序)。因此,我们的查询参数应如下所示(字符串格式):
'posts_per_page=3&cat=1&orderby=title'
这就是您现在应该在自定义字段中输入的内容。输入后,保存自定义字段的值。
接下来将在single.php中构造自定义查询。我们需要从自定义字段中获取值,该值实际上是我们的查询参数,并将其提供给
WP_Query
的新实例以检索帖子。我们还需要检查是否确实在该自定义字段中保存了一个值,如果自定义字段为空,则不显示任何内容。代码:
您可以在单个文件中尝试类似的操作。 php,仅在单个帖子后。如果他/她需要显示相同的查询,但是来自类别10和总共5个帖子,则可以使用以下内容替换原始值:
$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();
}
}
几点注意事项:
在向这些自定义字段和元框输入信息时,使用正确的语法和格式很重要。语法错误或不正确的信息将导致不期望的输出甚至致命错误。重要的是要让您的客户知道这些信息。
原始答案
我不理解您要完成的工作,但是据我所知,这是两件分开的事情。 />选项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()
之类的模板标签。 > OPTION 2 do_shortcode
用于在页面编辑器屏幕后端的文本编辑器之外的模板文件中的任何位置添加简码,基本上是通过其钩子过滤简码。正确的用法如下。
如果您不打算通过文本编辑器添加简码,而是要通过
do_shortcode
直接在模板文件中添加(硬码)。我宁愿只是将函数添加到模板中。示例:
如果您具有以下简码函数,则可以在模板中直接调用该函数,例如:
'posts_per_page=5&cat=10&orderby=title'
这种方法要快得多,因为不需要解析短代码。
编辑2
老实说,您在编辑中完全犯了此错误。这就是为什么我无法理解您的最初问题
有时候,我需要在帖子/页面/自定义帖子类型上添加帖子元,以便他们可以添加简码(滑块,联系表格等)。或只是一个简单的文本。这是一个文本字段。
为了使短代码有效,我使用选项1 ....为此,滑块或联系表格。自定义字段绝不能用来替换帖子和页面中的文本编辑器。
我之前说过,
apply_filters('the_content', $content);
用于将格式应用于原始帖子内容。 /> 直接在模板文件中使用
do_shortcode
,我不建议使用此功能,因为不需要解析短代码,因此使用该功能会更快。直接在特定页面/帖子的文本编辑器中输入简码
我强烈建议您对结构和要实现的目标进行全新的了解。自定义字段不是文本编辑器,不能执行短代码或滑块。
我的建议是查看自定义窗口小部件或可以与自定义字段一起使用的系统。
评论
彼得感谢您的解释。我已经知道了但是我在问,如果目标仅是从后元/主题选项文本区域输出短代码,则哪个选项会更准确。我正在使用option1来获取过滤的内容,这成了我的习惯。甚至使用选项1只是从文本文件中打印一个简码。所以问。
–тнєSufi
2015年1月3日,12:06
我看到了编辑。我明白你的意思。但是我的情况不同。就像有一个文本字段/区域,以及几个短代码。现在,用户可以在该区域中输入任何简码。所以我不能直接使用功能。我需要保持这一部分的动态。
–тнєSufi
2015年1月3日在13:29
该文本字段在哪里,与后端页面编辑器屏幕中的文本字段相同吗?
–Pieter Goosen
2015年1月3日13:34
它可以是发布元。或者它可以是主题选项。我都使用the_content过滤器。
–тнєSufi
2015年1月3日,13:36
抱歉,但是所有这些都没有道理。为什么要在自定义字段中使用简码。那么,为什么还要使用简码呢?
–Pieter Goosen
2015年1月3日,13:41