仅为自定义插件创建的页面替换_CONTENT的正确方法

时间:2014-10-25 作者:Mark Rummel

我正在创建一个需要替换的插件the_content 仅在激活时创建的两个特定页面中。

这是我的代码:

add_filter(\'the_content\', \'emd_content\');  

function emd_content() {
  if ( is_page(\'Member Directory\') ) {
      include dirname( __FILE__ ) . \'/content-members.php\'; 
    }
    elseif ( is_page(\'Contact Members\') ) {
      include dirname( __FILE__ ) . \'/content-member-contact-form.php\'; 
    }
    else {
        the_content();
    }
}
上面的代码给了我一个500 Internal Server Error 对于除Member DirectoryContact Members, 两者都能正常工作。

如果我删除else { the_content(); }, 然后Member DirectoryContact Members 正常工作,但所有其他页面不显示任何内容the_content 应显示。

我还试着包装add_filter() 在内部if(is_page(\'Member Directory\') || is_page(\'Contact Members\')) { }. the_content 适用于其他页面,但不适用于插件创建的两个页面。

What is a better/proper way to replace the_content for these two pages using my plugin?

2 个回复
最合适的回答,由SO网友:Ashok Kumar Nath 整理而成

您需要返回过滤后的内容,请尝试以下操作:

add_filter(\'the_content\', \'emd_content\');  

function emd_content( $content ) {
  if ( is_page(\'Member Directory\') ) {
      include dirname( __FILE__ ) . \'/content-members.php\'; 
    }
    elseif ( is_page(\'Contact Members\') ) {
      include dirname( __FILE__ ) . \'/content-member-contact-form.php\'; 
    }
    else {
        return $content;
    }
}
但更好的方法是使用custom page template 对于那些页面。

SO网友:Mark Rummel

Ashok的答案很有效,但我也发现了以下几点,这就是我决定采用的答案。

简而言之filter 必须始终返回值-the_content() 只是回声,可能会导致无限循环,因为它会调用您的过滤器。

function emd_content($content) {
  if ( is_page(\'Member Directory\') ) {
      $content = include dirname( __FILE__ ) . \'/content-members.php\'; 
    }
    elseif ( is_page(\'Contact Members\') ) {
      $content = include dirname( __FILE__ ) . \'/content-member-contact-form.php\'; 
    }
    else {
      $content = $content;
    }
      return $content;
}

结束

相关推荐

我似乎不能在Get_Pages中显示摘录,并且不知道为什么?

因此,我在get\\u页面中有一个foreach循环,它显示父ID中的子页面列表。标题、特色图片和链接都很好,但我根本无法找到摘录。我在引用http://codex.wordpress.org/Function_Reference/get_pages$args = array( \'child_of\' => 16, \'title_li\' => \'\', \'depth\' => 0,