Custom Field 101

时间:2016-06-08 作者:WordBear

我正在学习如何使用自定义字段函数。我有一系列标题为“亚当斯县”、“莱恩县”等的帖子。所有帖子都属于“华盛顿”类别,并带有“县”的标签

我想在每个页面上显示以下内容:

“如果你住在$MyCounty,告诉我们你的想法。”

$MyCounty将响应页面标题(例如Adams County)。我可以在我的常规网站上使用PHP include轻松做到这一点。然而,有人建议我应该在WordPress中使用自定义字段和短代码。

我创建了一个名为“County Intro”的自定义字段建议我使用以下代码:

function show_county() {
  global $post;
  // assumes the string is in the custom field \'county\'
  $county = get_post_meta( $post->ID, \'county\');
  if ( $county ) {
    return $county;
    }
}
add_shortcode( \'county\', \'show_county\');
但我甚至不知道在哪里插入代码,除了“循环”有人能告诉我需要打开的文件的名称吗?我使用的是儿童主题;是否需要将此文件从主题文件夹复制到子主题文件夹?

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我不会为这个功能使用自定义字段或短代码,我会查看过滤器。the_content 过滤器和loop_end 动作(只需确保主题使用while ( have_posts() ) 在单篇文章中,我立刻想到了这一点。这两个选项不需要修改主题中的任何文件。这样,您就可以在单个贴子页面中添加额外的内容(,我想这就是您所需要的内容),而无需创建子主题。

以这种方式处理问题时,您也不需要记住使用快捷码或为特定帖子设置custoim字段,因此您有了一种更动态的方式,只需设置一次就可以了

为了方便起见,也是推荐的方法,是创建own custom plugin 您可以在其中转储代码。这样,即使切换主题,自定义文本仍将显示,而无需修改新主题或创建另一个子主题。

让我们看看添加自定义文本行的两种方法:(NOTE: 所有代码都未经测试,应放入自定义插件中

the_content 筛选这将在单个贴子页面上的内容后添加自定义文本

add_filter( \'the_content\', function ( $content )
{
    /** 
     * Only filter the content on the main query, and when the post belongs
     * to the washington category and are tagged county. Adjust as needed
     */
    if ( !is_single() )
        return $content;

    if ( !in_the_loop() )
        return $content;

    $post = get_queried_object();
    if (    !in_category( \'washington\', $post ) 
         && !has_tag( \'county\', $post )
    )
        return $content;

    // We are inside the main loop, and the post have our category and tag
    // Get the post title
    $MyCounty = apply_filters( \'the_title\', $post->post_title );
    // Set our custom text
    $text = "If you live in $MyCounty, tell us what you think.";

    return $content . $text;
}):

loop_end 操作

这将在帖子后添加文本,您也可以使用loop_start 在循环之前添加文本,甚至the_post 这也会在帖子之前添加文本。请注意,所有操作都需要响应其输出

add_action( \'loop_end\', function ( \\WP_Query $q )
{
    // Only target the main query on single pages
    if (    $q->is_main_query()
         && $q->is_single()
    ) {
        $post = get_queried_object();
        if (    in_category( \'washington\', $post )
             && has_tag( \'county\', $post )
        ) {
            $MyCounty = apply_filters( \'the_title\', $post->post_title );
            $text     = "If you live in $MyCounty, tell us what you think.";

            // Echo our custom text
            echo $text;
        }
    }
});    

SO网友:majick

最快的方法实际上是制作一个独立的php文件(将代码封装在<?php 密码?> 并将其保存在/wp-content/mu-plugins/ 目录,例如,我经常使用site-shortcodes.php...

WordPress将自动加载文件,您的功能将独立于您使用的主题。否则,如果功能与您的主题相关联,您可以使用您的子主题functions.php

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\