SkyRanger Posted June 29, 2019 Share Posted June 29, 2019 Run into an issue with links and permlink. The issue I am having is depending on the permalink setting: if link is http://url.com/kudos/?urlid=abc123 and the permalink gets changed http://url.com/?p123 how would i get the ?urlid=abc123 to change to &urlid=abc123 as the same time. I am currently using: get_permalink( get_page_by_path( 'kudos' ) ); Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/ Share on other sites More sharing options...
SkyRanger Posted June 29, 2019 Author Share Posted June 29, 2019 Could not edit post as took to long check on a piece of code that I thought might work. I thought maybe str_replace would work but unsure how I would get it to recognize the permalink to have it work. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568022 Share on other sites More sharing options...
maxxd Posted June 30, 2019 Share Posted June 30, 2019 I'm confused by your question. In a URL, '?xx' is the first variable passed via GET, '&xx' is any of any number of variables passed in the URL after the first. So your desire to change '?urlid=abc123' to '&urlid=abc123' is solved by adding a variable before the urlid. What is the value of your permalink option in the Admin > Settings > Permalinks? If you're set to 'Post name' there are a few different things you can do. Obviously you can grab $_GET['urlid'] using an early-running hook and go if it's anywhere in the URL string. However, if you're saying that WordPress is removing the '?urlid=' part, that's a routing issue. You can set up routing in WP using the WordPress rewrite rules which will give you something along the lines of 'http://url.com/kudos/abc123' or 'http://url.com/urlid/abc123' depending on how it's all set up. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568041 Share on other sites More sharing options...
SkyRanger Posted June 30, 2019 Author Share Posted June 30, 2019 Right now I am coding it to work with $_GET urlid so the link right now would go http://127.0.0.1/kudos/?urlid=randomcode but if I change it to http://127.0.0.1/?p=123 the ?urlid will not work after but the ?p=123&urlid=randomcode does The issue that I am running into is right now is that permalink is set to post name. Trying to sort out how to fix it if somebody else is running plain. The ? will work in post name but not plain. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568042 Share on other sites More sharing options...
SkyRanger Posted June 30, 2019 Author Share Posted June 30, 2019 Due to being VERY new to coding wordpress plugins, was wondering if somebody could point me in a direction to learn more about rewrites (actually looking for example) so I can properly learn how to do it. I do know I need something along this line: (.?.+?)?(:/([0-9]+))?/?$ to ensure that a permalink will work properly in my plugin when a site owner chooses a permalink option in settings. Right now the link /kudos/?kudoid= but need to figure out how to make it change from post name to plain and back when the permalink is changed in wordpress so the ?kudoid= will continue working. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568050 Share on other sites More sharing options...
maxxd Posted June 30, 2019 Share Posted June 30, 2019 18 hours ago, SkyRanger said: if I change it to http://127.0.0.1/?p=123 the ?urlid will not work Of course it won't work - you're not passing 'urlid' in this case. You're passing 'p'. 6 hours ago, SkyRanger said: was wondering if somebody could point me in a direction to learn more about rewrites Did you follow the link I put in the first post to the codex rewrite rules page? I think I'm still not getting what you're asking - even using post name as the permalink value in WP you can use URL parameters like normal. Just output the permalink, then append URL-encoded key/value pairs, then use them in $_GET. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568055 Share on other sites More sharing options...
SkyRanger Posted July 1, 2019 Author Share Posted July 1, 2019 3 hours ago, maxxd said: Did you follow the link I put in the first post to the codex rewrite rules page? I think I'm still not getting what you're asking - even using post name as the permalink value in WP you can use URL parameters like normal. Just output the permalink, then append URL-encoded key/value pairs, then use them in $_GET. Hi maxxd yes I did thank you. Actually have it open and have been reading it over and starting to figure out the premises behind it. Confused but slowly starting to understand it but. This needs to go in to my plugin functions file and somehow this is suppose to make : href= ". get_permalink( get_page_by_path( '$kudopagename' ) ) . "?kudokey=" .$kudokey .">View Kudo work with any permalink chosen ie: plain function custom_rewrite_kudos() { add_rewrite_rule('^kudos/([0-9]+)/?', 'index.php?page_id=$matches[1]', 'top'); add_rewrite_tag('%kudokey%', '([^&]+)'); } add_action('init', 'custom_rewrite_kudos'); Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568057 Share on other sites More sharing options...
maxxd Posted July 1, 2019 Share Posted July 1, 2019 Look at the 'query_vars' and 'rewrite_rules_array' filter hooks as well - I've had varying degrees of success using either the add_rewrite_rules() function vs. just brute forcing the rewrite_rules_array array via those two hooks. I wish I could remember why, but it's late and it's been a long freaking week, so that information got purged. If I remember tomorrow I'll let you know, but in the meantime those two hooks are another way to go about skinning this particular cat that might be a bit easier to follow. Rewrites and routing can get confusing. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568059 Share on other sites More sharing options...
SkyRanger Posted July 2, 2019 Author Share Posted July 2, 2019 Little farther ahead almost got it working but not sure how to get the var to work properly to only show the kudokey entry only and not the full list of kudos. This is what I have so far: add_action( 'init', 'add_kudoskey_rule' ); function add_kudoskey_rule() { add_rewrite_rule( '^kudos/(.+)/?$', 'index.php?kudokey=$matches[1]', 'top' ); } add_filter('query_vars', 'kudos_plugin_query_vars'); function kudos_plugin_query_vars($vars) { $vars[] = 'kudokey'; return $vars; } Current URL: echo '<a target=blank href=' .get_permalink( get_page_by_title( 'kudos' ) ). '?kudokey=' .$kudokey. '>View Kudo</a>'; http://127.0.0.1/?kudokey=JFMGTTQ5 That link will show the kudokey post but when I use the URL rewrite: this link http://127.0.0.1/?page_id=142?kudokey=JFMGTTQ5 it shows all entries. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568098 Share on other sites More sharing options...
maxxd Posted July 4, 2019 Share Posted July 4, 2019 It looks like your rule is slightly malformed. As I said earlier, I've found the add_rewrite_rule() function to be a bit fiddly - I try to use the 'rewrite_rules_array' filter instead. Try this: add_filter('add_rewrite_rules' ,'add_kudoskey_rule'); function add_kudoskey_rule(array $rules){ $new = [ 'kudos/([^/]+)/?$' => 'index.php?pagename=kudos&kudokey=$matches[1]', ]; $rules = array_merge($rules, $new); return $rules; } Now, with this in place you should be able to (after you've gone to the Permalinks page and clicked 'Save' to clear the rewrite cache) go to 'http://127.0.0.1/kudos/JFMGTTQ5' and it should show that specific kudos. If you want to get the kudos key referenced in the URL, use get_query_var('kudoskey'). If you want to show an archive listing of all kudos records, make sure that 'has_archive' is set to true in the arguments array of your custom post type registration call, then go to 'http://127.0.0.1/kudos' and you should see the listing. The whole point of adding a rewrite rule is to enable pretty URLs and to not have to use '?variableName=variableValue' because it's easier for the user and better for SEO. 1 Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568141 Share on other sites More sharing options...
SkyRanger Posted July 5, 2019 Author Share Posted July 5, 2019 Thanks maxxd, except for the parse error under the $rules = array_merge thank you. It looks like there may be an issue with my code in the end as I am unable to get it to work properly on my end. More than likely it is something I have done so will just need to see what I have done wrong. Thank you for all your assistance thus far. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568163 Share on other sites More sharing options...
maxxd Posted July 5, 2019 Share Posted July 5, 2019 2 hours ago, SkyRanger said: the parse error under the $rules = array_merge What parse error is that throwing? Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568166 Share on other sites More sharing options...
maxxd Posted July 5, 2019 Share Posted July 5, 2019 Also, I'm assuming quite a few things about your project that may not be true. I'm assuming, for instance, that kudos is a custom post type and you're trying to show both an archive listing of kudoses and single kudos records both. I'm also assuming that you're not wanting to show a kudos specified by URL parameter on a random page (for instance, here's 1 kudos record on the 'about us' page!). Each of these assumptions could very well change the overall approach; and even outside of all that, dealing with routing in WordPress is a convoluted and weird rabbit hole on it's own... Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568167 Share on other sites More sharing options...
SkyRanger Posted July 6, 2019 Author Share Posted July 6, 2019 Might not have been one if I would have typed and copied it in properly. The whole plugin is separate from posttype. Own database tables for settings and entries. User role access only pages etc. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568168 Share on other sites More sharing options...
maxxd Posted July 6, 2019 Share Posted July 6, 2019 Ah - OK. You can still use the WordPress WP_Query object (global $wpdb) to interact with the database, you'll just have to supply the table names yourself. Also, routing should still work as expected - if the correct rule is inserted in the rules array, you should be able to visit /kudos/JFMGTTQ5 and use get_query_var() to return 'JFMGTTQ5'. As far as an archive listing goes, I think you'll have to that yourself. Not trying to be nosy or pry, but is there a reason it's not set up as a custom post type? Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568177 Share on other sites More sharing options...
SkyRanger Posted July 6, 2019 Author Share Posted July 6, 2019 2 reasons. One is I am an idiot for not doing it that way and was too far in to the plugin to redo (possible next version if I can talk the company I work for to go that route). They also wanted to keep the entries in a separate table for ease of transfer to another site later down the road (previous guy who wrote the kudos program back in 2014 for tham also last time WordPress was updated, provided no way to update so they wanted stand alone plugin that can also me modified down the road for use on a stand alone site if needed. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568186 Share on other sites More sharing options...
maxxd Posted July 7, 2019 Share Posted July 7, 2019 Given the requirements from your company, I'd definitely argue that you're not an idiot. There are times when you have to just do what you've been asked to do, no questions. And yeah, if there's a chance that you'll be moving to a different CMS, extracting specific data from the posts table is difficult at best. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568188 Share on other sites More sharing options...
SkyRanger Posted July 7, 2019 Author Share Posted July 7, 2019 All I can say they are happy with what is done so far and now I have another company thanks to an idiot friend...lol that would like a copy also which is the reason I am trying to get the permalink issue resolved. Almost have them talked into using the Post Name Permalink as right now they are using plain which is causing a nightmare with what I currently have coded. Quote Link to comment https://forums.phpfreaks.com/topic/308907-wordpress-permalink/#findComment-1568189 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.