Je montre une liste de publications sur le devant de mon site wordpress qui ont chacune un menu déroulant avec une liste de catégories, qui sont extraites comme suit.
Comme vous pouvez le constater, le bouton d'envoi de formulaire est entouré de balises <noscript>
. Ainsi, lorsqu'une option est sélectionnée dans la liste déroulante au moment où elle est redirigée, elle sera redirigée vers la catégorie qui a été choisie.
Je souhaite modifier cette fonctionnalité afin que, lorsqu'une option est sélectionnée dans la liste déroulante, elle ajoute le message pertinent à la catégorie sélectionnée dans la liste déroulante, mais la conserve également dans toutes les autres catégories dans lesquelles elle était précédemment.
J'envoie le formulaire à addcat.php
qui est l'endroit où je pense avoir besoin d'ajouter un script pour faire ce dont j'ai besoin d'une manière ou d'une autre?
<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>
Pour le moment j'ai dans mes fonctions:
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' );
Et dans mon addcat.php
if( !empty( $_POST['cat'] ) ) { add_action( 'init', 'addPostToCategoryLauncher' ); }
header('Location: ' . $_SERVER['HTTP_REFERER']);
Mais ceci est juste en train de dire add to catId = 28 mais j'ai besoin que ce soit la catégorie qui a été choisie dans la liste déroulante et non Id 28, la fonction ne semble pas fonctionner non plus, donc il faudra peut-être quelques ajustements.
Votre formulaire utilise 'get' ($_GET
), mais addcat.php
recherche les valeurs $_POST
. Cela ne va jamais au travail. Mais au-delà de cela, vous avez une chose assez compliquée qui se passe ici. Vous n'avez pas vraiment la fonction accrochée et addcat.php
. Vous avez besoin de l’un ou de l’autre, et la fonction “crochet” est probablement la meilleure idée. Quelque chose comme:
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' );
Vous devrez envoyer le postID avec votre soumission de formulaire.
<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>
Ce sont des fonctions nues. Vous devez incorporer une vérification de cohérence pour les valeurs $_GET
et , vous devez également utiliser des nonces .
J'ai émis des hypothèses sur le fonctionnement de votre code, de sorte qu'il pourrait y avoir des problèmes et qu'il y aurait peut-être un meilleur crochet que init
, mais il faudrait que je regarde.
Essayez ça.