制作页面也可以作为分类法吗?或者给出整页的分类法?

时间:2011-01-02 作者:Chris

我开了一个视频游戏新闻博客。当我的员工撰写新闻文章或评论时,我希望他们能够将该帖子“分配”到游戏中(如果适用),这样我就可以拥有单曲。php模板调用该游戏的信息(标题、boxart、发布者、发布日期等),并将其显示在侧边栏中。我认为这可能需要一个自定义的分类法,以便可以像标记一样将其分配给帖子。

但后来我意识到,我也希望那些游戏有一整页的信息。我最初想为页面创建一个自定义帖子类型,使用自定义字段,我可以调用游戏的方块艺术,显示发布日期,显示游戏上的任何帖子或评论,并用简短的摘录显示它们,还可以使用自定义分类法显示游戏的发布者、开发人员等。。。

然后我意识到我也希望那些出版商和开发人员也有自己的页面。描述,位置,涉及他们的文章链接,任何属于他们的游戏列表。。。等等

其中任何一个都不能是另一个的子页面,因为开发人员并不总是与任何特定的发行商有永久的联系,游戏有时是由多方共同开发的,等等。

我陷入困境,不知道如何重新组织我的网站。我真的很想使用WordPress中的所有新玩具来创建我想要的网站,而不是限制我所能做的。有什么建议吗?几天来我一直在集思广益,想弄明白些什么。如有任何建议,将不胜感激。

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

有几个选择。实际上,我也经历了和你一样的过程。如果Wordpress允许您将帖子或自定义帖子类型链接在一起,这将很容易,但取而代之的是,Wordpress开发人员必须进行黑客攻击!

我正在开发的插件中使用的解决方案有点粗糙,但它对我有效。基本上,在我的插件中,我希望有一个名为series的帖子类型,可以保存特定电视剧的信息,一个用于剧集的帖子类型,另一个用于DVD和蓝光版本的帖子类型。我想让插曲和版本的帖子类型都引用它们来自的系列类型,所以如果我创建一个单一的系列帖子页面,它可以列出插曲和版本以及系列信息。

我的解决方案涉及一个保存序列对象id的自定义字段。实现这一点的第一种方法是创建一个元框,其中包含一个包含所有系列类型帖子的选择框:

public function get_select_array($post_type) {
    global $wpdb;
    $query = "SELECT ID, post_title FROM $wpdb->posts WHERE post_type = \'$post_type\' AND post_status = \'publish\' ORDER BY post_title";
    $results = $wpdb->get_results($query, OBJECT);
    $series = array();
    foreach ($results as $result) {
        $series[] = array(\'name\' => $result->post_title, \'value\' => $result->ID);
    }
    return $series;                 
}
函数get\\u select\\u array()基本上采用自定义的帖子类型,并返回在数组中发布的所有帖子的标题和ID。然后,我使用该数组填充一个选择框。在我的插件中,我使用的是metaboxcreation class created by Rilwis 但我会发布一些代码供您使用(代码改编自Rilwis的代码):

add_meta_box(\'parent_series\', \'Series\', \'show_series_metabox\', \'episode\', \'side\', \'high\');  //add a side metabox
function show_series_metabox() {
    global $post;
    echo \'<input type="hidden" name="wp_meta_box_nonce" value="\', wp_create_nonce(basename(__FILE__)), \'" />\';  //nonce
    $series = get_select_array(\'series\'); //get post titles and ID\'s of post type \'series
    $meta = get_post_meta($post->ID, \'parent_series\', true); //get the meta value of the custom field
    echo \'<select name="parent_series" id="parent_series">\';//create the select box
    foreach ($series as $s) {
        echo \'<option value="\', $s[\'value\'], \'"\', $meta == $s[\'value\'] ? \' selected="selected"\' : \'\', \'>\', $s[\'name\'], \'</option>\';
    }
    echo \'</select>\';
}
add_action(\'save_post\', \'save_series_metabox\');
function save_series_metabox() {
    $real_post_id = isset($_POST[\'post_ID\']) ? $_POST[\'post_ID\'] : NULL ;   //get post id
    $old = get_post_meta($real_post_id, \'parent_series\', true);             //get old stored meta value
    $new = $_POST[\'parent_series\'];                                         //new meta value
    if ($new && $new != $old) {                                             //saving or deleting value
        update_post_meta($real_post_id, \'parent_series\', $new);
    } elseif (\'\' == $new && $old) {
        delete_post_meta($real_post_id, \'parent_series\', $old);
    }
}
这将添加一个元盒,该元盒具有列出所有可用系列的select。保存帖子时,该序列的id将保存在名为“parent\\u series”的自定义字段中。完成后,您可以调用该id,并使用它通过自定义查询调用序列信息。或者可以做相反的事情:在序列页面上,查询所有在自定义字段/元数据中具有相同值的插曲页面。

就在这里。使用此代码,您可以将一种类型的帖子链接到另一种类型的帖子,使它们在某种程度上像伪分类法一样工作。我很快编辑了代码,所以如果您发现任何错误或bug,请告诉我。如果有更好的方法,请告诉我:)

结束

相关推荐

自定义Query_Posts()参数

我正在为主题添加投票功能。访问者可以对帖子投赞成票或反对票。我创建了一个表来存储每个帖子的投票数,效果很好。现在,我正试图按投票对帖子进行排序。我有“投赞成票”和“投反对票”的链接。例如,当您单击“投票支持”一个新参数时sort=up 在URL中传递。在循环中,如果参数存在并且为=“up”,则我希望使用投票向上循环帖子。wpdb->get_results(\"SELECT post_id, FROM $wpdb->votes WHERE up > 5\"); 这就是我想用的东西