我在我的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,该函数似乎也不起作用,因此可能需要一些调整。
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
但我得四处看看。
试试看。