【问题标题】:Display related posts based on custom meta field on single WordPress post page?在单个 WordPress 帖子页面上基于自定义元字段显示相关帖子?
【发布时间】:2013-01-18 20:47:17
【问题描述】:

我目前正在为我的一位 DJ 朋友创建一个网站,他将他的混音上传到 Soundcloud 进行分享,他还将使用他的网站发布他的混音(通过 Soundcloud)并发布活动。

为了处理事件方面的事情,而不是使用自定义帖子类型,我只是将自己的元字段添加到标准帖子屏幕,并设置帖子以显示事件信息(如果已设置),并显示如果没有,帖子通常。 Full code,相关部分:

global $wp_query;
$postid = $wp_query->post->ID;
$event_venue = get_post_meta($postid, 'event_venue', true);

除此之外,为了处理他的混音,我设置了一个自定义帖子类型(通常是为了让他更容易区分,因为他在混音器和转盘之外并不是非常精通技术)和自定义元字段以允许他添加混音的录制位置(场地方面)和混音的 soundcloud URL(用于在帖子中自动嵌入混音,而不是使用插件)。我创建了一个自定义循环和single-mixes.php 页面来处理数据的显示,这本质上是原始循环(重命名为loop-mixes.php,所以我知道是什么)但包含一个文件mix_data.phpFull code,相关部分:

global $wp_query;
$postid = $wp_query->post->ID;
$mix_venue = get_post_meta($postid, 'mix_venue', true);

现在,我的问题。我想在单个帖子页面中将$mix_venue 中保存的数据与设置了$event_venue 的所有其他帖子进行比较,并显示那些匹配的帖子(即,如果用户正在查看混合,然后,他们可以看到在录制它的场地举行的任何即将发生的事件(实际上是任何过去的事件)。

但是,我正在自学 WordPress,我真的不完全确定从哪里开始。

【问题讨论】:

  • 编辑:测试混音帖子在这里:djryanmcnally.flyfx.co.uk/mixes/text-mix-one 我想在 soundcloud 播放器下方显示相关帖子 :) 您可能会注意到在 mix_data.php 我已经在时钟图标旁边回显了 $mix_url coundcloud 播放器,那是我测试正确的输出,我只是还没有编辑那个位:)
  • 解决了 :) 对于使用此查询的其他人,我在我的 loop-mixes.php 中使用了一个新查询来显示它,如下所示; pastebin.com/u0uGeaF0 注意,我现在只是把标题放进去,因为我刚刚解决了它,现在要好好格式化它:)

标签: php wordpress


【解决方案1】:

我看到你解决了它,但我会建议一种可重复使用的方法。

在你的主题的functions.php 中放置这个函数(full arguments list 代表get_posts()):

function print_event_venues( $mix_venue )
{   
    $args = array(
        'numberposts' => -1,
        'post_type'   => 'post',
        'post_status' => 'publish',
        'meta_key' => 'event_venue', 
        'meta_value' => $mix_venue
        );
    $posts = get_posts( $args );

    // DO NOTHING
    if( !$posts )
        return;

    foreach( $posts as $post )
    {
        // DO YOUR HTML
        echo $post->post_title;
    }
}

然后,在任何模板中,只需调用它:print_event_venues( $the_mix_venue );

有用信息:When should you use WP_Query vs query_posts() vs get_posts()?.

【讨论】:

  • 谢谢!这对于以后的一些想法会很方便:) 正如我所说,在我的主循环(博客页面)中,我包含一个文件,该文件检查事件详细信息的元字段是否已设置,并显示详细信息但是,如果它们在我创建的新查询中,当我包含该文件(我原始帖子中的第一个 pastebin)时,尽管显然设置了详细信息,但没有显示任何内容(否则查询将找不到它们!我我错过了什么?:/
  • 你是在查询里面做查询吗?如果是这样,请尝试function 方法。使用它来检查变量:echo '<!-- <pre>' . print_r($var, true) . '</pre> -->';。如果你在一个问题中做一个问题,打开一个new one ;)
  • 哦,是的,必须去外部站点查看代码并不好。尝试使问题自成一体。而且更简洁,我发现很难理解你给出的所有解释,上下文很好,但是,IMO,太多了......
  • 我很傻,在获取相关帖子的元值时,我使用了 $postid 而不是 get_the_id()。傻我 :) 我不开始一个新问题很糟糕!苏兹!
  • 没有问题,很高兴您解决了问题!
猜你喜欢
  • 1970-01-01
  • 2019-05-08
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多