有几个选择。实际上,我也经历了和你一样的过程。如果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。然后,我使用该数组填充一个选择框。在我的插件中,我使用的是metabox
creation 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,请告诉我。如果有更好的方法,请告诉我:)