从下拉列表中更改帖子类别

时间:2012-10-19 作者:Matt

我在我的wordpress网站前面显示了一个帖子列表,每个帖子旁边都有一个下拉列表,其中包含一个类别列表,如下所示。

正如您所看到的,表单提交按钮被包装在<noscript> 标记,以便在此时从下拉列表中选择选项时,它将重定向到所选类别。

我想改变这个功能,这样当从下拉列表中选择一个选项时,它会将相关帖子添加到从下拉列表中选择的类别中,但也会将其保留在以前的所有其他类别中。

我将表格发送至addcat.php 这就是我认为我需要添加一个脚本来做我需要的事情的地方?

<form action="<?php bloginfo(\'url\'); ?>/addcat.php" method="get">
<div>
 <?php
  $select = wp_dropdown_categories(\'show_option_none=Select category&show_count=0&orderby=name&echo=0&child_of=28&hide_empty=0\');
  $select = preg_replace("#<select([^>]*)>#", "<select$1 onchange=\'return this.form.submit()\'>", $select);
  echo $select;
 ?>
<noscript><div><input type="submit" value="View" /></div></noscript>
</div>
</form> 
目前,我的职能包括:

function addPostToCategoryLauncher()
{
$newCatId = 28;
$newCatId = get_cat_ID( \'my-category\' );
$categories = wp_get_object_terms( $post->ID, \'category\', array( \'fields\' => \'ids\' ) );
array_push( $categories, $newCatId );
$categories = array_unique( array_map( \'intval\', $categories ) );
wp_set_object_terms( $post->ID, $categories, \'category\' );
}
add_action( \'init\', \'addPostToCategoryLauncher\' );
在我的addcat中。php

if( !empty( $_POST[\'cat\'] ) ) { add_action( \'init\', \'addPostToCategoryLauncher\' ); }
header(\'Location: \' . $_SERVER[\'HTTP_REFERER\']);
但这只是说添加到catId=28,但我需要它是从下拉列表中选择的类别,而不是Id 28,该函数似乎也不起作用,因此可能需要一些调整。

1 个回复
SO网友:s_ha_dum

您的表单正在使用“get”($_GET ), 但是addcat.php 正在寻找$_POST 价值观这是行不通的。但除此之外,这里还有一件非常复杂的事情。实际上,钩子函数和addcat.php. 您需要一个或另一个,挂钩函数可能是更好的主意。类似于:

function addPostToCategoryLauncher() {
  global $_GET;
  if (isset($_GET[\'cat\']) && isset($_GET[\'postID\')) { // I am assuming that \'cat\' is the correct parameter name
    wp_set_object_terms( $_GET[postID], $_GET[\'cat\'], \'category\' ,true);
  }
}
add_action( \'init\', \'addPostToCategoryLauncher\' );
您需要在提交表单时发送postID。

<form action="<?php bloginfo(\'url\'); ?>/addcat.php" method="get">
<input type="hidden" name="postID" value="<?php echo $post->ID; ?>" ?>
<div>
 <?php
  $select = wp_dropdown_categories(\'show_option_none=Select category&show_count=0&orderby=name&echo=0&child_of=28&hide_empty=0\');
  $select = preg_replace("#<select([^>]*)>#", "<select$1 onchange=\'return this.form.submit()\'>", $select);
  echo $select;
 ?>
<noscript><div><input type="submit" value="View" /></div></noscript>
</div>
</form>
这些是基本功能。您需要对$_GET 价值观和you really should use nonces

我对您的代码如何工作做了一些假设,因此可能会出现小故障,可能会有更好的挂钩init 但我得四处看看。

试试看。

结束