将函数与其自己的参数绑定,以便在每个内容之后动态显示某些内容

时间:2014-09-22 作者:Mayeenul Islam

我有一个功能,可以使用用户定义的ID从数据库中获取一些内容。我需要在每个帖子/页面内容之后显示内容。所以我跟着@s_ha_dum\'s solution from WPSE, 如下所示:

function get_my_content( $id ) {
    $my_content = get_post( $id );
    return get_post_meta( $my_content->ID, \'wp_c_field\', true );       
}

$ad_func = get_my_content(1817);    
echo apply_filters(\'the_content\', $ad_func );
假设值为CF\'wp_c_field\' is“是”;这是文本;。上面的代码,不是每个帖子的内容,而是在<body> 标记为段落,如:

<body>
<p>this is the text</p>
我怎样才能继续做这些事情,这样我就可以改变钩子的方向,以便内容可以在内容之前或之后得到回应,等等。?

编辑请注意,第一个函数可以从不同的帖子类型获取帖子,也可以具有不同的帖子ID。比如:

function my_content( $content )
   global $post;
   $cfv = get_post_meta( $post->ID, \'wp_c_field\', true );
   $content = $content . $cfv;
   return $content;
}
add_filter( \'the_content\', \'cfv_post_content\' );
在绑定函数中the_content 对我不起作用。正如罗伯特·休伊所建议的第一个答案。我需要至少传递两个参数。

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

如果我理解得很好,那么您希望在每个帖子中附加一个从另一篇帖子中获取的元值,但后者需要是动态的,因此不能在函数中硬编码。

在OP中,您说帖子id是“用户定义的”。这到底是什么意思?如果它存储在某处或作为查询变量提供,最简单的解决方案是将检索所选帖子id的代码移动到函数中:

function get_my_content( $content ) {
  // assuming post id is saved as option
  $my_post_id = get_option( \'selected_post\' ); 
  $my_post = get_post( $my_post_id );
  $my_content = get_post_meta( $my_content->ID, \'wp_c_field\', true );  
  return $content . $my_content;     
}
add_filter( \'the_content\', \'get_my_content\' );

function get_my_content( $content ) {
  // assuming post id is passed as query var: example.com?thepost=xxx
  $my_post_id = filter_input( INPUT_GET, \'thepost\', FILTER_SANITIZE_NUMBER_INT );
  $my_post = get_post( $my_post_id );
  $my_content = get_post_meta( $my_content->ID, \'wp_c_field\', true );  
  return $content . $my_content;     
}
add_filter( \'the_content\', \'get_my_content\' );
用户可以通过不同的方式选择帖子id,但不知道您是如何选择帖子的。我不能更具体地说,但请考虑将帖子id的检索移到回调中的一般建议。

如果出于任何原因,您无法编辑回调以在其中移动post id检索,但您已将所选id保存在变量中,则可以使用PHP 5.3+closure and use statement:

// your original function
function get_my_content( $id ) {
    $my_content = get_post( $id );
    return get_post_meta( $my_content->ID, \'wp_c_field\', true );       
}

$selected_id = 1817; // user-selected id, stored in a variable

add_filter( \'the_content\', function( $content ) use( $selected_id ) {
  return $content . get_my_content( $selected_id );
} );

结束

相关推荐

theme functions (hooks)

WordPress已经提出了这个问题,但没有答案。我只是想在这个论坛上试试,如果有人知道的话,因为我也有同样的问题。要使用jquery滑块编辑我的主题,如何转到该脚本?,显示“$主题->挂钩(\'content\\u before\');”在content div标记中。有人能帮忙吗?我的主题索引。php包含以下内容<div id=\"main\"> <?php $theme->hook(\'main_before\'); ?> &#x