WordPress 函数在每个get_post循环中注入 php 代码以决定是否显示帖子

WordPress function inject php code at every get_post loop to decide if post gets displayed

提问人:Phantom001 提问时间:9/19/2023 更新时间:9/19/2023 访问量:21

问:

我编写了一个简单的 php 代码,根据帖子自定义字段检查用户角色,以决定帖子是否显示在列表中。

如果我在手动发布循环中编写代码并在发布结构周围制作一个 if,它就可以正常工作。

现在我想把它打包成一个函数,在每get_post自动运行,但在这里,我的 wordpress 知识已经结束了......

我只找到了防止帖子根据类别显示的示例。

它自己的代码不是很相关...... 仅当 $ure_display 变量设置为 true = 在列表中显示帖子时,否则隐藏帖子。

代码:

<?php
$user = wp_get_current_user();
$get_roles = ( array ) $user->roles;
$cust = get_post_custom($post_id);
$ure_roles = $cust["ure_content_for_roles"][0];
$ure_flag = $cust["ure_prohibit_allow_flag"][0];
$ure_display = "false";
$permchk = 0;
            
foreach ($get_roles as $value) {
 if (str_contains($ure_roles, $value)) {
     $permchk = 1;
}
}
            
if ($permchk == 1 && $ure_flag == 2){
$ure_display = "true";
echo $ure_display;
}
?>

我希望有人能帮我举个例子。

谢谢!

PHP 函数 wordpress-主题

评论

0赞 CBroe 9/19/2023
该函数(您确实是说,是的,而不是?)似乎没有执行任何过滤器(developer.wordpress.org/reference/functions/get_post/#source),因此实际上没有办法从外部操纵该函数的功能。get_postget_posts
0赞 Phantom001 9/19/2023
你是对的。与此同时,我发现有一个pre_get_posts钩子可以做这样的事情......这是一个带有类别的示例,但我不知道如何更改代码:crunchify.com/...
0赞 CBroe 9/19/2023
您正在处理帖子元数据,因此您需要添加一个元查询 - developer.wordpress.org/reference/classes/wp_query/...

答:

0赞 Rosie Steele 9/19/2023 #1

要为 WordPress 中的每个“get_post”循环自动执行 PHP 代码,您可以使用“the_post钩子”,该子在显示每个帖子之前触发。下面是如何实现此目的的示例:

  function custom_post_display_logic($post) {
    $user = wp_get_current_user();
    $get_roles = (array) $user->roles;
    $cust = get_post_custom($post->ID);
    $ure_roles = $cust["ure_content_for_roles"][0];
    $ure_flag = $cust["ure_prohibit_allow_flag"][0];
    $ure_display = false;
    $permchk = 0;

    foreach ($get_roles as $value) {
        if (strpos($ure_roles, $value) !== false) {
            $permchk = 1;
            break;
        }
    }

    if ($permchk == 1 && $ure_flag == 2) {
        $ure_display = true;
    }

    return $ure_display;
}

add_action('the_post', 'custom_post_display_logic');

此函数挂接到“the_post”中,并为每个帖子应用自定义显示逻辑。如果帖子应该显示,它将返回“true”,如果应该根据您的条件隐藏它,它将返回“false”。

评论

0赞 Phantom001 9/19/2023
谢谢!但是,如果它挂钩到帖子本身,它不会阻止在帖子循环中显示帖子(如类别页面),或者我在这里弄错了什么?我尝试实现代码,但遗憾的是没有运气......如果 $ure_display 不为 true,我还尝试清空帖子数组或 wpdie,以防止帖子显示在列表中......可悲的是没有运气。谢谢!